From 280ead99069e8325ab2827aecd88ebf0a749969a Mon Sep 17 00:00:00 2001 From: tuqiang <437016993@qq.com> Date: Fri, 13 Jun 2025 16:19:45 +0800 Subject: [PATCH] =?UTF-8?q?add:=E6=96=B0=E5=A2=9E=E7=94=9F=E7=AE=94?= =?UTF-8?q?=E3=80=81=E7=83=98=E7=AE=B1=E3=80=81=E5=88=86=E5=88=87=E4=B8=8A?= =?UTF-8?q?=E6=96=99=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dao/PdmBiSlittingproductionplan.java | 9 +- ...dmBiSlittingproductionplanServiceImpl.java | 2 +- .../sch/point/dao/StIvtCoolregionio.java | 2 +- .../service/impl/SlitterServiceImpl.java | 4 +- .../java/org/nl/common/base/PageInfo.java | 27 + .../org/nl/modules/common/utils/PageUtil.java | 21 + .../org/nl/modules/security/rest/DesUtil.java | 254 +++--- .../nl/wms/pda/mps/rest/BakingController.java | 12 +- .../wms/pda/mps/rest/FeedingController.java | 7 - .../wms/pda/mps/rest/RawFoilController.java | 24 + .../nl/wms/pda/mps/service/BakingService.java | 10 +- .../wms/pda/mps/service/FeedingService.java | 7 - .../wms/pda/mps/service/RawFoilService.java | 22 +- .../mps/service/impl/BakingServiceImpl.java | 777 ++++++++++-------- .../mps/service/impl/FeedingServiceImpl.java | 105 --- .../mps/service/impl/RawFoilServiceImpl.java | 491 ++++++++--- .../org/nl/wms/pda/mps/wql/PDA_RAWFOIL_01.wql | 94 ++- .../pdm/ivt/rest/CoolPointIvtController.java | 164 ++-- .../pdm/ivt/rest/CutPointIvtController.java | 7 + .../pdm/ivt/rest/SbPointIvtController.java | 128 +-- .../pdm/ivt/service/CoolPointIvtService.java | 164 ++-- .../pdm/ivt/service/CutPointIvtService.java | 2 + .../pdm/ivt/service/SbPointIvtService.java | 140 ++-- .../pdm/ivt/service/dto/CutPointIvtDto.java | 5 + .../service/impl/CoolPointIvtServiceImpl.java | 442 +++++----- .../service/impl/CutPointIvtServiceImpl.java | 16 + .../service/impl/SbPointIvtServiceImpl.java | 292 +++---- .../controller/CoolPointIvtController.java | 80 ++ .../RawfoilWorkOrderController.java | 84 ++ .../controller/SbPointIvtController.java | 69 ++ .../service/CoolPointIvtService.java | 47 ++ .../service/RawfoilWorkOrderService.java | 79 ++ .../service/SbPointIvtService.java | 44 + .../service/dao/CoolPointIvt.java | 164 ++++ .../service/dao/RawfoilWorkOrder.java | 189 +++++ .../service/dao/SbPointIvt.java | 122 +++ .../dao/mapper/CoolPointIvtMapper.java | 18 + .../service/dao/mapper/CoolPointIvtMapper.xml | 75 ++ .../dao/mapper/RawfoilWorkOrderMapper.java | 22 + .../dao/mapper/RawfoilWorkOrderMapper.xml | 91 ++ .../service/dao/mapper/SbPointIvtMapper.java | 20 + .../service/dao/mapper/SbPointIvtMapper.xml | 6 + .../service/dto/CoolPointIvtDto.java | 160 ++++ .../service/dto/RawfoilWorkOrderDto.java | 32 + .../service/dto/SbPointIvtDto.java | 85 ++ .../service/impl/CoolPointIvtServiceImpl.java | 150 ++++ .../impl/RawfoilWorkOrderServiceImpl.java | 253 ++++++ .../service/impl/SbPointIvtServiceImpl.java | 110 +++ .../pdm/rest/RawfoilworkorderController.java | 162 ++-- .../SlittingproductionplanController.java | 5 +- .../pdm/service/RawfoilworkorderService.java | 170 ++-- .../SlittingproductionplanService.java | 11 +- .../dto/SlittingproductionplanDto.java | 6 + .../impl/RawfoilworkorderServiceImpl.java | 500 +++++------ .../SlittingproductionplanServiceImpl.java | 44 +- .../src/main/java/org/nl/wms/pdm/wql/pdm.xls | Bin 247808 -> 250368 bytes .../org/nl/wms/sch/tasks/CallEmpReelTask.java | 332 ++------ .../org/nl/wms/sch/tasks/InCoolIvtTask.java | 39 +- .../java/org/nl/wms/sch/tasks/InHotTask.java | 100 +-- .../java/org/nl/wms/sch/tasks/OutHotTask.java | 147 +--- .../java/org/nl/wms/util/ConvertUtil.java | 34 + .../wms/pdm/ivt/cutpointivt/cutpointivt.js | 8 +- .../views/wms/pdm/ivt/sbpointivt/index.vue | 25 +- .../wms/pdm/ivt/sbpointivt/sbpointivt.js | 9 +- .../wms/pdm/order/rawfoilworkorder/index.vue | 35 +- .../wms/pdm/order/slittingplan/index.vue | 330 +++++++- 66 files changed, 4790 insertions(+), 2295 deletions(-) create mode 100644 lms/nladmin-system/src/main/java/org/nl/common/base/PageInfo.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/controller/CoolPointIvtController.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/controller/RawfoilWorkOrderController.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/controller/SbPointIvtController.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/CoolPointIvtService.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/RawfoilWorkOrderService.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/SbPointIvtService.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/dao/CoolPointIvt.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/dao/RawfoilWorkOrder.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/dao/SbPointIvt.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/dao/mapper/CoolPointIvtMapper.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/dao/mapper/CoolPointIvtMapper.xml create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/dao/mapper/RawfoilWorkOrderMapper.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/dao/mapper/RawfoilWorkOrderMapper.xml create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/dao/mapper/SbPointIvtMapper.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/dao/mapper/SbPointIvtMapper.xml create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/dto/CoolPointIvtDto.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/dto/RawfoilWorkOrderDto.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/dto/SbPointIvtDto.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/impl/CoolPointIvtServiceImpl.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/impl/RawfoilWorkOrderServiceImpl.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/impl/SbPointIvtServiceImpl.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/util/ConvertUtil.java diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/bi/slittingproductionplan/service/dao/PdmBiSlittingproductionplan.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/bi/slittingproductionplan/service/dao/PdmBiSlittingproductionplan.java index 70c0f31..db6eef4 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/bi/slittingproductionplan/service/dao/PdmBiSlittingproductionplan.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/bi/slittingproductionplan/service/dao/PdmBiSlittingproductionplan.java @@ -23,7 +23,7 @@ public class PdmBiSlittingproductionplan implements Serializable { @TableId(value = "workorder_id", type = IdType.NONE) /** 分切计划标识 */ - private String workorder_id; + private Long workorder_id; /** 分切订单类型 */ private String order_type; @@ -171,4 +171,11 @@ public class PdmBiSlittingproductionplan implements Serializable { /** 分切重量 */ private String paper_weight; + + /** 木箱物料编码 */ + private String box_code; + /** 木箱描述 */ + private String box_description; + /** 批次号 */ + private String pscn; } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/bi/slittingproductionplan/service/impl/PdmBiSlittingproductionplanServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/bi/slittingproductionplan/service/impl/PdmBiSlittingproductionplanServiceImpl.java index 218a276..28eee1f 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/bi/slittingproductionplan/service/impl/PdmBiSlittingproductionplanServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/bi/slittingproductionplan/service/impl/PdmBiSlittingproductionplanServiceImpl.java @@ -55,7 +55,7 @@ public class PdmBiSlittingproductionplanServiceImpl extends ServiceImpl { +public class StIvtCoolregionio extends Model{ private static final long serialVersionUID = -7739291296662381393L; //@TableId(value = "id", type = IdType.NONE) diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/impl/SlitterServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/impl/SlitterServiceImpl.java index 308bdae..bd813fb 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/impl/SlitterServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/impl/SlitterServiceImpl.java @@ -2071,7 +2071,7 @@ public class SlitterServiceImpl implements SlitterService { PdmBiSlittingproductionplan plan = slittingproductionplanService.getByContainerNameNotStatus(containerName); if (ObjectUtil.isEmpty(plan)) { plan = new PdmBiSlittingproductionplan(); - plan.setWorkorder_id(IdUtil.getSnowflake(1, 1).nextIdStr()); + plan.setWorkorder_id(IdUtil.getSnowflake(1, 1).nextId()); } // 公共部分插入 plan.setOrder_type("1"); @@ -2498,7 +2498,7 @@ public class SlitterServiceImpl implements SlitterService { for (int i = 0; i < num; i++) { String containerName = area + code + "-" + i; PdmBiSlittingproductionplan plan = new PdmBiSlittingproductionplan(); - plan.setWorkorder_id(IdUtil.getSnowflake(1, 1).nextIdStr()); + plan.setWorkorder_id(IdUtil.getSnowflake(1, 1).nextId()); // 公共部分插入 plan.setOrder_type("1"); plan.setContainer_name(containerName); diff --git a/lms/nladmin-system/src/main/java/org/nl/common/base/PageInfo.java b/lms/nladmin-system/src/main/java/org/nl/common/base/PageInfo.java new file mode 100644 index 0000000..d9d2b9a --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/common/base/PageInfo.java @@ -0,0 +1,27 @@ +package org.nl.common.base; + +import lombok.Builder; +import lombok.Data; +import lombok.experimental.Accessors; +import org.apache.poi.ss.formula.functions.T; + +import java.io.Serializable; +import java.util.List; + +@Data +@Builder +@Accessors(chain = true) +public class PageInfo implements Serializable { + private long totalElements; + + + private List content; + + public PageInfo(long totalElements, List content) { + this.totalElements = totalElements; + this.content = content; + } + + public PageInfo() { + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/modules/common/utils/PageUtil.java b/lms/nladmin-system/src/main/java/org/nl/modules/common/utils/PageUtil.java index cca05d4..d45fae2 100644 --- a/lms/nladmin-system/src/main/java/org/nl/modules/common/utils/PageUtil.java +++ b/lms/nladmin-system/src/main/java/org/nl/modules/common/utils/PageUtil.java @@ -15,7 +15,11 @@ */ package org.nl.modules.common.utils; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.metadata.OrderItem; import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; import java.util.ArrayList; import java.util.LinkedHashMap; @@ -66,5 +70,22 @@ public class PageUtil extends cn.hutool.core.util.PageUtil { return map; } + public static IPage toMybatisPage(Pageable pageable) { + return toMybatisPage(pageable, false); + } + + public static IPage toMybatisPage(Pageable pageable, boolean ignoreOrderBy) { + com.baomidou.mybatisplus.extension.plugins.pagination.Page page = new com.baomidou.mybatisplus.extension.plugins.pagination.Page<>(pageable.getPageNumber() + 1, pageable.getPageSize()); + if (!ignoreOrderBy) { + for (Sort.Order order : pageable.getSort()) { + OrderItem orderItem = new OrderItem(); + orderItem.setAsc(order.isAscending()); + orderItem.setColumn(com.baomidou.mybatisplus.core.toolkit.StringUtils.camelToUnderline(order.getProperty())); + page.addOrder(orderItem); + } + } + return page; + } + } diff --git a/lms/nladmin-system/src/main/java/org/nl/modules/security/rest/DesUtil.java b/lms/nladmin-system/src/main/java/org/nl/modules/security/rest/DesUtil.java index 89f9a32..1d2c55a 100644 --- a/lms/nladmin-system/src/main/java/org/nl/modules/security/rest/DesUtil.java +++ b/lms/nladmin-system/src/main/java/org/nl/modules/security/rest/DesUtil.java @@ -1,129 +1,129 @@ -package org.nl.modules.security.rest; - +//package org.nl.modules.security.rest; // -// Source code recreated from a .class file by IntelliJ IDEA -// (powered by FernFlower decompiler) +//// +//// Source code recreated from a .class file by IntelliJ IDEA +//// (powered by FernFlower decompiler) +//// // - - -import sun.misc.BASE64Decoder; -import sun.misc.BASE64Encoder; - -import javax.crypto.Cipher; -import javax.crypto.SecretKey; -import javax.crypto.SecretKeyFactory; -import javax.crypto.spec.DESKeySpec; -import javax.crypto.spec.IvParameterSpec; -import java.io.IOException; -import java.security.SecureRandom; - -/** - * Des加密解密算法工具类 - */ -public class DesUtil { - //加密算法是des - private static final String ALGORITHM = "DES"; - //转换格式 - private static final String TRANSFORMATION = "DES/CBC/PKCS5Padding"; - - /** - * 加密 - * - * @param src 数据源 - * @param key 密钥,长度必须是8的倍数 - * @return 返回加密后的数据 - * @throws Exception 出错 - */ - public static byte[] encrypt(byte[] src, byte[] key) throws Exception { - // DES算法要求有一个可信任的随机数源 - SecureRandom sr = new SecureRandom(); - // 从原始密匙数据建立 DESKeySpec对象 - DESKeySpec dks = new DESKeySpec(key); - // 建立一个密匙工厂,然后用它把DESKeySpec转换成 - // 一个SecretKey对象 - SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM); - SecretKey securekey = keyFactory.generateSecret(dks); - // Cipher对象实际完成加密操作 - Cipher cipher = Cipher.getInstance(TRANSFORMATION); - // 用密匙原始化Cipher对象 - cipher.init(Cipher.ENCRYPT_MODE, securekey, new IvParameterSpec(key)); - // 现在,获取数据并加密 - // 正式执行加密操作 - return cipher.doFinal(src); - } - - /** - * 解密 - * - * @param src 数据源 - * @param key 密钥,长度必须是8的倍数 - * @return 返回解密后的原始数据 - * @throws Exception 出错 - */ - public static byte[] decrypt(byte[] src, byte[] key) throws Exception { - // DES算法要求有一个可信任的随机数源 - SecureRandom sr = new SecureRandom(); - // 从原始密匙数据建立一个DESKeySpec对象 - DESKeySpec dks = new DESKeySpec(key); - // 建立一个密匙工厂,然后用它把DESKeySpec对象转换成 - // 一个SecretKey对象 - SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM); - SecretKey securekey = keyFactory.generateSecret(dks); - // Cipher对象实际完成解密操作 - Cipher cipher = Cipher.getInstance(TRANSFORMATION); - // 用密匙原始化Cipher对象 - cipher.init(Cipher.DECRYPT_MODE, securekey, new IvParameterSpec(key)); - // 现在,获取数据并解密 - // 正式执行解密操作 - return cipher.doFinal(src); - } - - /** - * Description 根据键值进行加密 - * - * @param data - * @param key 加密键byte数组 - * @return - * @throws Exception - */ - public static String encrypt(String data, String key) throws Exception { - byte[] bt = encrypt(data.getBytes("UTF-8"), key.getBytes("UTF-8")); - - BASE64Encoder encoder = new BASE64Encoder(); - return encoder.encode(bt); - - //return new String(Base64.encodeBase64(bt), "UTF-8"); - } - - /** - * Description 根据键值进行解密 - * - * @param data - * @param key 加密键byte数组 - * @return - * @throws IOException - * @throws Exception - */ - public static String decrypt(String data, String key) throws Exception { - if (data == null) - return null; - BASE64Decoder decoder = new BASE64Decoder(); - byte[] buf = decoder.decodeBuffer(data); - - byte[] bt = decrypt(buf, key.getBytes("UTF-8")); - return new String(bt, "UTF-8"); - } - - - public static void main(String[] args) throws Exception { - //uL8fXioyU2M= - String key = "11111111"; - String pp = encrypt("123456", key); - System.out.println("加密:" + pp); - - String mm2 = decrypt(pp, key); - System.out.println("解密:" + mm2); - - } - -} +// +//import sun.misc.BASE64Decoder; +//import sun.misc.BASE64Encoder; +// +//import javax.crypto.Cipher; +//import javax.crypto.SecretKey; +//import javax.crypto.SecretKeyFactory; +//import javax.crypto.spec.DESKeySpec; +//import javax.crypto.spec.IvParameterSpec; +//import java.io.IOException; +//import java.security.SecureRandom; +// +///** +// * Des加密解密算法工具类 +// */ +//public class DesUtil { +// //加密算法是des +// private static final String ALGORITHM = "DES"; +// //转换格式 +// private static final String TRANSFORMATION = "DES/CBC/PKCS5Padding"; +// +// /** +// * 加密 +// * +// * @param src 数据源 +// * @param key 密钥,长度必须是8的倍数 +// * @return 返回加密后的数据 +// * @throws Exception 出错 +// */ +// public static byte[] encrypt(byte[] src, byte[] key) throws Exception { +// // DES算法要求有一个可信任的随机数源 +// SecureRandom sr = new SecureRandom(); +// // 从原始密匙数据建立 DESKeySpec对象 +// DESKeySpec dks = new DESKeySpec(key); +// // 建立一个密匙工厂,然后用它把DESKeySpec转换成 +// // 一个SecretKey对象 +// SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM); +// SecretKey securekey = keyFactory.generateSecret(dks); +// // Cipher对象实际完成加密操作 +// Cipher cipher = Cipher.getInstance(TRANSFORMATION); +// // 用密匙原始化Cipher对象 +// cipher.init(Cipher.ENCRYPT_MODE, securekey, new IvParameterSpec(key)); +// // 现在,获取数据并加密 +// // 正式执行加密操作 +// return cipher.doFinal(src); +// } +// +// /** +// * 解密 +// * +// * @param src 数据源 +// * @param key 密钥,长度必须是8的倍数 +// * @return 返回解密后的原始数据 +// * @throws Exception 出错 +// */ +// public static byte[] decrypt(byte[] src, byte[] key) throws Exception { +// // DES算法要求有一个可信任的随机数源 +// SecureRandom sr = new SecureRandom(); +// // 从原始密匙数据建立一个DESKeySpec对象 +// DESKeySpec dks = new DESKeySpec(key); +// // 建立一个密匙工厂,然后用它把DESKeySpec对象转换成 +// // 一个SecretKey对象 +// SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM); +// SecretKey securekey = keyFactory.generateSecret(dks); +// // Cipher对象实际完成解密操作 +// Cipher cipher = Cipher.getInstance(TRANSFORMATION); +// // 用密匙原始化Cipher对象 +// cipher.init(Cipher.DECRYPT_MODE, securekey, new IvParameterSpec(key)); +// // 现在,获取数据并解密 +// // 正式执行解密操作 +// return cipher.doFinal(src); +// } +// +// /** +// * Description 根据键值进行加密 +// * +// * @param data +// * @param key 加密键byte数组 +// * @return +// * @throws Exception +// */ +// public static String encrypt(String data, String key) throws Exception { +// byte[] bt = encrypt(data.getBytes("UTF-8"), key.getBytes("UTF-8")); +// +// BASE64Encoder encoder = new BASE64Encoder(); +// return encoder.encode(bt); +// +// //return new String(Base64.encodeBase64(bt), "UTF-8"); +// } +// +// /** +// * Description 根据键值进行解密 +// * +// * @param data +// * @param key 加密键byte数组 +// * @return +// * @throws IOException +// * @throws Exception +// */ +// public static String decrypt(String data, String key) throws Exception { +// if (data == null) +// return null; +// BASE64Decoder decoder = new BASE64Decoder(); +// byte[] buf = decoder.decodeBuffer(data); +// +// byte[] bt = decrypt(buf, key.getBytes("UTF-8")); +// return new String(bt, "UTF-8"); +// } +// +// +// public static void main(String[] args) throws Exception { +// //uL8fXioyU2M= +// String key = "11111111"; +// String pp = encrypt("123456", key); +// System.out.println("加密:" + pp); +// +// String mm2 = decrypt(pp, key); +// System.out.println("解密:" + mm2); +// +// } +// +//} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/rest/BakingController.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/rest/BakingController.java index f244b8e..891fafc 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/rest/BakingController.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/rest/BakingController.java @@ -42,12 +42,18 @@ public class BakingController { return new ResponseEntity<>(bakingService.inCoolIvt(whereJson), HttpStatus.OK); } - @PostMapping("/release") + @PostMapping("/reBake") @Log("解警") - public ResponseEntity release(@RequestBody JSONObject whereJson) { - return new ResponseEntity<>(bakingService.release(whereJson), HttpStatus.OK); + public ResponseEntity reBake(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(bakingService.reBake(whereJson), HttpStatus.OK); } + @PostMapping("/inCoolOrOven") + @Log("质检不合格") + + public ResponseEntity inCoolOrOven(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(bakingService.inCoolOrOven(whereJson), HttpStatus.OK); + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/rest/FeedingController.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/rest/FeedingController.java index afd6e6d..7ba17c4 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/rest/FeedingController.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/rest/FeedingController.java @@ -32,13 +32,6 @@ public class FeedingController { return new ResponseEntity<>(feedingService.queryMaterialInfo(whereJson, ctx), HttpStatus.OK); } - @PostMapping("/confirm") - @Log("呼叫母卷") - - public ResponseEntity confirm(@RequestBody JSONObject whereJson) { - return new ResponseEntity<>(feedingService.confirm(whereJson), HttpStatus.OK); - } - @PostMapping("/queryPoint") @Log("扫码起点获取母卷") diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/rest/RawFoilController.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/rest/RawFoilController.java index 2467484..d982516 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/rest/RawFoilController.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/rest/RawFoilController.java @@ -100,4 +100,28 @@ public class RawFoilController { rawFoilService.finish(whereJson); return new ResponseEntity<>(HttpStatus.OK); } + + @PostMapping("/start") + @Log("开始生箔工单") + + public ResponseEntity start(@RequestBody JSONObject whereJson) { + rawFoilService.start(whereJson); + return new ResponseEntity<>(HttpStatus.OK); + } + @PostMapping("/scrollDowm") + @Log("下卷") + + public ResponseEntity scrollDowm(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(rawFoilService.scrollDowm(whereJson), HttpStatus.OK); + } + + @PostMapping("/query") + @Log("查询冷却区生箔情况") + + public ResponseEntity query(@RequestBody JSONObject whereJson) { + HttpContext ctx = new HttpContext("11"); + ctx.setPage((String) (whereJson.get("page"))); + ctx.setRows((String) (whereJson.get("size"))); + return new ResponseEntity<>(rawFoilService.query(whereJson, ctx), HttpStatus.OK); + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/BakingService.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/BakingService.java index 178c71d..3e52dbb 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/BakingService.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/BakingService.java @@ -20,8 +20,16 @@ public interface BakingService { */ JSONObject inCoolIvt(JSONObject whereJson); - JSONObject release(JSONObject whereJson); + JSONObject reBake(JSONObject whereJson); JSONObject query(JSONObject whereJson); + + /** + * 母卷质检 + * + * @param whereJson / + * @return JSONObject + */ + JSONObject inCoolOrOven(JSONObject whereJson); } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/FeedingService.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/FeedingService.java index ea279ae..e1af5cb 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/FeedingService.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/FeedingService.java @@ -13,13 +13,6 @@ public interface FeedingService { */ JSONObject queryMaterialInfo(JSONObject whereJson, HttpContext ctx); - /** - * 套轴确认 - * - * @param whereJson / - * @return JSONObject - */ - JSONObject confirm(JSONObject whereJson); /** * 套轴确认 diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/RawFoilService.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/RawFoilService.java index d607610..d2476e0 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/RawFoilService.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/RawFoilService.java @@ -1,7 +1,9 @@ package org.nl.wms.pda.mps.service; import com.alibaba.fastjson.JSONObject; +import com.github.pagehelper.PageInfo; import org.nl.modules.wql.core.content.HttpContext; +import org.nl.wms.pdm.rawfoilworkorder.service.dao.RawfoilWorkOrder; public interface RawFoilService { @@ -62,7 +64,7 @@ public interface RawFoilService { JSONObject needEmptyVehicle(JSONObject whereJson); /** - * 下卷确认 + * 准备就绪 * * @param whereJson / * @return JSONObject @@ -84,4 +86,22 @@ public interface RawFoilService { * @return JSONObject */ JSONObject finish(JSONObject whereJson); + + /** + * 下卷 + * + * @param whereJson / + * @return JSONObject + */ + JSONObject scrollDowm(JSONObject whereJson); + + /** + * 开始工单 + * + * @param whereJson / + * @return JSONObject + */ + JSONObject start(JSONObject whereJson); + + JSONObject query(JSONObject whereJson, HttpContext ctx); } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/BakingServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/BakingServiceImpl.java index 7ee4774..6428d7c 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/BakingServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/BakingServiceImpl.java @@ -29,6 +29,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.HashMap; + @Service @RequiredArgsConstructor @Slf4j @@ -79,8 +81,8 @@ public class BakingServiceImpl implements BakingService { String point_code1 = whereJson.getString("point_code"); // 点位 //查询该点位是否存在未完成的任务 JSONObject hasTask = WQLObject.getWQLObject("SCH_BASE_Task").query("point_code1 = '" + point_code1 + "' AND task_status < '07' AND is_delete = '0'").uniqueResult(0); - if (hasTask!=null) { - throw new BadRequestException("当前点位"+point_code1+"存在正在执行的任务"+hasTask.getString("task_code")); + if (hasTask != null) { + throw new BadRequestException("当前点位" + point_code1 + "存在正在执行的任务" + hasTask.getString("task_code")); } //校验该设备是否启用,且母卷MES是否请求烘烤 //查询该母卷号、设备号对应的生箔工单 @@ -116,15 +118,12 @@ public class BakingServiceImpl implements BakingService { } /* - * 根据点位判断是 冷却区入烘箱还是暂存区(对接位)入烘箱 + * 根据点位判断是 冷却区入烘箱还是烘箱对接位入烘箱 */ - JSONObject jsonPointZc = pointTab.query("point_code = '" + point_code1 + "'").uniqueResult(0); + JSONObject jsonPointZc = pointTab.query("point_code = '" + point_code1 + "' AND point_type = '4'").uniqueResult(0); - JSONObject cool_jo = coolIvtTab.query("point_code = '" + point_code1 + "' AND point_type = '3'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(jsonPointZc) || ObjectUtil.isNotEmpty(cool_jo)) { - if (ObjectUtil.isEmpty(jsonPointZc)) { - jsonPointZc = cool_jo; - } + JSONObject cool_jo = coolIvtTab.query("point_code = '" + point_code1 + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(jsonPointZc)) { if (!in_area_id.contains(jsonPointZc.getString("product_area"))) { throw new BadRequestException("当前登录人员暂无【" + jsonPointZc.getString("product_area") + "】操作权限"); } @@ -139,51 +138,23 @@ public class BakingServiceImpl implements BakingService { jsonMap.put("point_location", jsonPointZc.getString("point_location")); JSONArray hot_rows = WQL.getWO("PDA_BAKING_01").addParamMap(jsonMap).process().getResultJSONArray(0); JSONObject jsonHotIvt = new JSONObject(); - log.debug("获取温度幅度hot_rows:"+hot_rows); + log.debug("获取温度幅度hot_rows:" + hot_rows); for (int i = 0; i < hot_rows.size(); i++) { JSONObject hot_row = hot_rows.getJSONObject(i); String point_code = hot_row.getString("point_code"); boolean exists = redisUtils.hHasKey(point_code, "temperature"); String point_temperature = ""; - if(exists){ + if (exists) { point_temperature = (String) redisUtils.hget(point_code, "temperature"); } if (ObjectUtil.isNotEmpty(point_temperature)) { if (point_temperature.equals(temperature)) { jsonHotIvt = hot_row; - log.debug("获取满足温度幅度jsonHotIvt:"+jsonHotIvt); + log.debug("获取满足温度幅度jsonHotIvt:" + jsonHotIvt); break; } } } - - if (ObjectUtil.isEmpty(jsonHotIvt)) { - //如果属于B1的烘箱,变更位置再查询 - if (ObjectUtil.isNotEmpty(cool_jo) && cool_jo.getString("product_area").equals("B1")) { - jsonMap.put("point_location", jsonPointZc.getString("point_location").equals("0") ? "1" : "0"); - hot_rows = WQL.getWO("PDA_BAKING_01").addParamMap(jsonMap).process().getResultJSONArray(0); - for (int i = 0; i < hot_rows.size(); i++) { - JSONObject hot_row = hot_rows.getJSONObject(i); - String point_code = hot_row.getString("point_code"); - boolean exists = redisUtils.hHasKey(point_code, "temperature"); - String point_temperature = ""; - if(exists){ - point_temperature = (String) redisUtils.hget(point_code, "temperature"); - } - if (ObjectUtil.isNotEmpty(point_temperature)) { - if (point_temperature.equals(temperature)) { - jsonHotIvt = hot_row; - break; - } - } - } - if (ObjectUtil.isEmpty(jsonHotIvt)) { - throw new BadRequestException("烘烤区没有合适温度的空位!"); - } - } else { - throw new BadRequestException("烘烤区没有合适温度的空位!"); - } - } // 2.创建暂存位 --> 烘烤区任务 JSONObject param = new JSONObject(); param.put("type", "2"); // 1- 冷却区入烘箱 2- 暂存位入烘箱 @@ -217,7 +188,7 @@ public class BakingServiceImpl implements BakingService { hotParam.put("temperature", temperature); hotParam.put("oven_time", hours); this.createHotIoMst(hotParam); - } else { + } else if (ObjectUtil.isNotEmpty(cool_jo)) { /* * 冷却区入烘箱 */ @@ -225,13 +196,6 @@ public class BakingServiceImpl implements BakingService { // 1.根据冷却区此母卷的点位找到对应的暂存区、找到空位 // 根据标箔/锂电判断类型 String point_type = "1"; - if (raw_jo.getString("product_area").equals("B2")) { - String orderType = raw_jo.getString("order_type"); - // order_type 1-标箔;2-锂电 - if ("2".equals(orderType)) { - point_type = "4"; - } - } // 冷却点 JSONObject jsonCoolIvt = coolIvtTab.query("full_point_code = '" + point_code1 + "' and is_used = '1' AND point_type = '" + point_type + "'").uniqueResult(0); if (ObjectUtil.isEmpty(jsonCoolIvt)) { @@ -371,6 +335,8 @@ public class BakingServiceImpl implements BakingService { jsonCool.put("confirm_optname", currentUsername); jsonCool.put("confirm_time", DateUtil.now()); coolTab.insert(jsonCool); + } else { + throw new BadRequestException("请扫描正确的冷却区点位或对接点位!"); } } else if (StrUtil.equals(option, "2")) { // 出箱 @@ -393,167 +359,106 @@ public class BakingServiceImpl implements BakingService { } // 1.查询暂存位有没有空位 String product_area = jsonHotIvt.getString("product_area"); - - //判断区域是否属于B1,B1的出烘箱流程出到对应的半成品区 - if ("B1".equals(product_area)) { - JSONObject jsonRaw = rawTab.query("container_name = '" + jsonHotIvt.getString("container_name") + "' and is_delete = '0'").uniqueResult(0); - if (ObjectUtil.isEmpty(jsonRaw)) { - throw new BadRequestException("未查询到母卷号:" + jsonHotIvt.getString("container_name") + "对应的生箔工单!"); - } - JSONObject jsonMater = materTab.query("material_code = '" + jsonRaw.getString("product_name") + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(jsonMater)) { - throw new BadRequestException("物料基础信息中无此物料!"); - } - - //查询当前点位为空且没有任务的桁架内缓存点 - JSONObject cache_param = new JSONObject(); - cache_param.put("flag", "4"); - cache_param.put("point_location", jsonHotIvt.getString("point_location")); - cache_param.put("product_area", jsonHotIvt.getString("product_area")); - JSONObject cache_jo = WQL.getWO("PDA_COOLIN").addParamMap(cache_param).process().uniqueResult(0); - if (ObjectUtil.isEmpty(cache_jo)) { - throw new BadRequestException("桁架范围内没有可用的空点位,请检查库存!"); - } - - // 3.创建任务 - JSONObject param = new JSONObject(); - param.put("point_code1", point_code1); - param.put("point_code2", cache_jo.getString("point_code")); - param.put("material_code", jsonHotIvt.getString("container_name")); - param.put("product_area", jsonHotIvt.getString("product_area")); - OutHotTask outHotTask = new OutHotTask(); - String task_id = outHotTask.createTask(param); - - //查询该母卷对应最近的一条入烘箱记录 - JSONObject last_hot_mst = WQLObject.getWQLObject("ST_IVT_HotRegionIOMst").query("container_name = '" + jsonHotIvt.getString("container_name") + "' AND io_type = '0' order by confirm_time desc").uniqueResult(0); - - JSONObject hotParam = new JSONObject(); - hotParam.put("container_name", jsonRaw.getString("container_name")); - hotParam.put("workorder_id", jsonRaw.getString("workorder_id")); - hotParam.put("material_id", jsonMater.getString("material_id")); - hotParam.put("qty", jsonRaw.get("qty")); - hotParam.put("io_type", "1"); - hotParam.put("qty_unit_id", jsonMater.getString("base_unit_id")); - hotParam.put("task_id", task_id); - hotParam.put("start_point_code", point_code1); - hotParam.put("end_point_code", cache_jo.getString("point_code")); - boolean exists = redisUtils.hHasKey(point_code1, "temperature"); - String point_temperature = ""; - if(exists){ - point_temperature = (String) redisUtils.hget(point_code1, "temperature"); - }else{ - throw new BadRequestException("当前操作点位设备:"+point_code1+",无法获取温度,请稍后再试!"); - } - hotParam.put("temperature", point_temperature); - - if (ObjectUtil.isEmpty(last_hot_mst)) { - hotParam.put("oven_time", "480"); - } else { - hotParam.put("oven_time", last_hot_mst.getString("oven_time")); - } - this.createHotIoMst(hotParam); - } else { - // 出烘箱,创建桁架任务到对接位 - if (!in_area_id.contains(product_area)) { - throw new BadRequestException("当前登录人员暂无【" + product_area + "】操作权限"); - } - String reging_id = ""; - switch (product_area) { - case "A1": - reging_id = RegionTypeEnum.A_HKZC.getId(); - break; - case "A2": - reging_id = RegionTypeEnum.B_HKZC.getId(); - break; - case "A3": - reging_id = RegionTypeEnum.C_HKZC.getId(); - break; - case "A4": - reging_id = RegionTypeEnum.D_HKZC.getId(); - break; - case "B2": - reging_id = RegionTypeEnum.B2_HKZC.getId(); - break; - default: - break; - } - JSONObject map = new JSONObject(); - map.put("flag", "1"); - map.put("reging_id", reging_id); - map.put("point_location", jsonHotIvt.getString("point_location")); - //只找出箱点位 - map.put("point_type", "5"); - - JSONArray pointArr = WQL.getWO("PDA_OVENINANDOUT_01").addParamMap(map).process().getResultJSONArray(0); - if (ObjectUtil.isEmpty(pointArr)) { - throw new BadRequestException("没有无货且没有任务的点位类型为出箱的烘箱对接位!"); - } - - // 2.判断暂存位是否有任务:找到无任务的暂存位 - String point_code2 = ""; - for (int i = 0; i < pointArr.size(); i++) { - JSONObject jsonPoint = pointArr.getJSONObject(i); - String point_code = jsonPoint.getString("point_code"); - - JSONObject json_point_code1 = taskTab.query("point_code1 = '" + point_code + "' and task_status != '07' and is_delete = '0'").uniqueResult(0); - JSONObject json_point_code2 = taskTab.query("point_code2 = '" + point_code + "' and task_status != '07' and is_delete = '0'").uniqueResult(0); - JSONObject json_point_code3 = taskTab.query("point_code3 = '" + point_code + "' and task_status != '07' and is_delete = '0'").uniqueResult(0); - JSONObject json_point_code4 = taskTab.query("point_code4 = '" + point_code + "' and task_status != '07' and is_delete = '0'").uniqueResult(0); - if (ObjectUtil.isEmpty(json_point_code1) && ObjectUtil.isEmpty(json_point_code2) && ObjectUtil.isEmpty(json_point_code3) && ObjectUtil.isEmpty(json_point_code4)) { - point_code2 = point_code; - break; - } - } - if (ObjectUtil.isEmpty(point_code2)) { - throw new BadRequestException("没有无货且没有任务的点位类型为出箱的烘箱对接位!"); - } - - // 3.创建任务 - JSONObject param = new JSONObject(); - param.put("point_code1", point_code1); - param.put("point_code2", point_code2); - param.put("material_code", jsonHotIvt.getString("container_name")); - param.put("product_area", jsonHotIvt.getString("product_area")); - OutHotTask outHotTask = new OutHotTask(); - String task_id = outHotTask.createTask(param); - - JSONObject jsonRaw = rawTab.query("container_name = '" + jsonHotIvt.getString("container_name") + "' and is_delete = '0'").uniqueResult(0); - if (ObjectUtil.isEmpty(jsonRaw)) { - throw new BadRequestException("未查询到母卷号:" + jsonHotIvt.getString("container_name") + "对应的生箔工单!"); - } - JSONObject jsonMater = materTab.query("material_code = '" + jsonRaw.getString("product_name") + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(jsonMater)) { - throw new BadRequestException("物料基础信息中无此物料!"); - } - - //查询该母卷对应最近的一条入烘箱记录 - JSONObject last_hot_mst = WQLObject.getWQLObject("ST_IVT_HotRegionIOMst").query("container_name = '" + jsonHotIvt.getString("container_name") + "' AND io_type = '0' order by confirm_time desc").uniqueResult(0); - - JSONObject hotParam = new JSONObject(); - hotParam.put("container_name", jsonRaw.getString("container_name")); - hotParam.put("workorder_id", jsonRaw.getString("workorder_id")); - hotParam.put("material_id", jsonMater.getString("material_id")); - hotParam.put("qty", jsonRaw.get("qty")); - hotParam.put("io_type", "1"); - hotParam.put("qty_unit_id", jsonMater.getString("base_unit_id")); - hotParam.put("task_id", task_id); - hotParam.put("start_point_code", point_code1); - hotParam.put("end_point_code", point_code2); - boolean exists = redisUtils.hHasKey(point_code1, "temperature"); - String point_temperature = ""; - if(exists){ - point_temperature = (String) redisUtils.hget(point_code1, "temperature"); - }else{ - throw new BadRequestException("当前操作点位设备:"+point_code1+",无法获取温度,请稍后再试!"); - } - hotParam.put("temperature", point_temperature); - if (ObjectUtil.isEmpty(last_hot_mst)) { - hotParam.put("oven_time", "480"); - } else { - hotParam.put("oven_time", last_hot_mst.getString("oven_time")); - } - this.createHotIoMst(hotParam); + // 出烘箱,创建桁架任务到对接位 + if (!in_area_id.contains(product_area)) { + throw new BadRequestException("当前登录人员暂无【" + product_area + "】操作权限"); } + String reging_id = ""; + switch (product_area) { + case "A1": + reging_id = RegionTypeEnum.A_HKZC.getId(); + break; + case "A2": + reging_id = RegionTypeEnum.B_HKZC.getId(); + break; + case "A3": + reging_id = RegionTypeEnum.C_HKZC.getId(); + break; + case "A4": + reging_id = RegionTypeEnum.D_HKZC.getId(); + break; + case "B2": + reging_id = RegionTypeEnum.B2_HKZC.getId(); + break; + default: + break; + } + JSONObject map = new JSONObject(); + map.put("flag", "1"); + map.put("reging_id", reging_id); + map.put("point_location", jsonHotIvt.getString("point_location")); + //只找出箱点位 + map.put("point_type", "5"); + + JSONArray pointArr = WQL.getWO("PDA_OVENINANDOUT_01").addParamMap(map).process().getResultJSONArray(0); + if (ObjectUtil.isEmpty(pointArr)) { + throw new BadRequestException("没有无货且没有任务的点位类型为出箱的烘箱对接位!"); + } + + // 2.判断暂存位是否有任务:找到无任务的暂存位 + String point_code2 = ""; + for (int i = 0; i < pointArr.size(); i++) { + JSONObject jsonPoint = pointArr.getJSONObject(i); + String point_code = jsonPoint.getString("point_code"); + + JSONObject json_point_code1 = taskTab.query("point_code1 = '" + point_code + "' and task_status != '07' and is_delete = '0'").uniqueResult(0); + JSONObject json_point_code2 = taskTab.query("point_code2 = '" + point_code + "' and task_status != '07' and is_delete = '0'").uniqueResult(0); + JSONObject json_point_code3 = taskTab.query("point_code3 = '" + point_code + "' and task_status != '07' and is_delete = '0'").uniqueResult(0); + JSONObject json_point_code4 = taskTab.query("point_code4 = '" + point_code + "' and task_status != '07' and is_delete = '0'").uniqueResult(0); + if (ObjectUtil.isEmpty(json_point_code1) && ObjectUtil.isEmpty(json_point_code2) && ObjectUtil.isEmpty(json_point_code3) && ObjectUtil.isEmpty(json_point_code4)) { + point_code2 = point_code; + break; + } + } + if (ObjectUtil.isEmpty(point_code2)) { + throw new BadRequestException("没有无货且没有任务的点位类型为出箱的烘箱对接位!"); + } + + // 3.创建任务 + JSONObject param = new JSONObject(); + param.put("point_code1", point_code1); + param.put("point_code2", point_code2); + param.put("material_code", jsonHotIvt.getString("container_name")); + param.put("product_area", jsonHotIvt.getString("product_area")); + OutHotTask outHotTask = new OutHotTask(); + String task_id = outHotTask.createTask(param); + + JSONObject jsonRaw = rawTab.query("container_name = '" + jsonHotIvt.getString("container_name") + "' and is_delete = '0'").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonRaw)) { + throw new BadRequestException("未查询到母卷号:" + jsonHotIvt.getString("container_name") + "对应的生箔工单!"); + } + JSONObject jsonMater = materTab.query("material_code = '" + jsonRaw.getString("product_name") + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonMater)) { + throw new BadRequestException("物料基础信息中无此物料!"); + } + + //查询该母卷对应最近的一条入烘箱记录 + JSONObject last_hot_mst = WQLObject.getWQLObject("ST_IVT_HotRegionIOMst").query("container_name = '" + jsonHotIvt.getString("container_name") + "' AND io_type = '0' order by confirm_time desc").uniqueResult(0); + + JSONObject hotParam = new JSONObject(); + hotParam.put("container_name", jsonRaw.getString("container_name")); + hotParam.put("workorder_id", jsonRaw.getString("workorder_id")); + hotParam.put("material_id", jsonMater.getString("material_id")); + hotParam.put("qty", jsonRaw.get("qty")); + hotParam.put("io_type", "1"); + hotParam.put("qty_unit_id", jsonMater.getString("base_unit_id")); + hotParam.put("task_id", task_id); + hotParam.put("start_point_code", point_code1); + hotParam.put("end_point_code", point_code2); + boolean exists = redisUtils.hHasKey(point_code1, "temperature"); + String point_temperature = ""; + if (exists) { + point_temperature = (String) redisUtils.hget(point_code1, "temperature"); + } else { + throw new BadRequestException("当前操作点位设备:" + point_code1 + ",无法获取温度,请稍后再试!"); + } + hotParam.put("temperature", point_temperature); + if (ObjectUtil.isEmpty(last_hot_mst)) { + hotParam.put("oven_time", "480"); + } else { + hotParam.put("oven_time", last_hot_mst.getString("oven_time")); + } + this.createHotIoMst(hotParam); } JSONObject result = new JSONObject(); result.put("message", "操作成功!"); @@ -575,7 +480,7 @@ public class BakingServiceImpl implements BakingService { String point_code = hot_row.getString("point_code"); boolean exists = redisUtils.hHasKey(point_code, "temperature"); String point_temperature = ""; - if(exists){ + if (exists) { point_temperature = (String) redisUtils.hget(point_code, "temperature"); } if (ObjectUtil.isNotEmpty(point_temperature)) { @@ -629,106 +534,83 @@ public class BakingServiceImpl implements BakingService { throw new BadRequestException("该母卷在MES上未进行决策入半成品库,不允许进行入冷却操作!"); } - if (sb_jo.getString("product_area").equals("B1")) { - HandleBakingService bakingService = SpringContextHolder.getBean(HandleBakingService.class); - bakingService.checkConfirm(whereJson); - } else { - // 1.获取此暂存位的生产区域和上下位置 - JSONObject jsonPoint = pointTab.query("point_code = '" + point_code1 + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(jsonPoint)) { - throw new BadRequestException("请扫描点位类型为出箱的烘箱对接位!"); - } - - if (!in_area_id.contains(jsonPoint.getString("product_area"))) { - throw new BadRequestException("当前登录人员暂无【" + jsonPoint.getString("product_area") + "】操作权限"); - } - // 2.找冷却区空货位 - JSONObject map = new JSONObject(); - map.put("flag", "2"); - map.put("product_area", jsonPoint.getString("product_area")); - if (!jsonPoint.getString("product_area").equals("B2")) { - map.put("point_location", jsonPoint.getString("point_location")); - } - map.put("point_type", "1"); - // B2出来要根据锂电或者标箔去不同地方(状态5) - String orderType = raw_jo.getString("order_type"); - JSONObject lithiumPoint = null; - String endPointCode = null; - if (jsonPoint.getString("product_area").equals("B2")) { - // order_type 1-标箔;2-锂电 - if ("2".equals(orderType)) { - map.put("point_type", "5"); - // 如果是B2锂电就优先去表处中转区 - lithiumPoint = WQL.getWO("PDA_OVENINANDOUT_01").addParam("flag", "5").process().uniqueResult(0); - if (ObjectUtil.isNotEmpty(lithiumPoint)) { - endPointCode = lithiumPoint.getString("point_code"); - } - } - } - if (ObjectUtil.isEmpty(lithiumPoint)) { - JSONObject jsonCooIvt = WQL.getWO("PDA_OVENINANDOUT_01").addParamMap(map).process().uniqueResult(0); - // 如果为空 - if (ObjectUtil.isEmpty(jsonCooIvt) && !jsonPoint.getString("product_area").equals("B2")) { - if (StrUtil.equals(jsonPoint.getString("point_location"), "0")) { - map.put("point_location", "1"); - } - if (StrUtil.equals(jsonPoint.getString("point_location"), "1")) { - map.put("point_location", "0"); - } - jsonCooIvt = WQL.getWO("PDA_OVENINANDOUT_01").addParamMap(map).process().uniqueResult(0); - } - if (ObjectUtil.isEmpty(jsonCooIvt)) { - throw new BadRequestException("冷却区空位不足"); - } - endPointCode = jsonCooIvt.getString("full_point_code"); - } - - // 3.创建任务 - JSONObject param = new JSONObject(); - param.put("point_code1", point_code1); - param.put("point_code2", endPointCode); - param.put("container_name", container_name); - param.put("product_area", jsonPoint.getString("product_area")); - - - InCoolIvtTask inCoolIvtTask = new InCoolIvtTask(); - String task_id = inCoolIvtTask.createTask(param); - - // 生成冷却区出入表 - String currentUserId = SecurityUtils.getCurrentUserId(); - String currentUsername = SecurityUtils.getCurrentUsername(); - - JSONObject jsonRaw = rawTab.query("container_name = '" + container_name + "' and is_delete = '0'").uniqueResult(0); - JSONObject jsonMater = materTab.query("material_code = '" + jsonRaw.getString("product_name") + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(jsonMater)) { - throw new BadRequestException("物料基础信息中无此物料!"); - } - - JSONObject jsonCool = new JSONObject(); - jsonCool.put("iostorinv_id", IdUtil.getSnowflake(1, 1).nextId()); - jsonCool.put("bill_code", CodeUtil.getNewCode("COOLREGION_BILL_CODE")); - jsonCool.put("io_type", "0"); - jsonCool.put("material_id", jsonMater.getString("material_id")); - jsonCool.put("pcsn", container_name); - jsonCool.put("bill_status", "10"); - jsonCool.put("qty", jsonRaw.get("productin_qty")); - jsonCool.put("qty_unit_id", jsonMater.get("base_unit_id")); - jsonCool.put("task_id", task_id); - jsonCool.put("start_point_code", point_code1); - jsonCool.put("end_point_code", endPointCode); - jsonCool.put("create_mode", "03"); - jsonCool.put("create_id", currentUserId); - jsonCool.put("create_name", currentUsername); - jsonCool.put("create_time", DateUtil.now()); - jsonCool.put("update_optid", currentUserId); - jsonCool.put("update_optname", currentUsername); - jsonCool.put("update_time", DateUtil.now()); - jsonCool.put("confirm_optid", currentUserId); - jsonCool.put("confirm_optname", currentUsername); - jsonCool.put("confirm_time", DateUtil.now()); - coolTab.insert(jsonCool); + // 1.获取此暂存位的生产区域和上下位置 + JSONObject jsonPoint = pointTab.query("point_code = '" + point_code1 + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonPoint)) { + throw new BadRequestException("请扫描点位类型为出箱的烘箱对接位!"); } + if (!in_area_id.contains(jsonPoint.getString("product_area"))) { + throw new BadRequestException("当前登录人员暂无【" + jsonPoint.getString("product_area") + "】操作权限"); + } + // 2.找冷却区空货位 + JSONObject map = new JSONObject(); + map.put("flag", "2"); + map.put("product_area", jsonPoint.getString("product_area")); + map.put("point_location", jsonPoint.getString("point_location")); + map.put("point_type", "1"); + String endPointCode = null; + JSONObject jsonCooIvt = WQL.getWO("PDA_OVENINANDOUT_01").addParamMap(map).process().uniqueResult(0); + // 如果为空 + if (ObjectUtil.isEmpty(jsonCooIvt)) { + if (StrUtil.equals(jsonPoint.getString("point_location"), "0")) { + map.put("point_location", "1"); + } + if (StrUtil.equals(jsonPoint.getString("point_location"), "1")) { + map.put("point_location", "0"); + } + jsonCooIvt = WQL.getWO("PDA_OVENINANDOUT_01").addParamMap(map).process().uniqueResult(0); + } + if (ObjectUtil.isEmpty(jsonCooIvt)) { + throw new BadRequestException("冷却区空位不足"); + } + endPointCode = jsonCooIvt.getString("full_point_code"); + + // 3.创建任务 + JSONObject param = new JSONObject(); + param.put("point_code1", point_code1); + param.put("point_code2", endPointCode); + param.put("container_name", container_name); + param.put("product_area", jsonPoint.getString("product_area")); + + + InCoolIvtTask inCoolIvtTask = new InCoolIvtTask(); + String task_id = inCoolIvtTask.createTask(param); + + // 生成冷却区出入表 + String currentUserId = SecurityUtils.getCurrentUserId(); + String currentUsername = SecurityUtils.getCurrentUsername(); + + JSONObject jsonRaw = rawTab.query("container_name = '" + container_name + "' and is_delete = '0'").uniqueResult(0); + JSONObject jsonMater = materTab.query("material_code = '" + jsonRaw.getString("product_name") + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonMater)) { + throw new BadRequestException("物料基础信息中无此物料!"); + } + + JSONObject jsonCool = new JSONObject(); + jsonCool.put("iostorinv_id", IdUtil.getSnowflake(1, 1).nextId()); + jsonCool.put("bill_code", CodeUtil.getNewCode("COOLREGION_BILL_CODE")); + jsonCool.put("io_type", "0"); + jsonCool.put("material_id", jsonMater.getString("material_id")); + jsonCool.put("pcsn", container_name); + jsonCool.put("bill_status", "10"); + jsonCool.put("qty", jsonRaw.get("productin_qty")); + jsonCool.put("qty_unit_id", jsonMater.get("base_unit_id")); + jsonCool.put("task_id", task_id); + jsonCool.put("start_point_code", point_code1); + jsonCool.put("end_point_code", endPointCode); + jsonCool.put("create_mode", "03"); + jsonCool.put("create_id", currentUserId); + jsonCool.put("create_name", currentUsername); + jsonCool.put("create_time", DateUtil.now()); + jsonCool.put("update_optid", currentUserId); + jsonCool.put("update_optname", currentUsername); + jsonCool.put("update_time", DateUtil.now()); + jsonCool.put("confirm_optid", currentUserId); + jsonCool.put("confirm_optname", currentUsername); + jsonCool.put("confirm_time", DateUtil.now()); + coolTab.insert(jsonCool); + JSONObject result = new JSONObject(); result.put("message", "操作成功!"); return result; @@ -774,21 +656,31 @@ public class BakingServiceImpl implements BakingService { @Override @Transactional(rollbackFor = Exception.class) - public JSONObject release(JSONObject whereJson) { - JSONArray rows = new JSONArray(); - JSONObject jo = new JSONObject(); - JSONObject point_jo = WQLObject.getWQLObject("sch_base_point").query("point_code = '" + whereJson.getString("point_code") + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(point_jo)) { - throw new BadRequestException("未查询到对应的报警灯点位!"); + public JSONObject reBake(JSONObject whereJson) { + String container_name = whereJson.getString("container_name"); // 母卷号 + if (ObjectUtil.isEmpty(container_name)){ + throw new BadRequestException("请输入母卷号!"); + } + String type = whereJson.getString("type");//1-决策入烘箱 2-决策入冷却 + if (ObjectUtil.isEmpty(type)){ + throw new BadRequestException("请选择类型!"); + } + if (type.equals("1")) { + //更新生箔工单的是否下发烘烤为是 + HashMap map = new HashMap<>(); + map.put("is_baking", "1"); + WQLObject.getWQLObject("PDM_BI_RawFoilWorkOrder").update(map, "container_name = '" + container_name + "'"); + log.info("母卷:" + container_name + "被决策入烘箱,请求烘烤标识改为1"); + } + if (type.equals("2")) { + //更新生箔工单的是否下发入半成品库为是 + HashMap map = new HashMap<>(); + map.put("is_instor", "1"); + WQLObject.getWQLObject("PDM_BI_RawFoilWorkOrder").update(map, "container_name = '" + container_name + "'"); + log.info("母卷:" + container_name + "被决策入半成品库,请求入半成品库标识改为1"); } - jo.put("device_code", whereJson.getString("point_code")); - jo.put("code", "to_command"); - jo.put("product_area", point_jo.getString("product_area")); - jo.put("value", "0"); - rows.add(jo); - new WmsToAcsServiceImpl().action(rows); JSONObject result = new JSONObject(); - result.put("message", "烘箱三色灯报警已关闭,请联系烘箱设备维护人员处理烘箱报警问题!!"); + result.put("message", "操作成功!"); return result; } @@ -852,4 +744,249 @@ public class BakingServiceImpl implements BakingService { result.put("message", "操作成功!"); return result; } + + @Override + public JSONObject inCoolOrOven(JSONObject whereJson) { + String option = whereJson.getString("type"); // 1-入冷却 2-入烘箱 + + WQLObject pointTab = WQLObject.getWQLObject("SCH_BASE_Point"); // 点位表 + WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); // 任务表 + WQLObject coolIvtTab = WQLObject.getWQLObject("ST_IVT_CoolPointIvt"); // 冷却区点位库存表 + WQLObject hosIvtTab = WQLObject.getWQLObject("ST_IVT_HotPointIvt"); // 烤箱区点位库存表 + WQLObject hosReMstTab = WQLObject.getWQLObject("ST_IVT_HotRegionIOMst"); // 烤箱区出入主表 + WQLObject coolTab = WQLObject.getWQLObject("ST_IVT_CoolRegionIO"); // 冷却区出入表 + WQLObject rawTab = WQLObject.getWQLObject("PDM_BI_RawFoilWorkOrder"); // 生箔工单表 + WQLObject materTab = WQLObject.getWQLObject("md_me_materialbase"); // 物料表 + + //获取人员对应的区域 + UserAreaServiceImpl userAreaService = new UserAreaServiceImpl(); + String in_area_id = userAreaService.getInArea(); + + if (StrUtil.equals(option, "2")) { + // 入箱 + // 手持-烘烤-质检不合格 + String container_name = whereJson.getString("container_name"); // 母卷号 + String temperature = whereJson.getString("temperature"); // 温度 + String hours = whereJson.getString("hours"); // 时间 + String point_code1 = whereJson.getString("point_code"); // 点位 + //查询该点位是否存在未完成的任务 + JSONObject hasTask = WQLObject.getWQLObject("SCH_BASE_Task").query("point_code1 = '" + point_code1 + "' AND task_status < '07' AND is_delete = '0'").uniqueResult(0); + if (hasTask != null) { + throw new BadRequestException("当前点位" + point_code1 + "存在正在执行的任务" + hasTask.getString("task_code")); + } + //校验该设备是否启用,且母卷MES是否请求烘烤 + //查询该母卷号、设备号对应的生箔工单 + JSONObject raw_jo = WQLObject.getWQLObject("PDM_BI_RawFoilWorkOrder").query("container_name ='" + container_name + "'").uniqueResult(0); + + if (ObjectUtil.isEmpty(raw_jo)) { + throw new BadRequestException("未查询到对应的生箔工单!"); + } + if (raw_jo.getString("order_type").equals("1")) { + throw new BadRequestException("当前工单为标箔工单,不允许烘烤!"); + } + String resource_name = raw_jo.getString("resource_name"); + JSONObject sb_jo = WQLObject.getWQLObject("st_ivt_sbpointivt").query("ext_code ='" + resource_name + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(sb_jo)) { + throw new BadRequestException("未查询到母卷号:" + container_name + "对应的生箔机台编号!"); + } + + if (StrUtil.equals("1", sb_jo.getString("mes_used"))&& !"1".equals(raw_jo.getString("is_baking"))) { + throw new BadRequestException("该母卷在MES上未进行决策入烘箱,不允许进行入烘箱操作!"); + } + + if (ObjectUtil.isEmpty(container_name)) { + throw new BadRequestException("母卷号不能为空"); + } + if (ObjectUtil.isEmpty(temperature)) { + throw new BadRequestException("温度不能为空"); + } + if (ObjectUtil.isEmpty(hours)) { + throw new BadRequestException("时间不能为空"); + } + if (ObjectUtil.isEmpty(point_code1)) { + throw new BadRequestException("点位不能为空"); + } + + JSONObject jsonPointZc = pointTab.query("point_code = '" + point_code1 + "'").uniqueResult(0); + + + if (ObjectUtil.isNotEmpty(jsonPointZc)) { + if (!in_area_id.contains(jsonPointZc.getString("product_area"))) { + throw new BadRequestException("当前登录人员暂无【" + jsonPointZc.getString("product_area") + "】操作权限"); + } + /* + * 暂存区入烘箱 + */ + // 1.查询烘箱对应的空位 + JSONObject jsonMap = new JSONObject(); + jsonMap.put("flag", "1"); + jsonMap.put("product_area", jsonPointZc.getString("product_area")); + //获取温度幅度 + jsonMap.put("point_location", jsonPointZc.getString("point_location")); + JSONArray hot_rows = WQL.getWO("PDA_BAKING_01").addParamMap(jsonMap).process().getResultJSONArray(0); + JSONObject jsonHotIvt = new JSONObject(); + log.debug("获取温度幅度hot_rows:" + hot_rows); + for (int i = 0; i < hot_rows.size(); i++) { + JSONObject hot_row = hot_rows.getJSONObject(i); + String point_code = hot_row.getString("point_code"); + boolean exists = redisUtils.hHasKey(point_code, "temperature"); + String point_temperature = ""; + if (exists) { + point_temperature = (String) redisUtils.hget(point_code, "temperature"); + } + if (ObjectUtil.isNotEmpty(point_temperature)) { + if (point_temperature.equals(temperature)) { + jsonHotIvt = hot_row; + log.debug("获取满足温度幅度jsonHotIvt:" + jsonHotIvt); + break; + } + } + } + if (ObjectUtil.isEmpty(jsonHotIvt)) { + throw new BadRequestException("烘烤区没有合适温度的空位!"); + } + // 2.创建暂存位 --> 烘烤区任务 + JSONObject param = new JSONObject(); + param.put("type", "2"); // 1- 冷却区入烘箱 2- 暂存位入烘箱 + param.put("point_code1", point_code1); + param.put("point_code2", jsonHotIvt.getString("point_code")); + param.put("material_code", container_name); + param.put("product_area", jsonPointZc.getString("product_area")); + param.put("request_param", NumberUtil.mul(Double.parseDouble(hours), 60)); + + InHotTask inHotTask = new InHotTask(); + String task_id = inHotTask.createTask(param); + + // 3.插入主表 + JSONObject jsonRaw = rawTab.query("container_name = '" + container_name + "' and is_delete = '0'").uniqueResult(0); + JSONObject jsonMater = materTab.query("material_code = '" + jsonRaw.getString("product_name") + "'").uniqueResult(0); + + JSONObject hotParam = new JSONObject(); + hotParam.put("container_name", container_name); + hotParam.put("workorder_id", jsonRaw.getString("workorder_id")); + hotParam.put("material_id", jsonMater.getString("material_id")); + hotParam.put("qty", jsonRaw.get("productin_qty")); + hotParam.put("io_type", "0"); + hotParam.put("qty_unit_id", jsonMater.getString("base_unit_id")); + hotParam.put("task_id", task_id); + hotParam.put("start_point_code", point_code1); + hotParam.put("end_point_code", jsonHotIvt.getString("point_code")); + hotParam.put("temperature", temperature); + hotParam.put("oven_time", hours); + this.createHotIoMst(hotParam); + } else { + throw new BadRequestException("请扫描正确的冷却区点位或对接点位!"); + } + } else if (StrUtil.equals(option, "1")) { + // 入冷却 + // 手持-烘烤-质检不合格 + String point_code1 = whereJson.getString("point_code"); // 暂存位:起点 + String container_name = whereJson.getString("container_name"); // 母卷号 + if (ObjectUtil.isEmpty(point_code1)) { + throw new BadRequestException("点位不能为空"); + } + if (ObjectUtil.isEmpty(container_name)) { + throw new BadRequestException("母卷号不能为空"); + } + + //校验该设备是否启用,且母卷MES是否请求烘烤 + //查询该母卷号、设备号对应的生箔工单 + JSONObject raw_jo = WQLObject.getWQLObject("PDM_BI_RawFoilWorkOrder").query("container_name ='" + container_name + "'").uniqueResult(0); + + if (ObjectUtil.isEmpty(raw_jo)) { + throw new BadRequestException("未查询到对应的生箔工单!"); + } + String resource_name = raw_jo.getString("resource_name"); + JSONObject sb_jo = WQLObject.getWQLObject("st_ivt_sbpointivt").query("ext_code ='" + resource_name + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(sb_jo)) { + throw new BadRequestException("未查询到母卷号:" + container_name + "对应的生箔机台编号!"); + } + + if (StrUtil.equals("1", sb_jo.getString("mes_used")) && !"1".equals(raw_jo.getString("is_instor"))) { + throw new BadRequestException("该母卷在MES上未进行决策入半成品库,不允许进行入冷却操作!"); + } + + // 1.获取此暂存位的生产区域和上下位置 + JSONObject jsonPoint = pointTab.query("point_code = '" + point_code1 + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonPoint)) { + throw new BadRequestException("请扫描点位类型为出箱的烘箱对接位!"); + } + + if (!in_area_id.contains(jsonPoint.getString("product_area"))) { + throw new BadRequestException("当前登录人员暂无【" + jsonPoint.getString("product_area") + "】操作权限"); + } + // 2.找冷却区空货位 + JSONObject map = new JSONObject(); + map.put("flag", "2"); + map.put("product_area", jsonPoint.getString("product_area")); + map.put("point_location", jsonPoint.getString("point_location")); + map.put("point_type", "1"); + String endPointCode = null; + JSONObject jsonCooIvt = WQL.getWO("PDA_OVENINANDOUT_01").addParamMap(map).process().uniqueResult(0); + // 如果为空 + if (ObjectUtil.isEmpty(jsonCooIvt)) { + if (StrUtil.equals(jsonPoint.getString("point_location"), "0")) { + map.put("point_location", "1"); + } + if (StrUtil.equals(jsonPoint.getString("point_location"), "1")) { + map.put("point_location", "0"); + } + jsonCooIvt = WQL.getWO("PDA_OVENINANDOUT_01").addParamMap(map).process().uniqueResult(0); + } + if (ObjectUtil.isEmpty(jsonCooIvt)) { + throw new BadRequestException("冷却区空位不足"); + } + endPointCode = jsonCooIvt.getString("full_point_code"); + + // 3.创建任务 + JSONObject param = new JSONObject(); + param.put("point_code1", point_code1); + param.put("point_code2", endPointCode); + param.put("container_name", container_name); + param.put("product_area", jsonPoint.getString("product_area")); + + + InCoolIvtTask inCoolIvtTask = new InCoolIvtTask(); + String task_id = inCoolIvtTask.createTask(param); + + // 生成冷却区出入表 + String currentUserId = SecurityUtils.getCurrentUserId(); + String currentUsername = SecurityUtils.getCurrentUsername(); + + JSONObject jsonRaw = rawTab.query("container_name = '" + container_name + "' and is_delete = '0'").uniqueResult(0); + JSONObject jsonMater = materTab.query("material_code = '" + jsonRaw.getString("product_name") + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonMater)) { + throw new BadRequestException("物料基础信息中无此物料!"); + } + + JSONObject jsonCool = new JSONObject(); + jsonCool.put("iostorinv_id", IdUtil.getSnowflake(1, 1).nextId()); + jsonCool.put("bill_code", CodeUtil.getNewCode("COOLREGION_BILL_CODE")); + jsonCool.put("io_type", "0"); + jsonCool.put("material_id", jsonMater.getString("material_id")); + jsonCool.put("pcsn", container_name); + jsonCool.put("bill_status", "10"); + jsonCool.put("qty", jsonRaw.get("productin_qty")); + jsonCool.put("qty_unit_id", jsonMater.get("base_unit_id")); + jsonCool.put("task_id", task_id); + jsonCool.put("start_point_code", point_code1); + jsonCool.put("end_point_code", endPointCode); + jsonCool.put("create_mode", "03"); + jsonCool.put("create_id", currentUserId); + jsonCool.put("create_name", currentUsername); + jsonCool.put("create_time", DateUtil.now()); + jsonCool.put("update_optid", currentUserId); + jsonCool.put("update_optname", currentUsername); + jsonCool.put("update_time", DateUtil.now()); + jsonCool.put("confirm_optid", currentUserId); + jsonCool.put("confirm_optname", currentUsername); + jsonCool.put("confirm_time", DateUtil.now()); + coolTab.insert(jsonCool); + + + } + JSONObject result = new JSONObject(); + result.put("message", "操作成功!"); + return result; + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/FeedingServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/FeedingServiceImpl.java index aa71332..153c3f2 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/FeedingServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/FeedingServiceImpl.java @@ -64,111 +64,6 @@ public class FeedingServiceImpl implements FeedingService { return jo; } - @Transactional(rollbackFor = Exception.class) - @Override - public JSONObject confirm(JSONObject form) { - JSONObject whereJson = form.getJSONObject("cut_rows"); - String container_name = whereJson.getString("container_name"); - if (StrUtil.isEmpty(container_name)) { - throw new BadRequestException("子卷号不能为空!"); - } - - JSONObject plan_jo = WQLObject.getWQLObject("PDM_BI_SlittingProductionPlan").query("container_name = '" + container_name + "' AND is_delete = '0'").uniqueResult(0); - - if (ObjectUtil.isEmpty(plan_jo)) { - throw new BadRequestException("未查询到该子卷号对应的分切计划!"); - } - - //查询该分切机对应的点位 - JSONObject cut_jo = WQLObject.getWQLObject("st_ivt_cutpointivt").query("ext_code = '" + plan_jo.getString("resource_name") + "'").uniqueResult(0); - - if (StrUtil.isNotEmpty(cut_jo.getString("container_name")) || "02".equals(cut_jo.getString("full_point_status"))) { - throw new BadRequestException("该分切机对应的上料位存在母卷,不能下发搬运任务!"); - } - - //创建搬运任务 - if ("1".equals(plan_jo.getString("order_type"))) { - //生成一个半成品出库任务 - String parent_container_name = plan_jo.getString("parent_container_name"); - - //查询该母卷号所在位置 - JSONObject cool_ivt = WQLObject.getWQLObject("ST_IVT_CoolPointIvt").query("container_name = '" + parent_container_name + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(cool_ivt)) { - throw new BadRequestException("未查询到呼叫母卷的库存信息!"); - } - - //查询该母卷号对应的生箔信息 - JSONObject raw_jo = WQLObject.getWQLObject("pdm_bi_rawfoilworkorder").query("container_name = '" + parent_container_name + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(raw_jo)) { - throw new BadRequestException("未查询到母卷:" + parent_container_name + ",对应的生箔信息!"); - } - - JSONObject mater_jo = WQLObject.getWQLObject("md_me_materialbase").query("material_code = '" + raw_jo.getString("product_name") + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(mater_jo)) { - throw new BadRequestException("未查询到物料:" + raw_jo.getString("product_name") + "基础信息!"); - } - - //创建任务,判断目的点是否存在空轴,存在创建4个点的任务,不存在则创建两个点任务 - String task_id = ""; - - JSONObject jo = new JSONObject(); - if (StrUtil.equals("01", cut_jo.getString("empty_point_status"))) { - jo.put("point_code1", cool_ivt.getString("full_point_code")); - jo.put("point_code2", cut_jo.getString("full_point_code")); - jo.put("vehicle_code", parent_container_name); - jo.put("product_area", cool_ivt.getString("product_area")); - jo.put("task_type", "010302"); - } else { - jo.put("point_code1", cool_ivt.getString("full_point_code")); - jo.put("point_code2", cut_jo.getString("full_point_code")); - jo.put("point_code3", cut_jo.getString("empty_point_code")); - jo.put("point_code4", cool_ivt.getString("empty_point_code")); - jo.put("vehicle_code", parent_container_name); - jo.put("vehicle_code2", cut_jo.getString("empty_vehicle_code")); - jo.put("product_area", cool_ivt.getString("product_area")); - jo.put("task_type", "010301"); - } - - AbstractAcsTask task = new CoolCutTask(); - task_id = task.createTask(jo); - - //生成半成品出库单据 - String currentUserId = SecurityUtils.getCurrentUserId(); - String currentUsername = SecurityUtils.getCurrentUsername(); - - JSONObject jsonCool = new JSONObject(); - jsonCool.put("iostorinv_id", IdUtil.getSnowflake(1, 1).nextId()); - jsonCool.put("bill_code", CodeUtil.getNewCode("COOLREGION_BILL_CODE")); - jsonCool.put("io_type", "1"); - jsonCool.put("material_id", mater_jo.getString("material_id")); - jsonCool.put("pcsn", parent_container_name); - jsonCool.put("bill_status", "50"); - jsonCool.put("task_id", task_id); - jsonCool.put("qty_unit_id", "1"); - jsonCool.put("start_point_code", cool_ivt.getString("full_point_code")); - jsonCool.put("end_point_code", cut_jo.getString("full_point_code")); - jsonCool.put("create_mode", "03"); - jsonCool.put("create_id", currentUserId); - jsonCool.put("create_name", currentUsername); - jsonCool.put("create_time", DateUtil.now()); - jsonCool.put("update_optid", currentUserId); - jsonCool.put("update_optname", currentUsername); - jsonCool.put("update_time", DateUtil.now()); - jsonCool.put("confirm_optid", currentUserId); - jsonCool.put("confirm_optname", currentUsername); - jsonCool.put("confirm_time", DateUtil.now()); - WQLObject.getWQLObject("ST_IVT_CoolRegionIO").insert(jsonCool); - - - } else { - - - } - JSONObject jo = new JSONObject(); - jo.put("message", "操作成功!"); - return jo; - } - @Override public JSONObject queryPoint(JSONObject form) { String point_code = form.getString("point_code"); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/RawFoilServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/RawFoilServiceImpl.java index 27bb52e..1354829 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/RawFoilServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/RawFoilServiceImpl.java @@ -1,5 +1,6 @@ package org.nl.wms.pda.mps.service.impl; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.IdUtil; @@ -8,8 +9,13 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.nl.b_lms.sch.point.dao.StIvtSbpointivt; +import org.nl.b_lms.sch.point.dao.mapper.StIvtSbpointivtMapper; import org.nl.common.utils.TaskUtils; import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.common.utils.RedisUtils; @@ -23,13 +29,24 @@ import org.nl.wms.ext.acs.service.impl.WmsToAcsServiceImpl; import org.nl.wms.pda.mps.eum.RegionTypeEnum; import org.nl.wms.pda.mps.service.BakingService; import org.nl.wms.pda.mps.service.RawFoilService; +import org.nl.wms.pdm.rawfoilworkorder.service.dao.CoolPointIvt; +import org.nl.wms.pdm.rawfoilworkorder.service.dao.RawfoilWorkOrder; +import org.nl.wms.pdm.rawfoilworkorder.service.dao.SbPointIvt; +import org.nl.wms.pdm.rawfoilworkorder.service.dao.mapper.CoolPointIvtMapper; +import org.nl.wms.pdm.rawfoilworkorder.service.dao.mapper.RawfoilWorkOrderMapper; +import org.nl.wms.pdm.rawfoilworkorder.service.dao.mapper.SbPointIvtMapper; +import org.nl.wms.pdm.rawfoilworkorder.service.dto.CoolPointIvtDto; import org.nl.wms.sch.service.PointService; import org.nl.wms.sch.tasks.CallEmpReelTask; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Collections; import java.util.Date; +import java.util.List; @Service @RequiredArgsConstructor @@ -37,6 +54,15 @@ import java.util.Date; public class RawFoilServiceImpl implements RawFoilService { private final AcsToWmsService acsToWmsService; private final PointService pointService; + @Autowired + RawfoilWorkOrderMapper rawfoilWorkOrderMapper; + + @Autowired + SbPointIvtMapper sbPointIvtMapper; + + @Autowired + CoolPointIvtMapper coolPointIvtMapper; + @Override public JSONObject queryProductArea() { @@ -51,72 +77,71 @@ public class RawFoilServiceImpl implements RawFoilService { @Override public JSONObject queryRawFoil(JSONObject whereJson, HttpContext ctx) { + PageHelper.startPage(Integer.parseInt(ctx.getPage()), Integer.parseInt(ctx.getRows())); String point_code = whereJson.getString("point_code"); String container_name = whereJson.getString("container_name"); String product_area = whereJson.getString("product_area"); //获取人员对应的区域 - UserAreaServiceImpl userAreaService = new UserAreaServiceImpl(); - String in_area_id = userAreaService.getInArea(); +// UserAreaServiceImpl userAreaService = new UserAreaServiceImpl(); +// String in_area_id = userAreaService.getInArea(); JSONArray resultArr = new JSONArray(); JSONObject map = new JSONObject(); - map.put("flag", "4"); map.put("point_code", point_code); map.put("container_name", container_name); map.put("product_area", product_area); - if (ObjectUtil.isNotEmpty(in_area_id)) { - map.put("in_area_id", in_area_id); - } +// if (ObjectUtil.isNotEmpty(in_area_id)) { +// map.put("in_area_id", in_area_id); +// } + List list = rawfoilWorkOrderMapper.queryRawFoil(map); + PageInfo pageInfo = new PageInfo<>(list); + if (ObjectUtil.isNotEmpty(list)) { + for (RawfoilWorkOrder rawfoilWorkOrder : list) { + JSONObject json = new JSONObject(); + BigDecimal theory_height = rawfoilWorkOrder.getTheory_height(); + BigDecimal eqp_velocity = rawfoilWorkOrder.getEqp_velocity(); + // 计算生产所需时间: 理论长度 / 速度 + int need_time = NumberUtil.div(NumberUtil.div(theory_height, eqp_velocity).toString(), "60").intValue();// 分钟 - JSONObject arr = WQL.getWO("PDA_RAWFOIL_01").addParamMap(map).pageQuery(ctx, "container_name"); - JSONArray rows = arr.getJSONArray("content"); - for (int i = 0; i < rows.size(); i++) { - JSONObject json = new JSONObject(); - JSONObject jsonObject = rows.getJSONObject(i); - String theory_height = jsonObject.getString("theory_height"); - String eqp_velocity = jsonObject.getString("eqp_velocity"); + // 计算预计结束时间: 开始时间 + 生产所需时间 + String up_coiler_date = rawfoilWorkOrder.getUp_coiler_date(); + Date date = DateUtil.parse(up_coiler_date); + String end_time = DateUtil.offsetSecond(date, need_time).toString(); - // 计算生产所需时间: 理论长度 / 速度 - int need_time = NumberUtil.div(NumberUtil.div(theory_height, eqp_velocity).toString(), "60").intValue();// 分钟 + // 当前时间 - 预计结束时间 : 超过为红色、还有半小时为黄色 + Date now_time = DateUtil.parse(DateUtil.now()); + Date end_time2 = DateUtil.parse(end_time); - // 计算预计结束时间: 开始时间 + 生产所需时间 - String up_coiler_date = jsonObject.getString("up_coiler_date"); - Date date = DateUtil.parse(up_coiler_date); - String end_time = DateUtil.offsetSecond(date, need_time).toString(); + long betweenDay = DateUtil.between(now_time, end_time2, DateUnit.MINUTE, false); - // 当前时间 - 预计结束时间 : 超过为红色、还有半小时为黄色 - Date now_time = DateUtil.parse(DateUtil.now()); - Date end_time2 = DateUtil.parse(end_time); + if (betweenDay <= 0) { + json.put("color_type", "1"); + } else if (betweenDay > 0 && betweenDay <= 30) { + json.put("color_type", "2"); + } else { + json.put("color_type", "0"); + } - long betweenDay = DateUtil.between(now_time, end_time2, DateUnit.MINUTE, false); + if (betweenDay < 0) { + betweenDay = 0; + } - if (betweenDay <= 0) { - json.put("color_type", "1"); - } else if (betweenDay > 0 && betweenDay <= 30) { - json.put("color_type", "2"); - } else { - json.put("color_type", "0"); + json.put("container_name", rawfoilWorkOrder.getContainer_name()); + json.put("up_coiler_date", rawfoilWorkOrder.getUp_coiler_date()); + json.put("point_code", rawfoilWorkOrder.getPoint_code()); + json.put("resource_name", rawfoilWorkOrder.getResource_name()); + json.put("end_date", end_time); + json.put("pcsn", rawfoilWorkOrder.getProduct_name()); + json.put("remaining_time", betweenDay); + json.put("product_name", rawfoilWorkOrder.getProduct_name()); + json.put("mfg_order_name", rawfoilWorkOrder.getMfg_order_name()); + resultArr.add(json); } - - if (betweenDay < 0) { - betweenDay = 0; - } - json.put("container_name", jsonObject.getString("container_name")); - json.put("up_coiler_date", jsonObject.getString("up_coiler_date")); - json.put("end_date", end_time); - json.put("point_code", jsonObject.getString("ed_point_code")); - json.put("resource_name", jsonObject.getString("resource_name")); - json.put("pcsn", jsonObject.getString("product_name")); - json.put("remaining_time", betweenDay); - json.put("product_name", jsonObject.getString("theory_height")); - json.put("mfg_order_name", jsonObject.getString("mfg_order_name")); - - resultArr.add(json); } JSONObject jo = new JSONObject(); jo.put("data", resultArr); - jo.put("size", arr.getString("totalElements")); + jo.put("size", pageInfo.getTotal()); jo.put("message", "查询成功!"); return jo; @@ -124,21 +149,22 @@ public class RawFoilServiceImpl implements RawFoilService { @Override public JSONObject queryRawFoilList(JSONObject whereJson, HttpContext ctx) { + PageHelper.startPage(Integer.parseInt(ctx.getPage()), Integer.parseInt(ctx.getRows())); JSONObject map = new JSONObject(); - map.put("flag", "5"); map.put("point_code", whereJson.getString("point_code")); map.put("container_name", whereJson.getString("container_name")); - //获取人员对应的区域 - UserAreaServiceImpl userAreaService = new UserAreaServiceImpl(); - String in_area_id = userAreaService.getInArea(); - if (ObjectUtil.isNotEmpty(in_area_id)) { - map.put("in_area_id", in_area_id); - } - JSONObject resultJSONArray = WQL.getWO("PDA_RAWFOIL_01").addParamMap(map).pageQuery(ctx, "container_name"); +// //获取人员对应的区域 +// UserAreaServiceImpl userAreaService = new UserAreaServiceImpl(); +// String in_area_id = userAreaService.getInArea(); +// if (ObjectUtil.isNotEmpty(in_area_id)) { +// map.put("in_area_id", in_area_id); +// } + List rawfoilWorkOrderList = rawfoilWorkOrderMapper.queryRawFoilList(map); + PageInfo rawfoilWorkOrderPageInfo = new PageInfo<>(rawfoilWorkOrderList); JSONObject jo = new JSONObject(); - jo.put("data", resultJSONArray.getJSONArray("content")); - jo.put("size", resultJSONArray.getString("totalElements")); - if (StrUtil.isNotEmpty(whereJson.getString("container_name")) && ObjectUtil.isEmpty(resultJSONArray.getJSONArray("content"))) { + jo.put("data", rawfoilWorkOrderList); + jo.put("size", rawfoilWorkOrderPageInfo.getTotal()); + if (StrUtil.isNotEmpty(whereJson.getString("container_name")) && rawfoilWorkOrderList.size() < 1) { throw new BadRequestException("当前输入的母卷工单已结束或不存在!"); } jo.put("message", "查询成功!"); @@ -360,41 +386,40 @@ public class RawFoilServiceImpl implements RawFoilService { @Override public JSONObject createOrder(JSONObject whereJson) { - WQLObject rawTab = WQLObject.getWQLObject("PDM_BI_RawFoilWorkOrder"); // 生箔工单表 - WQLObject sbTab = WQLObject.getWQLObject("ST_IVT_SbPointIvt"); // 生箔点位库存表 - JSONObject device_jo = sbTab.query("point_code = '" + whereJson.getString("point_code") + "'").uniqueResult(0); - - String container_name = whereJson.getString("container_name"); - //判断该母卷是否存在工单 - JSONObject raw_jo = WQLObject.getWQLObject("pdm_bi_rawfoilworkorder").query("container_name = '" + container_name + "'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(raw_jo)) { - throw new BadRequestException("当前母卷存在生箔工单,不允许创建!"); + SbPointIvt stIvtSbpointivt = sbPointIvtMapper.selectOne(new LambdaQueryWrapper() + .eq(ObjectUtil.isNotEmpty(whereJson.getString("point_code")), SbPointIvt::getPoint_code, whereJson.getString("point_code"))); + if (ObjectUtil.isEmpty(stIvtSbpointivt)) { + throw new BadRequestException("点位设备不存在"); + } + String container_name = whereJson.getString("container_name"); + RawfoilWorkOrder rawfoilWorkOrder = rawfoilWorkOrderMapper.selectOne(new LambdaQueryWrapper() + .eq(ObjectUtil.isNotEmpty(container_name), RawfoilWorkOrder::getContainer_name, container_name)); + if (ObjectUtil.isNotEmpty(rawfoilWorkOrder)) { + throw new BadRequestException("当前母卷已存在生箔工单,不允许重复创建!"); } - // 插入生箔工序工单表 - JSONObject json = new JSONObject(); - json.put("workorder_id", IdUtil.getSnowflake(1, 1).nextId()); - json.put("container_name", container_name); - json.put("resource_name", device_jo.getString("ext_code")); - json.put("mfg_order_name", "test"); - json.put("product_name", "741011000000361"); - json.put("description", "铜箔|双面光|原箔|6微米|1350"); - json.put("theory_height", 2000.00); - json.put("eqp_velocity", 20.00); - json.put("up_coiler_date", DateUtil.now()); - json.put("is_reload_send", 0); - json.put("order_type", device_jo.getString("device_type")); - json.put("product_area", "B2"); - json.put("realstart_time", DateUtil.now()); - json.put("status", "01"); - json.put("is_delete", "0"); - json.put("agvno", "0"); - json.put("productin_qty", 0); - json.put("create_id", "1"); - json.put("create_name", "管理员"); - json.put("create_time", DateUtil.now()); - rawTab.insert(json); - + RawfoilWorkOrder order = new RawfoilWorkOrder(); + order.setWorkorder_id(IdUtil.getSnowflake(1, 1).nextId()); + order.setContainer_name(container_name); + order.setResource_name(stIvtSbpointivt.getExt_code()); + order.setMfg_order_name(IdUtil.getSnowflake(1, 1).nextIdStr()); + order.setProduct_name("741011000000361"); + order.setDescription("铜箔|双面光|原箔|6微米|1350"); + order.setTheory_height(BigDecimal.valueOf(2000.00)); + order.setEqp_velocity(BigDecimal.valueOf(20.00)); + order.setUp_coiler_date(DateUtil.now()); + order.setIs_reload_send("0"); + order.setOrder_type(stIvtSbpointivt.getDevice_type()); + order.setProduct_area(stIvtSbpointivt.getProduct_area()); + order.setRealstart_time(DateUtil.now()); + order.setStatus("00"); + order.setIs_delete("0"); + order.setAgvno("0"); + order.setProductin_qty(BigDecimal.valueOf(0)); + order.setCreate_id("1"); + order.setCreate_name("管理员"); + order.setCreate_time(DateUtil.now()); + rawfoilWorkOrderMapper.insert(order); JSONObject jo = new JSONObject(); jo.put("message", "操作成功!"); return jo; @@ -545,28 +570,32 @@ public class RawFoilServiceImpl implements RawFoilService { WQLObject stIvtSbpointivtService = WQLObject.getWQLObject("st_ivt_sbpointivt"); // 生箔点位库存表 JSONObject raw_jo = whereJson.getJSONObject("raw_jo"); - JSONObject jsonRaw = pdmBiRawfoilworkorderService.query("workorder_id = '" + raw_jo.getString("workorder_id") + "'").uniqueResult(0); - - if (!StrUtil.equals(jsonRaw.getString("status"), "02")) { + if (ObjectUtil.isEmpty(raw_jo)) { + throw new BadRequestException("请先选择生箔工单!"); + } + RawfoilWorkOrder rawfoilWorkOrder = rawfoilWorkOrderMapper.selectOne(new LambdaQueryWrapper() + .eq(ObjectUtil.isNotEmpty(raw_jo.getString("workorder_id")), RawfoilWorkOrder::getWorkorder_id, raw_jo.getString("workorder_id"))); + if (!StrUtil.equals(rawfoilWorkOrder.getStatus(), "02")) { throw new BadRequestException("工单状态不为空轴搬出"); } //查询该母卷号对应的任务 - String container_name = jsonRaw.getString("container_name"); + String container_name = rawfoilWorkOrder.getContainer_name(); JSONObject task_jo = WQLObject.getWQLObject("SCH_BASE_Task").query("material_code = '" + container_name + "' and task_status <> '07' AND is_delete = '0'").uniqueResult(0); // 查询生箔点位库存表 - JSONObject jsonSb = stIvtSbpointivtService.query("ext_code = '" + jsonRaw.getString("resource_name") + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(jsonSb)) { - throw new BadRequestException("点位不存在"); + SbPointIvt stIvtSbpointivt = sbPointIvtMapper.selectOne(new LambdaQueryWrapper() + .eq(ObjectUtil.isNotEmpty(rawfoilWorkOrder.getResource_name()), SbPointIvt::getExt_code, rawfoilWorkOrder.getResource_name())); + if (ObjectUtil.isEmpty(stIvtSbpointivt)) { + throw new BadRequestException("点位设备不存在"); } //下发ACS,执行取满放空的AGV动作 JSONArray paramArr = new JSONArray(); JSONObject param = new JSONObject(); - param.put("device_code", jsonSb.getString("point_code")); + param.put("device_code", stIvtSbpointivt.getPoint_code()); param.put("task_code", task_jo.getString("task_code")); - param.put("product_area", jsonSb.getString("product_area")); + param.put("product_area", stIvtSbpointivt.getProduct_area()); param.put("option", "1"); paramArr.add(param); @@ -578,9 +607,8 @@ public class RawFoilServiceImpl implements RawFoilService { } // 更新工单状态为确认下卷 - JSONObject update_jo = new JSONObject(); - update_jo.put("status", "03"); - pdmBiRawfoilworkorderService.update(update_jo, ("workorder_id = '" + raw_jo.getString("workorder_id") + "'")); + rawfoilWorkOrder.setStatus("20"); + rawfoilWorkOrderMapper.updateById(rawfoilWorkOrder); JSONObject jo = new JSONObject(); jo.put("message", "操作成功!"); @@ -648,7 +676,7 @@ public class RawFoilServiceImpl implements RawFoilService { throw new BadRequestException("该生箔工单存在未完成的任务,请先完成任务!"); } - jsonCool.put("status", "09"); + jsonCool.put("status", "40"); jsonCool.put("realend_time", DateUtil.now()); jsonCool.put("finish_type", "02"); stIvtCoolRegionIoService.update(jsonCool); @@ -657,4 +685,263 @@ public class RawFoilServiceImpl implements RawFoilService { jo.put("message", "操作成功!"); return jo; } + + + @Override + @Transactional(rollbackFor = Exception.class) + public JSONObject scrollDowm(JSONObject whereJson) { + String message = "操作完成!"; + String type = whereJson.getString("type"); + JSONObject raw_jo = whereJson.getJSONObject("raw_jo"); + SbPointIvt stIvtSbpointivt; + if (ObjectUtil.isNotEmpty(whereJson.getString("point_code"))) { + stIvtSbpointivt = sbPointIvtMapper.selectOne(new LambdaQueryWrapper() + .eq(ObjectUtil.isNotEmpty(whereJson.getString("point_code")), SbPointIvt::getPoint_code, whereJson.getString("point_code"))); + } else { + stIvtSbpointivt = sbPointIvtMapper.selectOne(new LambdaQueryWrapper() + .eq(ObjectUtil.isNotEmpty(raw_jo.getString("point_code")), SbPointIvt::getPoint_code, raw_jo.getString("point_code"))); + } + if (ObjectUtil.isEmpty(stIvtSbpointivt)) { + throw new BadRequestException("点位:" + stIvtSbpointivt.getExt_code() + "生箔设备不存在"); + } + if (StrUtil.equals("0", stIvtSbpointivt.getIs_used())) { + throw new BadRequestException("当前生箔机:" + stIvtSbpointivt.getExt_code() + "未启用!"); + } + + JSONObject param = new JSONObject(); + if ("1".equals(type) || "3".equals(type)) {// 1:取空取满放空放满, + handleType1And3(stIvtSbpointivt, raw_jo, param, type); + } else if ("2".equals(type)) {//2:单上空轴 + handleType2(stIvtSbpointivt, param); + } else if ("4".equals(type)) {//4:单下空轴 + handleType4(stIvtSbpointivt, param); + } + + CallEmpReelTask callEmpReelTask = new CallEmpReelTask(); + callEmpReelTask.createTask(param); + // 更新工单状态 + if ("1".equals(type) || "3".equals(type)) { + RawfoilWorkOrder rawfoilWorkOrder = rawfoilWorkOrderMapper.selectOne(new LambdaQueryWrapper() + .eq(ObjectUtil.isNotEmpty(raw_jo.getString("workorder_id")), RawfoilWorkOrder::getWorkorder_id, raw_jo.getString("workorder_id"))); + rawfoilWorkOrder.setStatus("10"); + rawfoilWorkOrderMapper.updateById(rawfoilWorkOrder); + } + JSONObject jo = new JSONObject(); + jo.put("message", message); + return jo; + } + + @Override + public JSONObject start(JSONObject whereJson) { + WQLObject stIvtCoolRegionIoService = WQLObject.getWQLObject("PDM_BI_RawFoilWorkOrder"); // 生箔工单表 + WQLObject pointTab = WQLObject.getWQLObject("ST_IVT_SbPointIvt"); + + JSONObject raw_jo = whereJson.getJSONObject("raw_jo"); + + JSONObject jsonRaw = stIvtCoolRegionIoService.query("workorder_id = '" + raw_jo.getString("workorder_id") + "'").uniqueResult(0); + + if (!StrUtil.equals(jsonRaw.getString("status"), "00")) { + throw new BadRequestException("工单状态不为初始化"); + } + + JSONObject jsonPoint = pointTab.query("ext_code ='" + jsonRaw.getString("resource_name") + "'").uniqueResult(0); + + //查询该生箔工单是否存在未完成的任务 + String container_name = raw_jo.getString("container_name"); + + JSONObject task_jo = WQLObject.getWQLObject("sch_base_task").query("material_code = '" + container_name + "' AND task_status < '07' AND is_delete = '0'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(task_jo)) { + throw new BadRequestException("该生箔工单存在未完成的任务,请先完成任务!"); + } + if (StrUtil.equals("01", jsonPoint.getString("full_point_status")) && StrUtil.equals("02", jsonPoint.getString("empty_point_status"))) { + //更新点位状态 + jsonPoint.put("full_point_status", "02"); + jsonPoint.put("empty_point_status", "01"); + pointTab.update(jsonPoint); + + jsonRaw.put("status", "30"); + jsonRaw.put("realend_time", DateUtil.now()); + jsonRaw.put("finish_type", "02"); + stIvtCoolRegionIoService.update(jsonRaw); + } else { + throw new BadRequestException("当前生箔机:" + jsonPoint.getString("ext_code") + "不为满轴位为空且空轴位有轴的状态!"); + } + + + JSONObject jo = new JSONObject(); + jo.put("message", "操作成功!"); + return jo; + } + + @Override + public JSONObject query(JSONObject whereJson, HttpContext ctx) { + PageHelper.startPage(Integer.parseInt(ctx.getPage()), Integer.parseInt(ctx.getRows())); + JSONObject map = new JSONObject(); + map.put("point_code", whereJson.getString("point_code")); + map.put("container_name", whereJson.getString("container_name")); +// //获取人员对应的区域 +// UserAreaServiceImpl userAreaService = new UserAreaServiceImpl(); +// String in_area_id = userAreaService.getInArea(); +// if (ObjectUtil.isNotEmpty(in_area_id)) { +// map.put("in_area_id", in_area_id); +// } + List list = coolPointIvtMapper.selectCoolIvt(map); + PageInfo pageInfo = new PageInfo<>(list); + JSONObject jo = new JSONObject(); + jo.put("data", list); + jo.put("size", pageInfo.getTotal()); + jo.put("message", "查询成功!"); + return jo; + } + + private void handleType1And3(SbPointIvt stIvtSbpointivt, JSONObject raw_jo, JSONObject param, String type) { + if (ObjectUtil.isEmpty(raw_jo)) { + throw new BadRequestException("生箔工单不能为空!"); + } + JSONObject task_jo = WQLObject.getWQLObject("sch_base_task").query("material_code = '" + raw_jo.getString("container_name") + "' AND task_status < '07' AND is_delete = '0'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(task_jo)) { + throw new BadRequestException("该生箔工单存在未完成的任务,请先完成任务!"); + } + RawfoilWorkOrder rawfoilWorkOrder = rawfoilWorkOrderMapper.selectOne(new LambdaQueryWrapper() + .eq(ObjectUtil.isNotEmpty(raw_jo.getString("workorder_id")), RawfoilWorkOrder::getWorkorder_id, raw_jo.getString("workorder_id"))); + if (!StrUtil.equals(rawfoilWorkOrder.getStatus(), "30")) { + throw new BadRequestException("工单状态不为开始生产"); + } + if (StrUtil.equals("02", stIvtSbpointivt.getFull_point_status()) && StrUtil.equals("01", stIvtSbpointivt.getEmpty_point_status())) { + JSONObject map = new JSONObject(); + map.put("product_area", stIvtSbpointivt.getProduct_area()); + map.put("point_location", stIvtSbpointivt.getPoint_location()); + map.put("point_type", "1"); + List coolPointIvtList = coolPointIvtMapper.queryCoolPointIvt(map); + + String start_pint_code = ""; + String next_pint_code = ""; + String point_code4 = ""; + CoolPointIvt jsonIvt; + //如果没找到则继续找下一节点 + if (CollectionUtil.isEmpty(coolPointIvtList)) { + adjustPointLocation(map, stIvtSbpointivt); + coolPointIvtList = coolPointIvtMapper.queryCoolPointIvt(map); + if (CollectionUtil.isEmpty(coolPointIvtList)) { + throw new BadRequestException("未查询到合适的点位"); + } + jsonIvt = coolPointIvtList.get(0); + if ("1".equals(type)) { + start_pint_code = jsonIvt.getEmpty_point_code(); + point_code4 = jsonIvt.getFull_point_code(); + } else { + next_pint_code = jsonIvt.getFull_point_code(); + } + + } else { + jsonIvt = coolPointIvtList.get(0); + if ("1".equals(type)) { + start_pint_code = jsonIvt.getEmpty_point_code(); + point_code4 = jsonIvt.getFull_point_code(); + } else { + next_pint_code = jsonIvt.getFull_point_code(); + } + } + + if ("1".equals(type)) { + param.put("point_code1", start_pint_code); + param.put("point_code2", stIvtSbpointivt.getEmpty_point_code()); + param.put("point_code3", stIvtSbpointivt.getFull_point_code()); + param.put("point_code4", point_code4); + param.put("task_type", "010101"); + } else { + param.put("point_code1", stIvtSbpointivt.getFull_point_code()); + param.put("point_code2", next_pint_code); + param.put("task_type", "010102"); + } + + param.put("material_code", rawfoilWorkOrder.getContainer_name()); + param.put("product_area", rawfoilWorkOrder.getProduct_area()); + } else { + throw new BadRequestException("当前生箔机:" + stIvtSbpointivt.getExt_code() + "不为有满卷且空轴位为空的状态!"); + } + } + + private void handleType2(SbPointIvt stIvtSbpointivt, JSONObject param) { + if (StrUtil.equals("01", stIvtSbpointivt.getEmpty_point_status()) && StrUtil.equals("01", stIvtSbpointivt.getFull_point_status())) { + JSONObject map = new JSONObject(); + map.put("product_area", stIvtSbpointivt.getProduct_area()); + map.put("point_location", stIvtSbpointivt.getPoint_location()); + List coolPointIvtList = coolPointIvtMapper.queryCoolPointIvt(map); + String start_pint_code = ""; + //如果没找到则继续找下一节点 + CoolPointIvt jsonIvt; + if (ObjectUtil.isEmpty(coolPointIvtList)) { + adjustPointLocation(map, stIvtSbpointivt); + coolPointIvtList = coolPointIvtMapper.queryCoolPointIvt(map); + if (CollectionUtil.isEmpty(coolPointIvtList)) { + throw new BadRequestException("未查询到合适的点位"); + } + jsonIvt = coolPointIvtList.get(0); + start_pint_code = jsonIvt.getEmpty_point_code(); + } else { + jsonIvt = coolPointIvtList.get(0); + start_pint_code = jsonIvt.getEmpty_point_code(); + } + param.put("point_code1", start_pint_code); + param.put("point_code2", stIvtSbpointivt.getEmpty_point_code()); + param.put("task_type", "010103"); + param.put("product_area", jsonIvt.getProduct_area()); + } else { + throw new BadRequestException("当前生箔机:" + stIvtSbpointivt.getExt_code() + "空轴位或者满轴位不为空!"); + } + } + + private void handleType4(SbPointIvt stIvtSbpointivt, JSONObject param) { + List rawfoilWorkOrderList = rawfoilWorkOrderMapper.selectList(new LambdaQueryWrapper() + .eq(ObjectUtil.isNotEmpty(stIvtSbpointivt.getExt_code()), RawfoilWorkOrder::getResource_name, stIvtSbpointivt.getExt_code()) + .eq(RawfoilWorkOrder::getStatus, "30")); + if (CollectionUtil.isEmpty(rawfoilWorkOrderList)) { + throw new BadRequestException("工单状态不为开始生产"); + } +// JSONArray arr = pdmBiRawfoilworkorderService.query("resource_name = '" + sbPointIvt.getString("ext_code") + "' AND status = '30'").getResultJSONArray(0); +// if (arr.size() > 0) { +// throw new BadRequestException("当前生箔机存在已经开始生产的生箔工单,任务不能创建!"); +// } + + if (StrUtil.equals("02", stIvtSbpointivt.getEmpty_point_status()) && StrUtil.equals("01", stIvtSbpointivt.getFull_point_status())) { + JSONObject map = new JSONObject(); + map.put("product_area", stIvtSbpointivt.getProduct_area()); + map.put("point_location", stIvtSbpointivt.getPoint_location()); + + List coolPointIvtList = coolPointIvtMapper.queryCoolPointIvt(map); + + String next_pint_code = ""; + CoolPointIvt jsonIvt; + //如果没找到则继续找下一节点 + if (CollectionUtil.isEmpty(coolPointIvtList)) { + adjustPointLocation(map, stIvtSbpointivt); + coolPointIvtList = coolPointIvtMapper.queryCoolPointIvt(map); + if (CollectionUtil.isEmpty(coolPointIvtList)) { + throw new BadRequestException("未查询到合适的点位"); + } + jsonIvt = coolPointIvtList.get(0); + next_pint_code = jsonIvt.getEmpty_point_code(); + } else { + jsonIvt = coolPointIvtList.get(0); + next_pint_code = jsonIvt.getEmpty_point_code(); + } + + param.put("point_code1", stIvtSbpointivt.getEmpty_point_code()); + param.put("point_code2", next_pint_code); + param.put("task_type", "010104"); + param.put("product_area", jsonIvt.getProduct_area()); + } else { + throw new BadRequestException("当前生箔机:" + stIvtSbpointivt.getExt_code() + "不是满轴位为空且空轴位不为空的状态!"); + } + } + + private void adjustPointLocation(JSONObject map, SbPointIvt stIvtSbpointivt) { + String point_location = stIvtSbpointivt.getPoint_location(); + if (StrUtil.equals(point_location, "0")) { + map.put("point_location", "1"); + } else if (StrUtil.equals(point_location, "1")) { + map.put("point_location", "0"); + } + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/wql/PDA_RAWFOIL_01.wql b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/wql/PDA_RAWFOIL_01.wql index b0740b1..0914c6d 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/wql/PDA_RAWFOIL_01.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/wql/PDA_RAWFOIL_01.wql @@ -259,11 +259,11 @@ ( CASE der.STATUS - WHEN '01' THEN '开始' - WHEN '02' THEN '空轴搬出' - WHEN '03' THEN '准备就绪' - WHEN '04' THEN '下卷完成' - WHEN '09' THEN '结束' + WHEN '00' THEN '初始化' + WHEN '10' THEN '配送中' + WHEN '20' THEN '准备就绪' + WHEN '30' THEN '开始生产' + WHEN '40' THEN '结束' END ) AS status_name, der.mfg_order_name AS mfg_order_name, @@ -368,4 +368,88 @@ IF 输入.flag = "6" ENDSELECT ENDQUERY ENDIF + IF 输入.flag = "8" + QUERY + SELECT + ivt.* + FROM + ST_IVT_CoolPointIvt ivt + WHERE + ivt.empty_point_status = '01' + AND + ivt.full_point_status = '01' + AND + ivt.is_used = '1' + OPTION 输入.point_type <> "" + ivt.point_type = 输入.point_type + ENDOPTION + OPTION 输入.point_type = "" + ivt.point_type = '1' + ENDOPTION + + AND NOT EXISTS ( + SELECT + * + FROM + sch_base_task + WHERE + ( point_code1 = ivt.empty_point_code OR point_code2 = ivt.empty_point_code ) + AND task_status < '07' + AND is_delete = '0' + ) + + OPTION 输入.product_area <> "" + ivt.product_area = 输入.product_area + ENDOPTION + + OPTION 输入.point_location <> "" + ivt.point_location = 输入.point_location + ENDOPTION + + order by ivt.point_code ASC + + ENDSELECT + ENDQUERY + ENDIF + IF 输入.flag = "9" + QUERY + SELECT + ivt.* + FROM + ST_IVT_CoolPointIvt ivt + WHERE + ivt.empty_point_status = '02' + AND + ivt.is_used = '1' + OPTION 输入.point_type <> "" + ivt.point_type = 输入.point_type + ENDOPTION + OPTION 输入.point_type = "" + ivt.point_type = '1' + ENDOPTION + + AND NOT EXISTS ( + SELECT + * + FROM + sch_base_task + WHERE + ( point_code1 = ivt.empty_point_code OR point_code2 = ivt.empty_point_code ) + AND task_status < '07' + AND is_delete = '0' + ) + + OPTION 输入.product_area <> "" + ivt.product_area = 输入.product_area + ENDOPTION + + OPTION 输入.point_location <> "" + ivt.point_location = 输入.point_location + ENDOPTION + + order by ivt.point_code ASC + + ENDSELECT + ENDQUERY + ENDIF diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/rest/CoolPointIvtController.java b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/rest/CoolPointIvtController.java index c71c06d..091172e 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/rest/CoolPointIvtController.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/rest/CoolPointIvtController.java @@ -1,82 +1,82 @@ -package org.nl.wms.pdm.ivt.rest; - - -import com.alibaba.fastjson.JSONObject; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.nl.modules.logging.annotation.Log; -import org.nl.wms.pdm.ivt.service.CoolPointIvtService; -import org.nl.wms.pdm.ivt.service.dto.CoolPointIvtDto; -import org.springframework.data.domain.Pageable; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import java.util.Map; - -/** - * @author lyd - * @date 2022-10-08 - **/ -@RestController -@RequiredArgsConstructor - -@RequestMapping("/api/stIvtCoolpointivt") -@Slf4j -public class CoolPointIvtController { - - private final CoolPointIvtService coolpointivtService; - - @GetMapping - @Log("查询冷却区库存") - - //@SaCheckPermission("@el.check('stIvtCoolpointivt:list')") - public ResponseEntity query(@RequestParam Map whereJson, Pageable page) { - return new ResponseEntity<>(coolpointivtService.queryAll(whereJson, page), HttpStatus.OK); - } - - @PostMapping - @Log("新增冷却区库存") - - //@SaCheckPermission("@el.check('stIvtCoolpointivt:add')") - public ResponseEntity create(@Validated @RequestBody CoolPointIvtDto dto) { - coolpointivtService.create(dto); - return new ResponseEntity<>(HttpStatus.CREATED); - } - - @PutMapping - @Log("修改冷却区库存") - - //@SaCheckPermission("@el.check('stIvtCoolpointivt:edit')") - public ResponseEntity update(@Validated @RequestBody CoolPointIvtDto dto) { - coolpointivtService.update(dto); - return new ResponseEntity<>(HttpStatus.NO_CONTENT); - } - - @Log("删除冷却区库存") - - //@SaCheckPermission("@el.check('stIvtCoolpointivt:del')") - @DeleteMapping - public ResponseEntity delete(@RequestBody Long[] ids) { - coolpointivtService.deleteAll(ids); - return new ResponseEntity<>(HttpStatus.OK); - } - - @GetMapping("/coolRegionIOQueryAll") - @Log("冷却区出入表") - - //@SaCheckPermission("@el.check('stIvtCoolpointivt:list')") - public ResponseEntity coolRegionIOQueryAll(@RequestParam Map whereJson, Pageable page) { - return new ResponseEntity<>(coolpointivtService.coolRegionIOQueryAll(whereJson, page), HttpStatus.OK); - } - - @PostMapping("/uploadMes") - @Log("手动回传MES") - - public ResponseEntity uploadMes(@RequestBody JSONObject form) { - coolpointivtService.uploadMes(form); - return new ResponseEntity<>(HttpStatus.OK); - } - -} +//package org.nl.wms.pdm.ivt.rest; +// +// +//import com.alibaba.fastjson.JSONObject; +//import lombok.RequiredArgsConstructor; +//import lombok.extern.slf4j.Slf4j; +//import org.nl.modules.logging.annotation.Log; +//import org.nl.wms.pdm.ivt.service.CoolPointIvtService; +//import org.nl.wms.pdm.ivt.service.dto.CoolPointIvtDto; +//import org.springframework.data.domain.Pageable; +//import org.springframework.http.HttpStatus; +//import org.springframework.http.ResponseEntity; +//import org.springframework.validation.annotation.Validated; +//import org.springframework.web.bind.annotation.*; +// +//import java.util.Map; +// +///** +// * @author lyd +// * @date 2022-10-08 +// **/ +//@RestController +//@RequiredArgsConstructor +// +//@RequestMapping("/api/stIvtCoolpointivt") +//@Slf4j +//public class CoolPointIvtController { +// +// private final CoolPointIvtService coolpointivtService; +// +// @GetMapping +// @Log("查询冷却区库存") +// +// //@SaCheckPermission("@el.check('stIvtCoolpointivt:list')") +// public ResponseEntity query(@RequestParam Map whereJson, Pageable page) { +// return new ResponseEntity<>(coolpointivtService.queryAll(whereJson, page), HttpStatus.OK); +// } +// +// @PostMapping +// @Log("新增冷却区库存") +// +// //@SaCheckPermission("@el.check('stIvtCoolpointivt:add')") +// public ResponseEntity create(@Validated @RequestBody CoolPointIvtDto dto) { +// coolpointivtService.create(dto); +// return new ResponseEntity<>(HttpStatus.CREATED); +// } +// +// @PutMapping +// @Log("修改冷却区库存") +// +// //@SaCheckPermission("@el.check('stIvtCoolpointivt:edit')") +// public ResponseEntity update(@Validated @RequestBody CoolPointIvtDto dto) { +// coolpointivtService.update(dto); +// return new ResponseEntity<>(HttpStatus.NO_CONTENT); +// } +// +// @Log("删除冷却区库存") +// +// //@SaCheckPermission("@el.check('stIvtCoolpointivt:del')") +// @DeleteMapping +// public ResponseEntity delete(@RequestBody Long[] ids) { +// coolpointivtService.deleteAll(ids); +// return new ResponseEntity<>(HttpStatus.OK); +// } +// +// @GetMapping("/coolRegionIOQueryAll") +// @Log("冷却区出入表") +// +// //@SaCheckPermission("@el.check('stIvtCoolpointivt:list')") +// public ResponseEntity coolRegionIOQueryAll(@RequestParam Map whereJson, Pageable page) { +// return new ResponseEntity<>(coolpointivtService.coolRegionIOQueryAll(whereJson, page), HttpStatus.OK); +// } +// +// @PostMapping("/uploadMes") +// @Log("手动回传MES") +// +// public ResponseEntity uploadMes(@RequestBody JSONObject form) { +// coolpointivtService.uploadMes(form); +// return new ResponseEntity<>(HttpStatus.OK); +// } +// +//} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/rest/CutPointIvtController.java b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/rest/CutPointIvtController.java index d9c8d89..b1f6a28 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/rest/CutPointIvtController.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/rest/CutPointIvtController.java @@ -35,6 +35,13 @@ public class CutPointIvtController { return new ResponseEntity<>(cutpointivtService.queryAll(whereJson, page), HttpStatus.OK); } + @GetMapping("/getResources") + @Log("查询分切机台") + + public ResponseEntity getResources() { + return new ResponseEntity<>(cutpointivtService.getResources(), HttpStatus.OK); + } + @PostMapping @Log("新增分切区点库存") diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/rest/SbPointIvtController.java b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/rest/SbPointIvtController.java index 6d6f6e6..340cf87 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/rest/SbPointIvtController.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/rest/SbPointIvtController.java @@ -1,64 +1,64 @@ -package org.nl.wms.pdm.ivt.rest; - - -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.nl.modules.logging.annotation.Log; -import org.nl.wms.pdm.ivt.service.SbPointIvtService; -import org.nl.wms.pdm.ivt.service.dto.SbPointIvtDto; -import org.springframework.data.domain.Pageable; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import java.util.Map; - -/** - * @author lyd - * @date 2022-10-10 - **/ -@RestController -@RequiredArgsConstructor - -@RequestMapping("/api/sbpointivt") -@Slf4j -public class SbPointIvtController { - - private final SbPointIvtService sbpointivtService; - - @GetMapping - @Log("查询生箔点位库存") - - //@SaCheckPermission("@el.check('sbpointivt:list')") - public ResponseEntity query(@RequestParam Map whereJson, Pageable page) { - return new ResponseEntity<>(sbpointivtService.queryAll(whereJson, page), HttpStatus.OK); - } - - @PostMapping - @Log("新增生箔点位库存") - - //@SaCheckPermission("@el.check('sbpointivt:add')") - public ResponseEntity create(@Validated @RequestBody SbPointIvtDto dto) { - sbpointivtService.create(dto); - return new ResponseEntity<>(HttpStatus.CREATED); - } - - @PutMapping - @Log("修改生箔点位库存") - - //@SaCheckPermission("@el.check('sbpointivt:edit')") - public ResponseEntity update(@Validated @RequestBody SbPointIvtDto dto) { - sbpointivtService.update(dto); - return new ResponseEntity<>(HttpStatus.NO_CONTENT); - } - - @Log("删除生箔点位库存") - - //@SaCheckPermission("@el.check('sbpointivt:del')") - @DeleteMapping - public ResponseEntity delete(@RequestBody Long[] ids) { - sbpointivtService.deleteAll(ids); - return new ResponseEntity<>(HttpStatus.OK); - } -} +//package org.nl.wms.pdm.ivt.rest; +// +// +//import lombok.RequiredArgsConstructor; +//import lombok.extern.slf4j.Slf4j; +//import org.nl.modules.logging.annotation.Log; +//import org.nl.wms.pdm.ivt.service.SbPointIvtService; +//import org.nl.wms.pdm.ivt.service.dto.SbPointIvtDto; +//import org.springframework.data.domain.Pageable; +//import org.springframework.http.HttpStatus; +//import org.springframework.http.ResponseEntity; +//import org.springframework.validation.annotation.Validated; +//import org.springframework.web.bind.annotation.*; +// +//import java.util.Map; +// +///** +// * @author lyd +// * @date 2022-10-10 +// **/ +//@RestController +//@RequiredArgsConstructor +// +//@RequestMapping("/api/sbpointivt") +//@Slf4j +//public class SbPointIvtController { +// +// private final SbPointIvtService sbpointivtService; +// +// @GetMapping +// @Log("查询生箔点位库存") +// +// //@SaCheckPermission("@el.check('sbpointivt:list')") +// public ResponseEntity query(@RequestParam Map whereJson, Pageable page) { +// return new ResponseEntity<>(sbpointivtService.queryAll(whereJson, page), HttpStatus.OK); +// } +// +// @PostMapping +// @Log("新增生箔点位库存") +// +// //@SaCheckPermission("@el.check('sbpointivt:add')") +// public ResponseEntity create(@Validated @RequestBody SbPointIvtDto dto) { +// sbpointivtService.create(dto); +// return new ResponseEntity<>(HttpStatus.CREATED); +// } +// +// @PutMapping +// @Log("修改生箔点位库存") +// +// //@SaCheckPermission("@el.check('sbpointivt:edit')") +// public ResponseEntity update(@Validated @RequestBody SbPointIvtDto dto) { +// sbpointivtService.update(dto); +// return new ResponseEntity<>(HttpStatus.NO_CONTENT); +// } +// +// @Log("删除生箔点位库存") +// +// //@SaCheckPermission("@el.check('sbpointivt:del')") +// @DeleteMapping +// public ResponseEntity delete(@RequestBody Long[] ids) { +// sbpointivtService.deleteAll(ids); +// return new ResponseEntity<>(HttpStatus.OK); +// } +//} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/service/CoolPointIvtService.java b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/service/CoolPointIvtService.java index a82690b..64395d3 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/service/CoolPointIvtService.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/service/CoolPointIvtService.java @@ -1,82 +1,82 @@ -package org.nl.wms.pdm.ivt.service; - -import com.alibaba.fastjson.JSONObject; -import org.nl.wms.pdm.ivt.service.dto.CoolPointIvtDto; -import org.springframework.data.domain.Pageable; - -import java.util.List; -import java.util.Map; - -/** - * @author lyd - * @description 服务接口 - * @date 2022-10-08 - **/ -public interface CoolPointIvtService { - - /** - * 查询数据分页 - * - * @param whereJson 条件 - * @param page 分页参数 - * @return Map - */ - Map queryAll(Map whereJson, Pageable page); - - /** - * 查询所有数据不分页 - * - * @param whereJson 条件参数 - * @return List - */ - List queryAll(Map whereJson); - - /** - * 根据ID查询 - * - * @param ivt_id ID - * @return StIvtCoolpointivt - */ - CoolPointIvtDto findById(Long ivt_id); - - /** - * 根据编码查询 - * - * @param code code - * @return StIvtCoolpointivt - */ - CoolPointIvtDto findByCode(String code); - - - /** - * 创建 - * - * @param dto / - */ - void create(CoolPointIvtDto dto); - - /** - * 编辑 - * - * @param dto / - */ - void update(CoolPointIvtDto dto); - - /** - * 多选删除 - * - * @param ids / - */ - void deleteAll(Long[] ids); - - /** - * 冷却区出入分页查询 - * - * @param whereJson - * @param page - * @return - */ - Map coolRegionIOQueryAll(Map whereJson, Pageable page); - - void uploadMes(JSONObject form); -} +//package org.nl.wms.pdm.ivt.service; +// +//import com.alibaba.fastjson.JSONObject; +//import org.nl.wms.pdm.ivt.service.dto.CoolPointIvtDto; +//import org.springframework.data.domain.Pageable; +// +//import java.util.List; +//import java.util.Map; +// +///** +// * @author lyd +// * @description 服务接口 +// * @date 2022-10-08 +// **/ +//public interface CoolPointIvtService { +// +// /** +// * 查询数据分页 +// * +// * @param whereJson 条件 +// * @param page 分页参数 +// * @return Map +// */ +// Map queryAll(Map whereJson, Pageable page); +// +// /** +// * 查询所有数据不分页 +// * +// * @param whereJson 条件参数 +// * @return List +// */ +// List queryAll(Map whereJson); +// +// /** +// * 根据ID查询 +// * +// * @param ivt_id ID +// * @return StIvtCoolpointivt +// */ +// CoolPointIvtDto findById(Long ivt_id); +// +// /** +// * 根据编码查询 +// * +// * @param code code +// * @return StIvtCoolpointivt +// */ +// CoolPointIvtDto findByCode(String code); +// +// +// /** +// * 创建 +// * +// * @param dto / +// */ +// void create(CoolPointIvtDto dto); +// +// /** +// * 编辑 +// * +// * @param dto / +// */ +// void update(CoolPointIvtDto dto); +// +// /** +// * 多选删除 +// * +// * @param ids / +// */ +// void deleteAll(Long[] ids); +// +// /** +// * 冷却区出入分页查询 +// * +// * @param whereJson +// * @param page +// * @return +// */ +// Map coolRegionIOQueryAll(Map whereJson, Pageable page); +// +// void uploadMes(JSONObject form); +//} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/service/CutPointIvtService.java b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/service/CutPointIvtService.java index 5e967b2..b558cb7 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/service/CutPointIvtService.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/service/CutPointIvtService.java @@ -67,4 +67,6 @@ public interface CutPointIvtService { * @param ids / */ void deleteAll(Long[] ids); + + List getResources(); } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/service/SbPointIvtService.java b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/service/SbPointIvtService.java index e07676b..6ba516f 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/service/SbPointIvtService.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/service/SbPointIvtService.java @@ -1,70 +1,70 @@ -package org.nl.wms.pdm.ivt.service; - -import org.nl.wms.pdm.ivt.service.dto.SbPointIvtDto; -import org.springframework.data.domain.Pageable; - -import java.util.List; -import java.util.Map; - -/** - * @author lyd - * @description 服务接口 - * @date 2022-10-10 - **/ -public interface SbPointIvtService { - - /** - * 查询数据分页 - * - * @param whereJson 条件 - * @param page 分页参数 - * @return Map - */ - Map queryAll(Map whereJson, Pageable page); - - /** - * 查询所有数据不分页 - * - * @param whereJson 条件参数 - * @return List - */ - List queryAll(Map whereJson); - - /** - * 根据ID查询 - * - * @param point_id ID - * @return Sbpointivt - */ - SbPointIvtDto findById(Long point_id); - - /** - * 根据编码查询 - * - * @param code code - * @return Sbpointivt - */ - SbPointIvtDto findByCode(String code); - - - /** - * 创建 - * - * @param dto / - */ - void create(SbPointIvtDto dto); - - /** - * 编辑 - * - * @param dto / - */ - void update(SbPointIvtDto dto); - - /** - * 多选删除 - * - * @param ids / - */ - void deleteAll(Long[] ids); -} \ No newline at end of file +//package org.nl.wms.pdm.ivt.service; +// +//import org.nl.wms.pdm.ivt.service.dto.SbPointIvtDto; +//import org.springframework.data.domain.Pageable; +// +//import java.util.List; +//import java.util.Map; +// +///** +// * @author lyd +// * @description 服务接口 +// * @date 2022-10-10 +// **/ +//public interface SbPointIvtService { +// +// /** +// * 查询数据分页 +// * +// * @param whereJson 条件 +// * @param page 分页参数 +// * @return Map +// */ +// Map queryAll(Map whereJson, Pageable page); +// +// /** +// * 查询所有数据不分页 +// * +// * @param whereJson 条件参数 +// * @return List +// */ +// List queryAll(Map whereJson); +// +// /** +// * 根据ID查询 +// * +// * @param point_id ID +// * @return Sbpointivt +// */ +// SbPointIvtDto findById(Long point_id); +// +// /** +// * 根据编码查询 +// * +// * @param code code +// * @return Sbpointivt +// */ +// SbPointIvtDto findByCode(String code); +// +// +// /** +// * 创建 +// * +// * @param dto / +// */ +// void create(SbPointIvtDto dto); +// +// /** +// * 编辑 +// * +// * @param dto / +// */ +// void update(SbPointIvtDto dto); +// +// /** +// * 多选删除 +// * +// * @param ids / +// */ +// void deleteAll(Long[] ids); +//} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/service/dto/CutPointIvtDto.java b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/service/dto/CutPointIvtDto.java index f09cd87..de34462 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/service/dto/CutPointIvtDto.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/service/dto/CutPointIvtDto.java @@ -87,6 +87,11 @@ public class CutPointIvtDto implements Serializable { */ private String remark; + /** + * 备注 + */ + private String ext_code; + /** * 创建人 */ diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/service/impl/CoolPointIvtServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/service/impl/CoolPointIvtServiceImpl.java index 914870d..5a1aa8d 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/service/impl/CoolPointIvtServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/service/impl/CoolPointIvtServiceImpl.java @@ -1,221 +1,221 @@ -package org.nl.wms.pdm.ivt.service.impl; - - -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.map.MapUtil; -import cn.hutool.core.util.IdUtil; -import cn.hutool.core.util.ObjectUtil; -import cn.hutool.core.util.StrUtil; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.nl.common.utils.SecurityUtils; -import org.nl.modules.common.exception.BadRequestException; -import org.nl.modules.wql.WQL; -import org.nl.modules.wql.core.bean.WQLObject; -import org.nl.modules.wql.util.SpringContextHolder; -import org.nl.modules.wql.util.WqlUtil; -import org.nl.system.service.param.impl.SysParamServiceImpl; -import org.nl.wms.basedata.st.service.impl.UserAreaServiceImpl; -import org.nl.wms.ext.mes.service.LmsToMesService; -import org.nl.wms.ext.mes.service.impl.LmsToMesServiceImpl; -import org.nl.wms.pdm.ivt.service.CoolPointIvtService; -import org.nl.wms.pdm.ivt.service.dto.CoolPointIvtDto; -import org.springframework.data.domain.Pageable; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author lyd - * @description 服务实现 - * @date 2022-10-08 - **/ -@Service -@RequiredArgsConstructor -@Slf4j -public class CoolPointIvtServiceImpl implements CoolPointIvtService { - - @Override - public Map queryAll(Map whereJson, Pageable page) { - - //获取人员对应的区域 - UserAreaServiceImpl userAreaService = new UserAreaServiceImpl(); - String in_area_id = userAreaService.getInArea(); - HashMap map = new HashMap(); - map.put("flag", "1"); - if (whereJson.get("point_code") != null) { - map.put("point_code", "%" + whereJson.get("point_code") + "%"); - } - if (whereJson.get("container_name") != null) { - map.put("container_name", "%" + whereJson.get("container_name") + "%"); - } - map.put("full_point_status", whereJson.get("full_point_status")); - map.put("empty_point_status", whereJson.get("empty_point_status")); - map.put("cool_ivt_status", whereJson.get("cool_ivt_status")); - map.put("product_area", whereJson.get("product_area")); - map.put("is_used", whereJson.get("is_used")); - map.put("begin_time", whereJson.get("begin_time")); - map.put("end_time", whereJson.get("end_time")); - map.put("point_location", whereJson.get("point_location")); - if (ObjectUtil.isNotEmpty(in_area_id)) { - map.put("in_area_id", in_area_id); - } - JSONObject json = WQL.getWO("ST_IVT_COOLPOINTIVT").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "product_area,point_code"); - return json; - } - - @Override - public List queryAll(Map whereJson) { - WQLObject wo = WQLObject.getWQLObject("st_ivt_coolpointivt"); - JSONArray arr = wo.query().getResultJSONArray(0); - if (ObjectUtil.isNotEmpty(arr)) { - return arr.toJavaList(CoolPointIvtDto.class); - } - return null; - } - - @Override - public CoolPointIvtDto findById(Long ivt_id) { - WQLObject wo = WQLObject.getWQLObject("st_ivt_coolpointivt"); - JSONObject json = wo.query("ivt_id = '" + ivt_id + "'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(json)) { - return json.toJavaObject(CoolPointIvtDto.class); - } - return null; - } - - @Override - public CoolPointIvtDto findByCode(String code) { - WQLObject wo = WQLObject.getWQLObject("st_ivt_coolpointivt"); - JSONObject json = wo.query("code ='" + code + "'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(json)) { - return json.toJavaObject(CoolPointIvtDto.class); - } - return null; - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void create(CoolPointIvtDto dto) { - String currentUserId = SecurityUtils.getCurrentUserId(); - String nickName = SecurityUtils.getCurrentNickName(); - String now = DateUtil.now(); - - dto.setIvt_id(IdUtil.getSnowflake(1, 1).nextId()); - dto.setCreate_id(currentUserId); - dto.setCreate_name(nickName); - dto.setUpdate_optid(currentUserId); - dto.setUpdate_optname(nickName); - dto.setUpdate_time(now); - dto.setCreate_time(now); - - WQLObject wo = WQLObject.getWQLObject("st_ivt_coolpointivt"); - JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); - wo.insert(json); - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void update(CoolPointIvtDto dto) { - CoolPointIvtDto entity = this.findById(dto.getIvt_id()); - if (entity == null) { - throw new BadRequestException("被删除或无权限,操作失败!"); - } - - String currentUserId = SecurityUtils.getCurrentUserId(); - String nickName = SecurityUtils.getCurrentNickName(); - - String now = DateUtil.now(); - dto.setUpdate_time(now); - dto.setUpdate_optid(currentUserId); - dto.setUpdate_optname(nickName); - - WQLObject wo = WQLObject.getWQLObject("st_ivt_coolpointivt"); - 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(); - String now = DateUtil.now(); - - WQLObject wo = WQLObject.getWQLObject("st_ivt_coolpointivt"); - for (Long ivt_id : ids) { - JSONObject param = new JSONObject(); - param.put("ivt_id", String.valueOf(ivt_id)); - param.put("is_delete", "1"); - param.put("update_optid", currentUserId); - param.put("update_optname", nickName); - param.put("update_time", now); - wo.update(param); - } - } - - /** - * 冷却区出入分页查询 - * - * @param whereJson - * @param page - * @return - */ - @Override - public Map coolRegionIOQueryAll(Map whereJson, Pageable page) { - String start_point_code = MapUtil.getStr(whereJson, "start_point_code"); - String end_point_code = MapUtil.getStr(whereJson, "end_point_code"); - String pcsn = MapUtil.getStr(whereJson, "pcsn"); - String vehicle_code = MapUtil.getStr(whereJson, "vehicle_code"); - - JSONObject map = new JSONObject(); - map.put("flag", "2"); - map.put("begin_time", whereJson.get("begin_time")); - map.put("end_time", whereJson.get("end_time")); - if (ObjectUtil.isNotEmpty(start_point_code)) { - map.put("start_point_code", "%" + start_point_code + "%"); - } - if (ObjectUtil.isNotEmpty(end_point_code)) { - map.put("end_point_code", "%" + end_point_code + "%"); - } - if (ObjectUtil.isNotEmpty(pcsn)) { - map.put("pcsn", "%" + pcsn + "%"); - } - if (ObjectUtil.isNotEmpty(vehicle_code)) { - map.put("vehicle_code", "%" + vehicle_code + "%"); - } - - JSONObject json = WQL.getWO("ST_IVT_COOLPOINTIVT").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "update_time desc"); - return json; - } - - @Override - public void uploadMes(JSONObject form) { - //调用回传MES的半成品入库接口 - // 将入冷却信息发送给mes - JSONObject param = new JSONObject(); - String userName = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("MES_USERNAME").getValue(); - String passWord = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("MES_PASSWORD").getValue(); - String container_name = form.getString("container_name"); - if (StrUtil.isEmpty(container_name)) { - throw new BadRequestException("母卷号不能为空!"); - } - param.put("iContainerName", container_name); - param.put("iArrivalTime", DateUtil.now()); - param.put("iWarehouse", 2); - param.put("UserName", userName); - param.put("PassWord", passWord); - - //判断该接口是否需要回传 - JSONObject back_jo = WQLObject.getWQLObject("MD_PB_InterfaceBack").query("interface_name = 'momRollSemiFGInboundComplete'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(back_jo) && "1".equals(back_jo.getString("is_back"))) { - SpringContextHolder.getBean(LmsToMesService.class).momRollSemiFGInboundComplete(param); - } - } -} +//package org.nl.wms.pdm.ivt.service.impl; +// +// +//import cn.hutool.core.date.DateUtil; +//import cn.hutool.core.map.MapUtil; +//import cn.hutool.core.util.IdUtil; +//import cn.hutool.core.util.ObjectUtil; +//import cn.hutool.core.util.StrUtil; +//import com.alibaba.fastjson.JSON; +//import com.alibaba.fastjson.JSONArray; +//import com.alibaba.fastjson.JSONObject; +//import lombok.RequiredArgsConstructor; +//import lombok.extern.slf4j.Slf4j; +//import org.nl.common.utils.SecurityUtils; +//import org.nl.modules.common.exception.BadRequestException; +//import org.nl.modules.wql.WQL; +//import org.nl.modules.wql.core.bean.WQLObject; +//import org.nl.modules.wql.util.SpringContextHolder; +//import org.nl.modules.wql.util.WqlUtil; +//import org.nl.system.service.param.impl.SysParamServiceImpl; +//import org.nl.wms.basedata.st.service.impl.UserAreaServiceImpl; +//import org.nl.wms.ext.mes.service.LmsToMesService; +//import org.nl.wms.ext.mes.service.impl.LmsToMesServiceImpl; +//import org.nl.wms.pdm.ivt.service.CoolPointIvtService; +//import org.nl.wms.pdm.ivt.service.dto.CoolPointIvtDto; +//import org.springframework.data.domain.Pageable; +//import org.springframework.stereotype.Service; +//import org.springframework.transaction.annotation.Transactional; +// +//import java.util.HashMap; +//import java.util.List; +//import java.util.Map; +// +///** +// * @author lyd +// * @description 服务实现 +// * @date 2022-10-08 +// **/ +//@Service +//@RequiredArgsConstructor +//@Slf4j +//public class CoolPointIvtServiceImpl implements CoolPointIvtService { +// +// @Override +// public Map queryAll(Map whereJson, Pageable page) { +// +// //获取人员对应的区域 +// UserAreaServiceImpl userAreaService = new UserAreaServiceImpl(); +// String in_area_id = userAreaService.getInArea(); +// HashMap map = new HashMap(); +// map.put("flag", "1"); +// if (whereJson.get("point_code") != null) { +// map.put("point_code", "%" + whereJson.get("point_code") + "%"); +// } +// if (whereJson.get("container_name") != null) { +// map.put("container_name", "%" + whereJson.get("container_name") + "%"); +// } +// map.put("full_point_status", whereJson.get("full_point_status")); +// map.put("empty_point_status", whereJson.get("empty_point_status")); +// map.put("cool_ivt_status", whereJson.get("cool_ivt_status")); +// map.put("product_area", whereJson.get("product_area")); +// map.put("is_used", whereJson.get("is_used")); +// map.put("begin_time", whereJson.get("begin_time")); +// map.put("end_time", whereJson.get("end_time")); +// map.put("point_location", whereJson.get("point_location")); +// if (ObjectUtil.isNotEmpty(in_area_id)) { +// map.put("in_area_id", in_area_id); +// } +// JSONObject json = WQL.getWO("ST_IVT_COOLPOINTIVT").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "product_area,point_code"); +// return json; +// } +// +// @Override +// public List queryAll(Map whereJson) { +// WQLObject wo = WQLObject.getWQLObject("st_ivt_coolpointivt"); +// JSONArray arr = wo.query().getResultJSONArray(0); +// if (ObjectUtil.isNotEmpty(arr)) { +// return arr.toJavaList(CoolPointIvtDto.class); +// } +// return null; +// } +// +// @Override +// public CoolPointIvtDto findById(Long ivt_id) { +// WQLObject wo = WQLObject.getWQLObject("st_ivt_coolpointivt"); +// JSONObject json = wo.query("ivt_id = '" + ivt_id + "'").uniqueResult(0); +// if (ObjectUtil.isNotEmpty(json)) { +// return json.toJavaObject(CoolPointIvtDto.class); +// } +// return null; +// } +// +// @Override +// public CoolPointIvtDto findByCode(String code) { +// WQLObject wo = WQLObject.getWQLObject("st_ivt_coolpointivt"); +// JSONObject json = wo.query("code ='" + code + "'").uniqueResult(0); +// if (ObjectUtil.isNotEmpty(json)) { +// return json.toJavaObject(CoolPointIvtDto.class); +// } +// return null; +// } +// +// @Override +// @Transactional(rollbackFor = Exception.class) +// public void create(CoolPointIvtDto dto) { +// String currentUserId = SecurityUtils.getCurrentUserId(); +// String nickName = SecurityUtils.getCurrentNickName(); +// String now = DateUtil.now(); +// +// dto.setIvt_id(IdUtil.getSnowflake(1, 1).nextId()); +// dto.setCreate_id(currentUserId); +// dto.setCreate_name(nickName); +// dto.setUpdate_optid(currentUserId); +// dto.setUpdate_optname(nickName); +// dto.setUpdate_time(now); +// dto.setCreate_time(now); +// +// WQLObject wo = WQLObject.getWQLObject("st_ivt_coolpointivt"); +// JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); +// wo.insert(json); +// } +// +// @Override +// @Transactional(rollbackFor = Exception.class) +// public void update(CoolPointIvtDto dto) { +// CoolPointIvtDto entity = this.findById(dto.getIvt_id()); +// if (entity == null) { +// throw new BadRequestException("被删除或无权限,操作失败!"); +// } +// +// String currentUserId = SecurityUtils.getCurrentUserId(); +// String nickName = SecurityUtils.getCurrentNickName(); +// +// String now = DateUtil.now(); +// dto.setUpdate_time(now); +// dto.setUpdate_optid(currentUserId); +// dto.setUpdate_optname(nickName); +// +// WQLObject wo = WQLObject.getWQLObject("st_ivt_coolpointivt"); +// 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(); +// String now = DateUtil.now(); +// +// WQLObject wo = WQLObject.getWQLObject("st_ivt_coolpointivt"); +// for (Long ivt_id : ids) { +// JSONObject param = new JSONObject(); +// param.put("ivt_id", String.valueOf(ivt_id)); +// param.put("is_delete", "1"); +// param.put("update_optid", currentUserId); +// param.put("update_optname", nickName); +// param.put("update_time", now); +// wo.update(param); +// } +// } +// +// /** +// * 冷却区出入分页查询 +// * +// * @param whereJson +// * @param page +// * @return +// */ +// @Override +// public Map coolRegionIOQueryAll(Map whereJson, Pageable page) { +// String start_point_code = MapUtil.getStr(whereJson, "start_point_code"); +// String end_point_code = MapUtil.getStr(whereJson, "end_point_code"); +// String pcsn = MapUtil.getStr(whereJson, "pcsn"); +// String vehicle_code = MapUtil.getStr(whereJson, "vehicle_code"); +// +// JSONObject map = new JSONObject(); +// map.put("flag", "2"); +// map.put("begin_time", whereJson.get("begin_time")); +// map.put("end_time", whereJson.get("end_time")); +// if (ObjectUtil.isNotEmpty(start_point_code)) { +// map.put("start_point_code", "%" + start_point_code + "%"); +// } +// if (ObjectUtil.isNotEmpty(end_point_code)) { +// map.put("end_point_code", "%" + end_point_code + "%"); +// } +// if (ObjectUtil.isNotEmpty(pcsn)) { +// map.put("pcsn", "%" + pcsn + "%"); +// } +// if (ObjectUtil.isNotEmpty(vehicle_code)) { +// map.put("vehicle_code", "%" + vehicle_code + "%"); +// } +// +// JSONObject json = WQL.getWO("ST_IVT_COOLPOINTIVT").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "update_time desc"); +// return json; +// } +// +// @Override +// public void uploadMes(JSONObject form) { +// //调用回传MES的半成品入库接口 +// // 将入冷却信息发送给mes +// JSONObject param = new JSONObject(); +// String userName = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("MES_USERNAME").getValue(); +// String passWord = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("MES_PASSWORD").getValue(); +// String container_name = form.getString("container_name"); +// if (StrUtil.isEmpty(container_name)) { +// throw new BadRequestException("母卷号不能为空!"); +// } +// param.put("iContainerName", container_name); +// param.put("iArrivalTime", DateUtil.now()); +// param.put("iWarehouse", 2); +// param.put("UserName", userName); +// param.put("PassWord", passWord); +// +// //判断该接口是否需要回传 +// JSONObject back_jo = WQLObject.getWQLObject("MD_PB_InterfaceBack").query("interface_name = 'momRollSemiFGInboundComplete'").uniqueResult(0); +// if (ObjectUtil.isNotEmpty(back_jo) && "1".equals(back_jo.getString("is_back"))) { +// SpringContextHolder.getBean(LmsToMesService.class).momRollSemiFGInboundComplete(param); +// } +// } +//} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/service/impl/CutPointIvtServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/service/impl/CutPointIvtServiceImpl.java index 526b58f..bc3e2aa 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/service/impl/CutPointIvtServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/service/impl/CutPointIvtServiceImpl.java @@ -21,6 +21,7 @@ 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.List; import java.util.Map; @@ -146,4 +147,19 @@ public class CutPointIvtServiceImpl implements CutPointIvtService { } } + @Override + public List getResources() { + List resources = new ArrayList<>(); + List cutPointIvts = new ArrayList<>(); + WQLObject wo = WQLObject.getWQLObject("st_ivt_cutpointivt"); + JSONArray arr = wo.query().getResultJSONArray(0); + if (ObjectUtil.isNotEmpty(arr)) { + cutPointIvts = arr.toJavaList(CutPointIvtDto.class); + for (CutPointIvtDto cutPointIvt : cutPointIvts) { + resources.add(cutPointIvt.getExt_code()); + } + } + return resources; + } + } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/service/impl/SbPointIvtServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/service/impl/SbPointIvtServiceImpl.java index edc370d..b835bf8 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/service/impl/SbPointIvtServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/service/impl/SbPointIvtServiceImpl.java @@ -1,146 +1,146 @@ -package org.nl.wms.pdm.ivt.service.impl; - - -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.IdUtil; -import cn.hutool.core.util.ObjectUtil; -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.wql.WQL; -import org.nl.modules.wql.core.bean.WQLObject; -import org.nl.modules.wql.util.WqlUtil; -import org.nl.wms.basedata.st.service.impl.UserAreaServiceImpl; -import org.nl.wms.pdm.ivt.service.SbPointIvtService; -import org.nl.wms.pdm.ivt.service.dto.SbPointIvtDto; -import org.springframework.data.domain.Pageable; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.List; -import java.util.Map; - -/** - * @author lyd - * @description 服务实现 - * @date 2022-10-10 - **/ -@Service -@RequiredArgsConstructor -@Slf4j -public class SbPointIvtServiceImpl implements SbPointIvtService { - - @Override - public Map queryAll(Map whereJson, Pageable page) { - //获取人员对应的区域 - UserAreaServiceImpl userAreaService = new UserAreaServiceImpl(); - String in_area_id = userAreaService.getInArea(); - JSONObject map = new JSONObject(); - map.put("flag", "1"); - if (!ObjectUtil.isNull(whereJson.get("point_code"))) { - map.put("point_code", "%" + whereJson.get("point_code") + "%"); - } - map.put("product_area", whereJson.get("product_area")); - map.put("is_used", whereJson.get("is_used")); - map.put("mes_used", whereJson.get("mes_used")); - if (ObjectUtil.isNotEmpty(in_area_id)) { - map.put("in_area_id", in_area_id); - } - JSONObject json = WQL.getWO("ST_IVT_SBPOINTIVT").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "product_area,point_code"); - return json; - } - - @Override - public List queryAll(Map whereJson) { - WQLObject wo = WQLObject.getWQLObject("st_ivt_sbpointivt"); - JSONArray arr = wo.query().getResultJSONArray(0); - if (ObjectUtil.isNotEmpty(arr)) { - return arr.toJavaList(SbPointIvtDto.class); - } - return null; - } - - @Override - public SbPointIvtDto findById(Long point_id) { - WQLObject wo = WQLObject.getWQLObject("st_ivt_sbpointivt"); - JSONObject json = wo.query("point_id = '" + point_id + "'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(json)) { - return json.toJavaObject(SbPointIvtDto.class); - } - return null; - } - - @Override - public SbPointIvtDto findByCode(String code) { - WQLObject wo = WQLObject.getWQLObject("st_ivt_sbpointivt"); - JSONObject json = wo.query("code ='" + code + "'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(json)) { - return json.toJavaObject(SbPointIvtDto.class); - } - return null; - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void create(SbPointIvtDto dto) { - String currentUserId = SecurityUtils.getCurrentUserId(); - String nickName = SecurityUtils.getCurrentNickName(); - String now = DateUtil.now(); - - dto.setPoint_id(IdUtil.getSnowflake(1, 1).nextId()); - dto.setCreate_id(currentUserId); - dto.setCreate_name(nickName); - dto.setUpdate_optid(currentUserId); - dto.setUpdate_optname(nickName); - dto.setUpdate_time(now); - dto.setCreate_time(now); - - WQLObject wo = WQLObject.getWQLObject("st_ivt_sbpointivt"); - JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); - wo.insert(json); - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void update(SbPointIvtDto dto) { - SbPointIvtDto entity = this.findById(dto.getPoint_id()); - if (entity == null) { - throw new BadRequestException("被删除或无权限,操作失败!"); - } - - String currentUserId = SecurityUtils.getCurrentUserId(); - String nickName = SecurityUtils.getCurrentNickName(); - - String now = DateUtil.now(); - dto.setUpdate_time(now); - dto.setUpdate_optid(currentUserId); - dto.setUpdate_optname(nickName); - - WQLObject wo = WQLObject.getWQLObject("st_ivt_sbpointivt"); - 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(); - String now = DateUtil.now(); - - WQLObject wo = WQLObject.getWQLObject("st_ivt_sbpointivt"); - for (Long point_id : ids) { - JSONObject param = new JSONObject(); - param.put("point_id", String.valueOf(point_id)); - param.put("is_delete", "1"); - param.put("update_optid", currentUserId); - param.put("update_optname", nickName); - param.put("update_time", now); - wo.update(param); - } - } -} +//package org.nl.wms.pdm.ivt.service.impl; +// +// +//import cn.hutool.core.date.DateUtil; +//import cn.hutool.core.util.IdUtil; +//import cn.hutool.core.util.ObjectUtil; +//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.wql.WQL; +//import org.nl.modules.wql.core.bean.WQLObject; +//import org.nl.modules.wql.util.WqlUtil; +//import org.nl.wms.basedata.st.service.impl.UserAreaServiceImpl; +//import org.nl.wms.pdm.ivt.service.SbPointIvtService; +//import org.nl.wms.pdm.ivt.service.dto.SbPointIvtDto; +//import org.springframework.data.domain.Pageable; +//import org.springframework.stereotype.Service; +//import org.springframework.transaction.annotation.Transactional; +// +//import java.util.List; +//import java.util.Map; +// +///** +// * @author lyd +// * @description 服务实现 +// * @date 2022-10-10 +// **/ +//@Service +//@RequiredArgsConstructor +//@Slf4j +//public class SbPointIvtServiceImpl implements SbPointIvtService { +// +// @Override +// public Map queryAll(Map whereJson, Pageable page) { +// //获取人员对应的区域 +// UserAreaServiceImpl userAreaService = new UserAreaServiceImpl(); +// String in_area_id = userAreaService.getInArea(); +// JSONObject map = new JSONObject(); +// map.put("flag", "1"); +// if (!ObjectUtil.isNull(whereJson.get("point_code"))) { +// map.put("point_code", "%" + whereJson.get("point_code") + "%"); +// } +// map.put("product_area", whereJson.get("product_area")); +// map.put("is_used", whereJson.get("is_used")); +// map.put("mes_used", whereJson.get("mes_used")); +// if (ObjectUtil.isNotEmpty(in_area_id)) { +// map.put("in_area_id", in_area_id); +// } +// JSONObject json = WQL.getWO("ST_IVT_SBPOINTIVT").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "product_area,point_code"); +// return json; +// } +// +// @Override +// public List queryAll(Map whereJson) { +// WQLObject wo = WQLObject.getWQLObject("st_ivt_sbpointivt"); +// JSONArray arr = wo.query().getResultJSONArray(0); +// if (ObjectUtil.isNotEmpty(arr)) { +// return arr.toJavaList(SbPointIvtDto.class); +// } +// return null; +// } +// +// @Override +// public SbPointIvtDto findById(Long point_id) { +// WQLObject wo = WQLObject.getWQLObject("st_ivt_sbpointivt"); +// JSONObject json = wo.query("point_id = '" + point_id + "'").uniqueResult(0); +// if (ObjectUtil.isNotEmpty(json)) { +// return json.toJavaObject(SbPointIvtDto.class); +// } +// return null; +// } +// +// @Override +// public SbPointIvtDto findByCode(String code) { +// WQLObject wo = WQLObject.getWQLObject("st_ivt_sbpointivt"); +// JSONObject json = wo.query("code ='" + code + "'").uniqueResult(0); +// if (ObjectUtil.isNotEmpty(json)) { +// return json.toJavaObject(SbPointIvtDto.class); +// } +// return null; +// } +// +// @Override +// @Transactional(rollbackFor = Exception.class) +// public void create(SbPointIvtDto dto) { +// String currentUserId = SecurityUtils.getCurrentUserId(); +// String nickName = SecurityUtils.getCurrentNickName(); +// String now = DateUtil.now(); +// +// dto.setPoint_id(IdUtil.getSnowflake(1, 1).nextId()); +// dto.setCreate_id(currentUserId); +// dto.setCreate_name(nickName); +// dto.setUpdate_optid(currentUserId); +// dto.setUpdate_optname(nickName); +// dto.setUpdate_time(now); +// dto.setCreate_time(now); +// +// WQLObject wo = WQLObject.getWQLObject("st_ivt_sbpointivt"); +// JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); +// wo.insert(json); +// } +// +// @Override +// @Transactional(rollbackFor = Exception.class) +// public void update(SbPointIvtDto dto) { +// SbPointIvtDto entity = this.findById(dto.getPoint_id()); +// if (entity == null) { +// throw new BadRequestException("被删除或无权限,操作失败!"); +// } +// +// String currentUserId = SecurityUtils.getCurrentUserId(); +// String nickName = SecurityUtils.getCurrentNickName(); +// +// String now = DateUtil.now(); +// dto.setUpdate_time(now); +// dto.setUpdate_optid(currentUserId); +// dto.setUpdate_optname(nickName); +// +// WQLObject wo = WQLObject.getWQLObject("st_ivt_sbpointivt"); +// 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(); +// String now = DateUtil.now(); +// +// WQLObject wo = WQLObject.getWQLObject("st_ivt_sbpointivt"); +// for (Long point_id : ids) { +// JSONObject param = new JSONObject(); +// param.put("point_id", String.valueOf(point_id)); +// param.put("is_delete", "1"); +// param.put("update_optid", currentUserId); +// param.put("update_optname", nickName); +// param.put("update_time", now); +// wo.update(param); +// } +// } +//} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/controller/CoolPointIvtController.java b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/controller/CoolPointIvtController.java new file mode 100644 index 0000000..32a854f --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/controller/CoolPointIvtController.java @@ -0,0 +1,80 @@ +package org.nl.wms.pdm.rawfoilworkorder.controller; + +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.logging.annotation.Log; +import org.nl.wms.pdm.rawfoilworkorder.service.CoolPointIvtService; +import org.nl.wms.pdm.rawfoilworkorder.service.dao.CoolPointIvt; +import org.nl.wms.pdm.rawfoilworkorder.service.dto.CoolPointIvtDto; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +@RestController +@RequiredArgsConstructor + +@RequestMapping("/api/stIvtCoolpointivt") +@Slf4j +public class CoolPointIvtController { + + @Autowired + public CoolPointIvtService coolPointIvtService; + + @GetMapping + @Log("查询冷却区库存") + + //@SaCheckPermission("@el.check('stIvtCoolpointivt:list')") + public ResponseEntity query(@RequestParam Map whereJson, Pageable page) { + return new ResponseEntity<>(coolPointIvtService.queryAll(whereJson, page), HttpStatus.OK); + } + + @PostMapping + @Log("新增冷却区库存") + + //@SaCheckPermission("@el.check('stIvtCoolpointivt:add')") + public ResponseEntity create(@Validated @RequestBody CoolPointIvt dto) { + coolPointIvtService.create(dto); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改冷却区库存") + + //@SaCheckPermission("@el.check('stIvtCoolpointivt:edit')") + public ResponseEntity update(@Validated @RequestBody CoolPointIvt dto) { + coolPointIvtService.update(dto); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除冷却区库存") + + //@SaCheckPermission("@el.check('stIvtCoolpointivt:del')") + @DeleteMapping + public ResponseEntity delete(@RequestBody Long[] ids) { + coolPointIvtService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + @GetMapping("/coolRegionIOQueryAll") + @Log("冷却区出入表") + + //@SaCheckPermission("@el.check('stIvtCoolpointivt:list')") + public ResponseEntity coolRegionIOQueryAll(@RequestParam Map whereJson, Pageable page) { + return new ResponseEntity<>(coolPointIvtService.coolRegionIOQueryAll(whereJson, page), HttpStatus.OK); + } + + @PostMapping("/uploadMes") + @Log("手动回传MES") + + public ResponseEntity uploadMes(@RequestBody JSONObject form) { + coolPointIvtService.uploadMes(form); + return new ResponseEntity<>(HttpStatus.OK); + } + +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/controller/RawfoilWorkOrderController.java b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/controller/RawfoilWorkOrderController.java new file mode 100644 index 0000000..cc1afd6 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/controller/RawfoilWorkOrderController.java @@ -0,0 +1,84 @@ +package org.nl.wms.pdm.rawfoilworkorder.controller; + + +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.domain.query.PageQuery; +import org.nl.modules.logging.annotation.Log; +import org.nl.wms.pdm.rawfoilworkorder.service.RawfoilWorkOrderService; +import org.nl.wms.pdm.rawfoilworkorder.service.dao.RawfoilWorkOrder; +import org.nl.wms.pdm.rawfoilworkorder.service.dto.RawfoilWorkOrderDto; +import org.nl.wms.pdm.service.dto.RawfoilworkorderDto; +import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +/** + * @author liuxy + * @date 2022-10-08 + **/ +@RestController +@RequiredArgsConstructor + +@RequestMapping("/api/rawfoilworkorder") +@Slf4j +public class RawfoilWorkOrderController { + + private final RawfoilWorkOrderService rawfoilworkorderService; + + @GetMapping + @Log("查询生箔工序工单") + + //@SaCheckPermission("@el.check('rawfoilworkorder:list')") + public ResponseEntity query(@RequestParam Map whereJson, PageQuery page) { + return new ResponseEntity<>(rawfoilworkorderService.queryAll(whereJson, page), HttpStatus.OK); + } + + @PostMapping + @Log("新增生箔工序工单") + + //@SaCheckPermission("@el.check('rawfoilworkorder:add')") + public ResponseEntity create(@Validated @RequestBody RawfoilWorkOrder dto) { + rawfoilworkorderService.create(dto); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改生箔工序工单") + + //@SaCheckPermission("@el.check('rawfoilworkorder:edit')") + public ResponseEntity update(@Validated @RequestBody RawfoilWorkOrder dto) { + rawfoilworkorderService.update(dto); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除生箔工序工单") + + //@SaCheckPermission("@el.check('rawfoilworkorder:del')") + @DeleteMapping + public ResponseEntity delete(@RequestBody Long[] ids) { + rawfoilworkorderService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + @Log("强制确认") + + @PostMapping("/compelEnd") + public ResponseEntity compelEnd(@RequestBody JSONObject whereJson) { + rawfoilworkorderService.compelEnd(whereJson); + return new ResponseEntity<>(HttpStatus.OK); + } + + @Log("称重") + + @PostMapping("/confirm") + public ResponseEntity confirm(@RequestBody JSONObject whereJson) { + rawfoilworkorderService.confirm(whereJson); + return new ResponseEntity<>(HttpStatus.OK); + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/controller/SbPointIvtController.java b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/controller/SbPointIvtController.java new file mode 100644 index 0000000..0c3b653 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/controller/SbPointIvtController.java @@ -0,0 +1,69 @@ +package org.nl.wms.pdm.rawfoilworkorder.controller; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.logging.annotation.Log; +import org.nl.wms.pdm.rawfoilworkorder.service.SbPointIvtService; +import org.nl.wms.pdm.rawfoilworkorder.service.dao.SbPointIvt; +import org.nl.wms.pdm.rawfoilworkorder.service.dto.SbPointIvtDto; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +@RestController +@RequiredArgsConstructor + +@RequestMapping("/api/sbpointivt") +@Slf4j +public class SbPointIvtController { + + @Autowired + public SbPointIvtService sbPointIvtService; + + @GetMapping + @Log("查询生箔点位库存") + + public ResponseEntity query(@RequestParam Map whereJson, Pageable page) { + return new ResponseEntity<>(sbPointIvtService.queryAll(whereJson, page), HttpStatus.OK); + } + + @GetMapping("/queryResources") + @Log("查询生箔机台") + + public ResponseEntity queryResources() { + return new ResponseEntity<>(sbPointIvtService.queryResources(), HttpStatus.OK); + } + + @PostMapping + @Log("新增生箔点位库存") + + //@SaCheckPermission("@el.check('sbpointivt:add')") + public ResponseEntity create(@Validated @RequestBody SbPointIvt dto) { + sbPointIvtService.create(dto); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改生箔点位库存") + + //@SaCheckPermission("@el.check('sbpointivt:edit')") + public ResponseEntity update(@Validated @RequestBody SbPointIvt dto) { + sbPointIvtService.update(dto); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除生箔点位库存") + + //@SaCheckPermission("@el.check('sbpointivt:del')") + @DeleteMapping + public ResponseEntity delete(@RequestBody Long[] ids) { + sbPointIvtService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/CoolPointIvtService.java b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/CoolPointIvtService.java new file mode 100644 index 0000000..b7093fc --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/CoolPointIvtService.java @@ -0,0 +1,47 @@ +package org.nl.wms.pdm.rawfoilworkorder.service; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.wms.pdm.rawfoilworkorder.service.dao.CoolPointIvt; +import org.nl.wms.pdm.rawfoilworkorder.service.dto.CoolPointIvtDto; +import org.springframework.data.domain.Pageable; + +import java.util.Map; + +public interface CoolPointIvtService extends IService { + /** + * 查询数据分页 + * + * @param whereJson 条件 + * @param page 分页参数 + * @return Map + */ + Map queryAll(Map whereJson, Pageable page); + + /** + * 创建 + * + * @param dto / + */ + void create(CoolPointIvt dto); + + /** + * 编辑 + * + * @param dto / + */ + void update(CoolPointIvt dto); + + void deleteAll(Long[] ids); + + /** + * 冷却区出入分页查询 + * + * @param whereJson + * @param page + * @return + */ + Map coolRegionIOQueryAll(Map whereJson, Pageable page); + + void uploadMes(JSONObject form); +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/RawfoilWorkOrderService.java b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/RawfoilWorkOrderService.java new file mode 100644 index 0000000..5c604f8 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/RawfoilWorkOrderService.java @@ -0,0 +1,79 @@ +package org.nl.wms.pdm.rawfoilworkorder.service; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.common.domain.query.PageQuery; +import org.nl.wms.pdm.rawfoilworkorder.service.dao.RawfoilWorkOrder; +import org.nl.wms.pdm.rawfoilworkorder.service.dto.RawfoilWorkOrderDto; +import org.nl.wms.pdm.service.dto.RawfoilworkorderDto; +import org.springframework.data.domain.Pageable; + +import java.util.List; +import java.util.Map; + +/** + * @author dsh + * @description 服务接口 + **/ +public interface RawfoilWorkOrderService extends IService { + + /** + * 查询数据分页 + * + * @param whereJson 条件 + * @param page 分页参数 + * @return Map + */ + Map queryAll(Map whereJson, PageQuery page); + + /** + * 查询所有数据不分页 + * + * @param whereJson 条件参数 + * @return List + */ + List queryAll(Map whereJson); + + /** + * 根据ID查询 + * + * @param workorder_id ID + * @return Rawfoilworkorder + */ + RawfoilWorkOrder findById(Long workorder_id); + + /** + * 创建 + * + * @param dto / + */ + void create(RawfoilWorkOrder dto); + + /** + * 编辑 + * + * @param dto / + */ + void update(RawfoilWorkOrder dto); + + /** + * 多选删除 + * + * @param ids / + */ + void deleteAll(Long[] ids); + + /** + * 强制确认 + * + * @param whereJson / + */ + void compelEnd(JSONObject whereJson); + + /** + * 称重 + * + * @param whereJson / + */ + void confirm(JSONObject whereJson); +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/SbPointIvtService.java b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/SbPointIvtService.java new file mode 100644 index 0000000..9eab10b --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/SbPointIvtService.java @@ -0,0 +1,44 @@ +package org.nl.wms.pdm.rawfoilworkorder.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.wms.pdm.rawfoilworkorder.service.dao.SbPointIvt; +import org.nl.wms.pdm.rawfoilworkorder.service.dto.SbPointIvtDto; +import org.springframework.data.domain.Pageable; + +import java.util.List; +import java.util.Map; + +public interface SbPointIvtService extends IService { + + /** + * 查询数据分页 + * + * @param whereJson 条件 + * @param page 分页参数 + * @return Map + */ + Map queryAll(Map whereJson, Pageable page); + + /** + * 创建 + * + * @param dto / + */ + void create(SbPointIvt dto); + + /** + * 编辑 + * + * @param dto / + */ + void update(SbPointIvt dto); + + /** + * 多选删除 + * + * @param ids / + */ + void deleteAll(Long[] ids); + + List queryResources(); +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/dao/CoolPointIvt.java b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/dao/CoolPointIvt.java new file mode 100644 index 0000000..c7e5222 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/dao/CoolPointIvt.java @@ -0,0 +1,164 @@ +package org.nl.wms.pdm.rawfoilworkorder.service.dao; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; + +@Data +@TableName("st_ivt_coolpointivt") +public class CoolPointIvt implements Serializable { + /** 库存记录标识 */ + /** + * 防止精度丢失 + */ + @TableId(value = "ivt_id", type = IdType.NONE) + @JsonSerialize(using = ToStringSerializer.class) + private Long ivt_id; + + /** + * 点位编码 + */ + private String point_code; + + /** + * 满轴位编码 + */ + private String full_point_code; + + /** + * 母卷号 + */ + private String container_name; + + /** + * 母卷工单标识 + */ + private String workorder_id; + + /** + * 母卷轴编码 + */ + private String full_vehicle_code; + + /** + * 空轴位编码 + */ + private String empty_point_code; + + /** + * 空轴编码 + */ + private String empty_vehicle_code; + + /** + * 下料区域标识 + */ + private Long region_id; + + /** + * 批次 + */ + private String pcsn; + + /** + * 库存数 + */ + private BigDecimal ivt_qty; + + /** + * 计量单位标识 + */ + private Long qty_unit_id; + + /** + * 入库时间 + */ + private String instorage_time; + + /** + * 生产区域 + */ + private String product_area; + + /** + * 位置 + */ + private String point_location; + + /** + * 顺序号 + */ + private BigDecimal sort_seq; + + /** + * 是否启用 + */ + private String is_used; + + /** + * 备注 + */ + private String remark; + + /** + * 创建人 + */ + private String create_id; + + /** + * 创建人姓名 + */ + private String create_name; + + /** + * 创建时间 + */ + private String create_time; + + /** + * 修改人 + */ + private String update_optid; + + /** + * 修改人姓名 + */ + private String update_optname; + + /** + * 修改时间 + */ + private String update_time; + + /** + * 满轴位状态 + */ + private String full_point_status; + + /** + * 库存状态 + **/ + private String cool_ivt_status; + + /** + * 空轴位状态 + */ + private String empty_point_status; + + /** + * 规划 + */ + private String plan; + + /** + * 点位类型 + */ + private String point_type; + +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/dao/RawfoilWorkOrder.java b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/dao/RawfoilWorkOrder.java new file mode 100644 index 0000000..6ed010a --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/dao/RawfoilWorkOrder.java @@ -0,0 +1,189 @@ +package org.nl.wms.pdm.rawfoilworkorder.service.dao; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; + +/** + * @author dsh + */ +@Data +@TableName("pdm_bi_rawfoilworkorder") +public class RawfoilWorkOrder implements Serializable { + + /** 工单标识 */ + /** + * 防止精度丢失 + */ + @TableId(value = "point_id", type = IdType.NONE) + @JsonSerialize(using = ToStringSerializer.class) + private Long workorder_id; + + /** + * 母卷号 + */ + private String container_name; + + /** + * 机台编码 + */ + private String resource_name; + + /** + * 生产工单 + */ + private String mfg_order_name; + + /** + * 产品编码 + */ + private String product_name; + + /** + * 产品名称 + */ + private String description; + + /** + * 理论长度 + */ + private BigDecimal theory_height; + + /** + * 设备生产速度 + */ + private BigDecimal eqp_velocity; + + /** + * 上卷开始时间 + */ + private String up_coiler_date; + + /** + * 是否重新更新 + */ + private String is_reload_send; + + /** + * 重量 + */ + private BigDecimal productin_qty; + + /** + * 开始时间 + */ + private String realstart_time; + + /** + * 结束时间 + */ + private String realend_time; + + /** + * 状态 + */ + private String status; + + /** + * 完成方式 + */ + private String finish_type; + + /** + * 车号 + */ + private String agvno; + + /** + * 备注 + */ + private String remark; + + /** + * 创建人 + */ + private String create_id; + + /** + * 创建人 + */ + private String create_name; + + /** + * 创建时间 + */ + private String create_time; + + /** + * 修改人 + */ + private String update_optid; + + /** + * 修改人 + */ + private String update_optname; + + /** + * 修改时间 + */ + private String update_time; + + /** + * 是否删除 + */ + private String is_delete; + + /** + * 生产区域 + */ + private String product_area; + + /** + * 点位编码 + */ + private String point_code; + + /** + * 请求烘烤 + */ + private String is_baking; + + /** + * 请求入半成品库 + */ + private String is_instor; + + /** + * 收卷辊 + */ + private String wind_roll; + + /** + * 类型 + */ + private String order_type; + + /** + * 母卷来源 + * 1-生箔机;2-烘箱;3-分切机 + */ + private String origin; + + /** + * 母卷状态 + * 0-未烘烤;1-已烘烤 + */ + private String roll_status; + + /** + * 批次号 + */ + private String pscn; +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/dao/SbPointIvt.java b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/dao/SbPointIvt.java new file mode 100644 index 0000000..74f6b34 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/dao/SbPointIvt.java @@ -0,0 +1,122 @@ +package org.nl.wms.pdm.rawfoilworkorder.service.dao; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; + +import java.io.Serializable; + +@Data +@TableName("st_ivt_sbpointivt") +public class SbPointIvt implements Serializable { + /** 点位标识 */ + /** + * 防止精度丢失 + */ + @TableId(value = "point_id", type = IdType.NONE) + @JsonSerialize(using = ToStringSerializer.class) + private Long point_id; + + /** + * 点位编码 + */ + private String point_code; + + /** + * 载具编码 + */ + private String vehicle_code; + + /** + * 生产区域 + */ + private String product_area; + + /** + * 位置 + */ + private String point_location; + + /** + * 外部编码 + */ + private String ext_code; + + /** + * 备注 + */ + private String remark; + + /** + * 是否启用 + */ + private String is_used; + + /** + * 是否启用 + */ + private String mes_used; + + /** + * 创建人 + */ + private String create_id; + + /** + * 创建人 + */ + private String create_name; + + /** + * 创建时间 + */ + private String create_time; + + /** + * 修改人 + */ + private String update_optid; + + /** + * 修改人 + */ + private String update_optname; + + /** + * 修改时间 + */ + private String update_time; + + /** + * 规划 + */ + private String plan; + + /** + * 规划 + */ + private String device_type; + + /** + * 满轴位编码 + */ + private String full_point_code; + + /** + * 空轴位编码 + */ + private String empty_point_code; + + /** + * 满轴位状态 + */ + private String full_point_status; + + /** + * 空轴位状态 + */ + private String empty_point_status; +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/dao/mapper/CoolPointIvtMapper.java b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/dao/mapper/CoolPointIvtMapper.java new file mode 100644 index 0000000..c7f1907 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/dao/mapper/CoolPointIvtMapper.java @@ -0,0 +1,18 @@ +package org.nl.wms.pdm.rawfoilworkorder.service.dao.mapper; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.nl.wms.pdm.rawfoilworkorder.service.dao.CoolPointIvt; +import org.nl.wms.pdm.rawfoilworkorder.service.dto.CoolPointIvtDto; + +import java.util.List; + +@Mapper +public interface CoolPointIvtMapper extends BaseMapper { + + List queryCoolPointIvt(@Param("map") JSONObject map); + + List selectCoolIvt(@Param("map") JSONObject map); +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/dao/mapper/CoolPointIvtMapper.xml b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/dao/mapper/CoolPointIvtMapper.xml new file mode 100644 index 0000000..fa61f1f --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/dao/mapper/CoolPointIvtMapper.xml @@ -0,0 +1,75 @@ + + + + + + + + diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/dao/mapper/RawfoilWorkOrderMapper.java b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/dao/mapper/RawfoilWorkOrderMapper.java new file mode 100644 index 0000000..5a93717 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/dao/mapper/RawfoilWorkOrderMapper.java @@ -0,0 +1,22 @@ +package org.nl.wms.pdm.rawfoilworkorder.service.dao.mapper; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.nl.wms.pdm.rawfoilworkorder.service.dao.RawfoilWorkOrder; +import org.nl.wms.pdm.rawfoilworkorder.service.dto.RawfoilWorkOrderDto; + +import java.util.List; + +@Mapper +public interface RawfoilWorkOrderMapper extends BaseMapper { + IPage queryAllPage(@Param("rawfoilWorkOrderDto")RawfoilWorkOrderDto rawfoilWorkOrderDto , @Param("page") IPage page); + + List queryRawFoil(@Param("map") JSONObject map); + + List queryRawFoilList(@Param("map") JSONObject map); + +} + diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/dao/mapper/RawfoilWorkOrderMapper.xml b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/dao/mapper/RawfoilWorkOrderMapper.xml new file mode 100644 index 0000000..a50101a --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/dao/mapper/RawfoilWorkOrderMapper.xml @@ -0,0 +1,91 @@ + + + + + + + + + diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/dao/mapper/SbPointIvtMapper.java b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/dao/mapper/SbPointIvtMapper.java new file mode 100644 index 0000000..a664f70 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/dao/mapper/SbPointIvtMapper.java @@ -0,0 +1,20 @@ +package org.nl.wms.pdm.rawfoilworkorder.service.dao.mapper; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.nl.wms.pdm.rawfoilworkorder.service.dao.SbPointIvt; + +@Mapper +public interface SbPointIvtMapper extends BaseMapper { + + String QUERY_SBPOINTIVT_SQL = "SELECT * FROM sb_point_ivt WHERE 1=1"; + String WRAPPER_SBPOINTIVT_SQL=QUERY_SBPOINTIVT_SQL + " ${ew.customSqlSegment}"; + + @Select(WRAPPER_SBPOINTIVT_SQL) +

> P queryPage(P page, @Param("ew") Wrapper wrapper); +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/dao/mapper/SbPointIvtMapper.xml b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/dao/mapper/SbPointIvtMapper.xml new file mode 100644 index 0000000..f6820f6 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/dao/mapper/SbPointIvtMapper.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/dto/CoolPointIvtDto.java b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/dto/CoolPointIvtDto.java new file mode 100644 index 0000000..36db66f --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/dto/CoolPointIvtDto.java @@ -0,0 +1,160 @@ +package org.nl.wms.pdm.rawfoilworkorder.service.dto; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; +import org.nl.wms.pdm.rawfoilworkorder.service.dao.CoolPointIvt; + +import java.io.Serializable; +import java.math.BigDecimal; + +@Data +public class CoolPointIvtDto extends CoolPointIvt implements Serializable { + /** 库存记录标识 */ + /** + * 防止精度丢失 + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long ivt_id; + + /** + * 点位编码 + */ + private String point_code; + + /** + * 满轴位编码 + */ + private String full_point_code; + + /** + * 母卷号 + */ + private String container_name; + + /** + * 母卷工单标识 + */ + private String workorder_id; + + /** + * 母卷轴编码 + */ + private String full_vehicle_code; + + /** + * 空轴位编码 + */ + private String empty_point_code; + + /** + * 空轴编码 + */ + private String empty_vehicle_code; + + /** + * 下料区域标识 + */ + private Long region_id; + + /** + * 批次 + */ + private String pcsn; + + /** + * 库存数 + */ + private BigDecimal ivt_qty; + + /** + * 计量单位标识 + */ + private Long qty_unit_id; + + /** + * 入库时间 + */ + private String instorage_time; + + /** + * 生产区域 + */ + private String product_area; + + /** + * 位置 + */ + private String point_location; + + /** + * 顺序号 + */ + private BigDecimal sort_seq; + + /** + * 是否启用 + */ + private String is_used; + + /** + * 备注 + */ + private String remark; + + /** + * 创建人 + */ + private String create_id; + + /** + * 创建人姓名 + */ + private String create_name; + + /** + * 创建时间 + */ + private String create_time; + + /** + * 修改人 + */ + private String update_optid; + + /** + * 修改人姓名 + */ + private String update_optname; + + /** + * 修改时间 + */ + private String update_time; + + /** + * 满轴位状态 + */ + private String full_point_status; + + /** + * 库存状态 + **/ + private String cool_ivt_status; + + /** + * 空轴位状态 + */ + private String empty_point_status; + + /** + * 母卷来源 + * 1-生箔下卷;2-烘箱;3-分切 + */ + private String origin; + /** + * 母卷状态 + * 0-未烘烤;1-已烘烤 + */ + private String roll_status; +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/dto/RawfoilWorkOrderDto.java b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/dto/RawfoilWorkOrderDto.java new file mode 100644 index 0000000..59eaf7a --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/dto/RawfoilWorkOrderDto.java @@ -0,0 +1,32 @@ +package org.nl.wms.pdm.rawfoilworkorder.service.dto; + +import lombok.Data; +import org.nl.wms.pdm.rawfoilworkorder.service.dao.RawfoilWorkOrder; + +import java.util.List; + +/** + * @author dsh + */ +@Data +public class RawfoilWorkOrderDto extends RawfoilWorkOrder { + /** + * 点位编码 + */ + private String point_code2; + + /** + * 开始时间 + */ + private String begin_time; + + /** + * 结束时间 + */ + private String end_time; + + /** + * 人员对应的区域 + */ + private List in_area_id; +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/dto/SbPointIvtDto.java b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/dto/SbPointIvtDto.java new file mode 100644 index 0000000..defaa38 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/dto/SbPointIvtDto.java @@ -0,0 +1,85 @@ +package org.nl.wms.pdm.rawfoilworkorder.service.dto; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; +import org.nl.wms.pdm.rawfoilworkorder.service.dao.SbPointIvt; + +@Data +public class SbPointIvtDto extends SbPointIvt { + + /** + * 点位编码 + */ + private String point_code; + + /** + * 点位状态 + */ + private String point_status; + + /** + * 载具编码 + */ + private String vehicle_code; + + /** + * 生产区域 + */ + private String product_area; + + /** + * 位置 + */ + private String point_location; + + /** + * 外部编码 + */ + private String ext_code; + + /** + * 备注 + */ + private String remark; + + /** + * 是否启用 + */ + private String is_used; + + /** + * 是否启用 + */ + private String mes_used; + + /** + * 创建人 + */ + private String create_id; + + /** + * 创建人 + */ + private String create_name; + + /** + * 创建时间 + */ + private String create_time; + + /** + * 修改人 + */ + private String update_optid; + + /** + * 修改人 + */ + private String update_optname; + + /** + * 修改时间 + */ + private String update_time; +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/impl/CoolPointIvtServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/impl/CoolPointIvtServiceImpl.java new file mode 100644 index 0000000..49b9faf --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/impl/CoolPointIvtServiceImpl.java @@ -0,0 +1,150 @@ +package org.nl.wms.pdm.rawfoilworkorder.service.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.b_lms.sch.point.dao.StIvtCoolregionio; +import org.nl.b_lms.sch.point.dao.mapper.StIvtCoolregionioMapper; +import org.nl.common.utils.SecurityUtils; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.util.SpringContextHolder; +import org.nl.system.service.param.impl.SysParamServiceImpl; +import org.nl.wms.basedata.st.service.impl.UserAreaServiceImpl; +import org.nl.wms.ext.mes.service.LmsToMesService; +import org.nl.wms.pdm.rawfoilworkorder.service.CoolPointIvtService; +import org.nl.wms.pdm.rawfoilworkorder.service.dao.CoolPointIvt; +import org.nl.wms.pdm.rawfoilworkorder.service.dao.SbPointIvt; +import org.nl.wms.pdm.rawfoilworkorder.service.dao.mapper.CoolPointIvtMapper; +import org.nl.wms.pdm.rawfoilworkorder.service.dto.CoolPointIvtDto; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +@Service +@RequiredArgsConstructor +@Slf4j +public class CoolPointIvtServiceImpl extends ServiceImpl implements CoolPointIvtService { + + @Autowired + CoolPointIvtMapper coolPointIvtMapper; + @Resource + private StIvtCoolregionioMapper stIvtCoolregionioMapper; + + @Override + public Map queryAll(Map whereJson, Pageable page) { + //获取人员对应的区域 +// UserAreaServiceImpl userAreaService = new UserAreaServiceImpl(); +// String in_area_id = userAreaService.getInArea(); + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.like(ObjectUtil.isNotEmpty(whereJson.get("point_code")), CoolPointIvt::getPoint_code, whereJson.get("point_code")); + wrapper.like(ObjectUtil.isNotEmpty(whereJson.get("container_name")), CoolPointIvt::getContainer_name, whereJson.get("container_name")); + wrapper.eq(ObjectUtil.isNotEmpty(whereJson.get("cool_ivt_status")), CoolPointIvt::getCool_ivt_status, whereJson.get("cool_ivt_status")); + wrapper.eq(ObjectUtil.isNotEmpty(whereJson.get("empty_point_status")), CoolPointIvt::getEmpty_point_status, whereJson.get("empty_point_status")); + wrapper.eq(ObjectUtil.isNotEmpty(whereJson.get("full_point_status")), CoolPointIvt::getFull_point_status, whereJson.get("full_point_status")); + wrapper.eq(ObjectUtil.isNotEmpty(whereJson.get("point_location")), CoolPointIvt::getPoint_location, whereJson.get("point_location")); + wrapper.eq(ObjectUtil.isNotEmpty(whereJson.get("is_used")), CoolPointIvt::getIs_used, whereJson.get("is_used")); +// wrapper.eq(ObjectUtil.isNotEmpty(whereJson.get("in_area_id")), CoolPointIvt::getProduct_area, whereJson.get("in_area_id")); + wrapper.ge(ObjectUtil.isNotEmpty(whereJson.get("begin_time")), CoolPointIvt::getInstorage_time, whereJson.get("begin_time")); + wrapper.le(ObjectUtil.isNotEmpty(whereJson.get("end_time")), CoolPointIvt::getInstorage_time, whereJson.get("end_time")); + IPage pages = new Page<>(page.getOffset() + 1, page.getPageSize()); + IPage coolPointIvtList = coolPointIvtMapper.selectPage(pages, wrapper); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("totalElements", coolPointIvtList.getTotal()); + jsonObject.put("content", coolPointIvtList.getRecords()); + return jsonObject; + } + + @Override + public void create(CoolPointIvt dto) { + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + dto.setIvt_id(IdUtil.getSnowflake(1, 1).nextId()); + dto.setCreate_id(currentUserId); + dto.setCreate_name(nickName); + dto.setUpdate_optid(currentUserId); + dto.setUpdate_optname(nickName); + dto.setUpdate_time(now); + dto.setCreate_time(now); + coolPointIvtMapper.insert(dto); + } + + @Override + public void update(CoolPointIvt dto) { + CoolPointIvt ivt = this.getById(dto.getIvt_id()); + if (ivt == null) { + throw new BadRequestException("被删除或无权限,操作失败!"); + } + String container_name = dto.getContainer_name(); + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + dto.setUpdate_time(now); + dto.setUpdate_optid(currentUserId); + dto.setUpdate_optname(nickName); + coolPointIvtMapper.updateById(dto); + } + + @Override + public void deleteAll(Long[] ids) { + List list = coolPointIvtMapper.selectBatchIds(Arrays.asList(ids)); + for (CoolPointIvt hotPointIvt : list) { + coolPointIvtMapper.deleteById(hotPointIvt); + } + } + + @Override + public Map coolRegionIOQueryAll(Map whereJson, Pageable page) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.like(ObjectUtil.isNotEmpty(whereJson.get("start_point_code")), StIvtCoolregionio::getStart_point_code, whereJson.get("start_point_code")); + wrapper.like(ObjectUtil.isNotEmpty(whereJson.get("end_point_code")), StIvtCoolregionio::getEnd_point_code, whereJson.get("end_point_code")); + wrapper.like(ObjectUtil.isNotEmpty(whereJson.get("container_name")), StIvtCoolregionio::getPcsn, whereJson.get("container_name")); + wrapper.like(ObjectUtil.isNotEmpty(whereJson.get("vehicle_code")), StIvtCoolregionio::getVehicle_code, whereJson.get("vehicle_code")); + wrapper.ge(ObjectUtil.isNotEmpty(whereJson.get("begin_time")), StIvtCoolregionio::getCreate_time, whereJson.get("begin_time")); + wrapper.le(ObjectUtil.isNotEmpty(whereJson.get("end_time")), StIvtCoolregionio::getCreate_time, whereJson.get("end_time")); + IPage pages = new Page<>(page.getOffset() + 1, page.getPageSize()); + IPage coolPointIvtList = stIvtCoolregionioMapper.selectPage(pages, wrapper); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("totalElements", coolPointIvtList.getTotal()); + jsonObject.put("content", coolPointIvtList.getRecords()); + return jsonObject; + } + + @Override + public void uploadMes(JSONObject form) { + //调用回传MES的半成品入库接口 + // 将入冷却信息发送给mes + JSONObject param = new JSONObject(); + String userName = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("MES_USERNAME").getValue(); + String passWord = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("MES_PASSWORD").getValue(); + String container_name = form.getString("container_name"); + if (StrUtil.isEmpty(container_name)) { + throw new BadRequestException("母卷号不能为空!"); + } + param.put("iContainerName", container_name); + param.put("iArrivalTime", DateUtil.now()); + param.put("iWarehouse", 2); + param.put("UserName", userName); + param.put("PassWord", passWord); + + //判断该接口是否需要回传 + JSONObject back_jo = WQLObject.getWQLObject("MD_PB_InterfaceBack").query("interface_name = 'momRollSemiFGInboundComplete'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(back_jo) && "1".equals(back_jo.getString("is_back"))) { + SpringContextHolder.getBean(LmsToMesService.class).momRollSemiFGInboundComplete(param); + } + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/impl/RawfoilWorkOrderServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/impl/RawfoilWorkOrderServiceImpl.java new file mode 100644 index 0000000..214503c --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/impl/RawfoilWorkOrderServiceImpl.java @@ -0,0 +1,253 @@ +package org.nl.wms.pdm.rawfoilworkorder.service.impl; + + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.map.MapUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.b_lms.sch.point.dao.StIvtSbpointivt; +import org.nl.b_lms.sch.point.dao.mapper.StIvtSbpointivtMapper; +import org.nl.b_lms.sch.task.dao.SchBaseTask; +import org.nl.b_lms.sch.task.dao.mapper.SchBaseTaskMapper; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.utils.SecurityUtils; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.wql.core.bean.WQLObject; +//import org.nl.wms.basedata.master.materialbase.service.dao.Materialbase; +//import org.nl.wms.basedata.master.materialbase.service.dao.mapper.MaterialbaseMapper; +import org.nl.wms.basedata.st.service.impl.UserAreaServiceImpl; +//import org.nl.wms.basedata.st.userarea.service.IUserAreaPermissionService; +//import org.nl.wms.basedata.st.userstor.service.dto.UserStorDto; +import org.nl.wms.pdm.rawfoilworkorder.service.RawfoilWorkOrderService; +import org.nl.wms.pdm.rawfoilworkorder.service.dao.RawfoilWorkOrder; +import org.nl.wms.pdm.rawfoilworkorder.service.dao.mapper.RawfoilWorkOrderMapper; +import org.nl.wms.pdm.rawfoilworkorder.service.dto.RawfoilWorkOrderDto; +import org.nl.wms.sch.manage.TaskStatusEnum; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.math.BigDecimal; +import java.util.List; +import java.util.Map; + +/** + * @author dsh + **/ +@Service +@RequiredArgsConstructor +@Slf4j +public class RawfoilWorkOrderServiceImpl extends ServiceImpl implements RawfoilWorkOrderService { +// @Autowired +// IUserAreaPermissionService userAreaPermissionService; + + @Autowired + RawfoilWorkOrderMapper rawfoilWorkOrderMapper; + + @Autowired + StIvtSbpointivtMapper stIvtSbpointivtMapper; + +// @Autowired +// MaterialbaseMapper materialbaseMapper; + + @Autowired + SchBaseTaskMapper schBaseTaskMapper; + + @Override + public Map queryAll(Map whereJson, PageQuery page) { + RawfoilWorkOrderDto rawfoilWorkOrderDto = new RawfoilWorkOrderDto(); + rawfoilWorkOrderDto.setProduct_area(MapUtil.getStr(whereJson, "product_area")); + rawfoilWorkOrderDto.setResource_name(MapUtil.getStr(whereJson, "resource_name")); + rawfoilWorkOrderDto.setStatus(MapUtil.getStr(whereJson,"status")); + rawfoilWorkOrderDto.setContainer_name(MapUtil.getStr(whereJson,"container_name")); + rawfoilWorkOrderDto.setBegin_time(MapUtil.getStr(whereJson,"begin_time")); + rawfoilWorkOrderDto.setEnd_time(MapUtil.getStr(whereJson,"end_time")); + //获取人员对应的区域 +// List in_area_id = userAreaPermissionService.getCurrentUserAreas(SecurityUtils.getCurrentUserId()); + //获取人员对应的区域 +// UserAreaServiceImpl userAreaService = new UserAreaServiceImpl(); +// String in_area_id = userAreaService.getInArea(); +// if (ObjectUtil.isNotEmpty(in_area_id)) { +// rawfoilWorkOrderDto.setProduct_area(in_area_id); +// } + IPage pages = new Page<>(page.getPage() + 1, page.getSize()); + IPage rawfoilWorkOrderList = rawfoilWorkOrderMapper.queryAllPage(rawfoilWorkOrderDto,pages); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("totalElements", rawfoilWorkOrderList.getTotal()); + jsonObject.put("content", rawfoilWorkOrderList.getRecords()); + return jsonObject; + } + + @Override + public List queryAll(Map whereJson) { + return rawfoilWorkOrderMapper.selectList(new QueryWrapper()); + } + + @Override + public RawfoilWorkOrder findById(Long workorder_id) { + return rawfoilWorkOrderMapper.selectById(workorder_id); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void create(RawfoilWorkOrder dto) { + String container_name = dto.getContainer_name(); + RawfoilWorkOrder rawfoilWorkOrder = rawfoilWorkOrderMapper.selectOne(new LambdaQueryWrapper<>(RawfoilWorkOrder.class) + .eq(RawfoilWorkOrder::getContainer_name,container_name) + .ne(RawfoilWorkOrder::getStatus,"40")); + WQLObject materTab = WQLObject.getWQLObject("md_me_materialbase"); + + if (ObjectUtil.isNotEmpty(rawfoilWorkOrder)) { + throw new BadRequestException("母卷号已存在"); + } + + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + StIvtSbpointivt stIvtSbpointivt = stIvtSbpointivtMapper.selectOne(new LambdaQueryWrapper<>(StIvtSbpointivt.class) + .eq(StIvtSbpointivt::getExt_code,dto.getResource_name())); + if (ObjectUtil.isEmpty(stIvtSbpointivt)) { + throw new BadRequestException("点位设备不存在"); + } + +// Materialbase materialbase = materialbaseMapper.selectOne(new LambdaQueryWrapper<>(Materialbase.class) +// .eq(Materialbase::getMaterial_code,dto.getProduct_name()) +// .eq(Materialbase::getIs_delete,"0").eq(Materialbase::getIs_used,"1")); +// if (ObjectUtil.isEmpty(materialbase)) { +// throw new BadRequestException("物料不存在"); +// } + JSONObject josnMater = materTab.query("material_code ='" + dto.getProduct_name() + "' and is_delete = '0' and is_used = '1'").uniqueResult(0); + if (ObjectUtil.isEmpty(josnMater)) { + throw new BadRequestException("物料不存在"); + } + + + dto.setWorkorder_id(IdUtil.getSnowflake(1, 1).nextId()); + dto.setCreate_id(currentUserId); + dto.setCreate_name(nickName); + dto.setUpdate_optid(currentUserId); + dto.setUpdate_optname(nickName); + dto.setUpdate_time(now); + dto.setCreate_time(now); + dto.setIs_delete("0"); + dto.setProduct_area(stIvtSbpointivt.getProduct_area()); + dto.setPoint_code(stIvtSbpointivt.getPoint_code()); + dto.setStatus("00"); + + rawfoilWorkOrderMapper.insert(dto); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(RawfoilWorkOrder dto) { + RawfoilWorkOrder entity = this.findById(dto.getWorkorder_id()); + if (entity == null) { + throw new BadRequestException("被删除或无权限,操作失败!"); + } + + WQLObject materTab = WQLObject.getWQLObject("md_me_materialbase"); + String container_name = dto.getContainer_name(); + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + int count = rawfoilWorkOrderMapper.selectCount(new LambdaQueryWrapper<>(RawfoilWorkOrder.class) + .eq(RawfoilWorkOrder::getContainer_name,container_name) + .ne(RawfoilWorkOrder::getStatus,"40")); + if (count > 1) { + throw new BadRequestException("母卷号已存在"); + } + + StIvtSbpointivt stIvtSbpointivt = stIvtSbpointivtMapper.selectOne(new LambdaQueryWrapper<>(StIvtSbpointivt.class) + .eq(StIvtSbpointivt::getExt_code,dto.getResource_name())); + if (ObjectUtil.isEmpty(stIvtSbpointivt)) { + throw new BadRequestException("点位设备不存在"); + } + +// Materialbase materialbase = materialbaseMapper.selectOne(new LambdaQueryWrapper<>(Materialbase.class) +// .eq(Materialbase::getMaterial_code,dto.getProduct_name()) +// .eq(Materialbase::getIs_delete,"0") +// .eq(Materialbase::getIs_used,"1")); +// if (ObjectUtil.isEmpty(materialbase)) { +// throw new BadRequestException("物料不存在"); +// } + JSONObject josnMater = materTab.query("material_code ='" + dto.getProduct_name() + "' and is_delete = '0' and is_used = '1'").uniqueResult(0); + if (ObjectUtil.isEmpty(josnMater)) { + throw new BadRequestException("物料不存在"); + } + + dto.setUpdate_time(now); + dto.setUpdate_optid(currentUserId); + dto.setUpdate_optname(nickName); + dto.setProduct_area(stIvtSbpointivt.getProduct_area()); + dto.setPoint_code(stIvtSbpointivt.getPoint_code()); + + rawfoilWorkOrderMapper.updateById(dto); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteAll(Long[] ids) { + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + for (Long workorder_id : ids) { + RawfoilWorkOrder rawfoilWorkOrder = new RawfoilWorkOrder(); + rawfoilWorkOrder.setWorkorder_id(workorder_id); + rawfoilWorkOrder.setIs_delete("1"); + rawfoilWorkOrder.setUpdate_optid(currentUserId); + rawfoilWorkOrder.setUpdate_optname(nickName); + rawfoilWorkOrder.setUpdate_time(now); + + rawfoilWorkOrderMapper.updateById(rawfoilWorkOrder); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void compelEnd(JSONObject whereJson) { + String currentUserId = SecurityUtils.getCurrentUserId(); + String currentUsername = SecurityUtils.getCurrentUsername(); + + //查询该生箔工单是否存在未完成的任务 + String container_name = whereJson.getString("container_name"); + + SchBaseTask schBaseTask = schBaseTaskMapper.selectOne(new LambdaQueryWrapper<>(SchBaseTask.class) + .eq(SchBaseTask::getMaterial_code,container_name) + .lt(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode()) + .eq(SchBaseTask::getIs_delete,"0")); + if (ObjectUtil.isNotEmpty(schBaseTask)) { + throw new BadRequestException("该生箔工单存在未完成的任务,请先完成任务!"); + } + + RawfoilWorkOrder rawfoilWorkOrder = new RawfoilWorkOrder(); + rawfoilWorkOrder.setWorkorder_id(whereJson.getLong("workorder_id")); + rawfoilWorkOrder.setStatus("40"); + rawfoilWorkOrder.setFinish_type("02"); + rawfoilWorkOrder.setRealend_time(DateUtil.now()); + rawfoilWorkOrder.setUpdate_optid(currentUserId); + rawfoilWorkOrder.setUpdate_optname(currentUsername); + rawfoilWorkOrder.setUpdate_time(DateUtil.now()); + rawfoilWorkOrderMapper.updateById(rawfoilWorkOrder); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void confirm(JSONObject whereJson) { + RawfoilWorkOrder rawfoilWorkOrder = new RawfoilWorkOrder(); + rawfoilWorkOrder.setWorkorder_id(whereJson.getLong("workorder_id")); + rawfoilWorkOrder.setProductin_qty(ObjectUtil.isEmpty(whereJson.getString("productin_qty")) ? BigDecimal.valueOf(0) : whereJson.getBigDecimal("productin_qty")); + rawfoilWorkOrderMapper.updateById(rawfoilWorkOrder); + } + +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/impl/SbPointIvtServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/impl/SbPointIvtServiceImpl.java new file mode 100644 index 0000000..019eea0 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rawfoilworkorder/service/impl/SbPointIvtServiceImpl.java @@ -0,0 +1,110 @@ +package org.nl.wms.pdm.rawfoilworkorder.service.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.utils.SecurityUtils; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.common.utils.PageUtil; +import org.nl.wms.basedata.st.service.impl.UserAreaServiceImpl; +import org.nl.wms.pdm.rawfoilworkorder.service.SbPointIvtService; +import org.nl.wms.pdm.rawfoilworkorder.service.dao.SbPointIvt; +import org.nl.wms.pdm.rawfoilworkorder.service.dao.mapper.SbPointIvtMapper; +import org.nl.wms.pdm.rawfoilworkorder.service.dto.SbPointIvtDto; +import org.nl.wms.util.ConvertUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +@Service +@RequiredArgsConstructor +@Slf4j +public class SbPointIvtServiceImpl extends ServiceImpl implements SbPointIvtService { + + @Autowired + SbPointIvtMapper sbPointIvtMapper; + + @Override + public Map queryAll(Map whereJson, Pageable page) { + //获取人员对应的区域 +// UserAreaServiceImpl userAreaService = new UserAreaServiceImpl(); +// String in_area_id = userAreaService.getInArea(); + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.like(ObjectUtil.isNotEmpty(whereJson.get("point_code")), SbPointIvt::getPoint_code, whereJson.get("point_code")); + wrapper.eq(ObjectUtil.isNotEmpty(whereJson.get("product_area")), SbPointIvt::getProduct_area, whereJson.get("product_area")); + wrapper.eq(ObjectUtil.isNotEmpty(whereJson.get("is_used")), SbPointIvt::getIs_used, whereJson.get("is_used")); +// wrapper.in(ObjectUtil.isNotEmpty(in_area_id), SbPointIvt::getProduct_area, in_area_id); + IPage pages = new Page<>(page.getOffset() + 1, page.getPageSize()); + IPage sbPointIvtList = sbPointIvtMapper.selectPage(pages, wrapper); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("totalElements", sbPointIvtList.getTotal()); + jsonObject.put("content", sbPointIvtList.getRecords()); + return jsonObject; + } + + @Override + public void create(SbPointIvt dto) { + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + dto.setPoint_id(IdUtil.getSnowflake(1, 1).nextId()); + dto.setCreate_id(currentUserId); + dto.setCreate_name(nickName); + dto.setUpdate_optid(currentUserId); + dto.setUpdate_optname(nickName); + dto.setUpdate_time(now); + dto.setCreate_time(now); + sbPointIvtMapper.insert(dto); + } + + @Override + public void update(SbPointIvt dto) { + SbPointIvt entity = this.getById(dto.getPoint_id()); + if (entity == null) { + throw new BadRequestException("被删除或无权限,操作失败!"); + } + + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + + String now = DateUtil.now(); + dto.setUpdate_time(now); + dto.setUpdate_optid(currentUserId); + dto.setUpdate_optname(nickName); + + sbPointIvtMapper.updateById(dto); + } + + @Override + public void deleteAll(Long[] ids) { + List list = sbPointIvtMapper.selectBatchIds(Arrays.asList(ids)); + for (SbPointIvt hotPointIvt : list) { + sbPointIvtMapper.deleteById(hotPointIvt); + } + } + + @Override + public List queryResources() { + List resources = new ArrayList<>(); + List sbPointIvts = sbPointIvtMapper.selectList(new LambdaQueryWrapper()); + for (int i = 0; i < sbPointIvts.size(); i++) { + resources.add(sbPointIvts.get(i).getExt_code()); + } + return resources; + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rest/RawfoilworkorderController.java b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rest/RawfoilworkorderController.java index 257c1c1..bfb560a 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rest/RawfoilworkorderController.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rest/RawfoilworkorderController.java @@ -1,81 +1,81 @@ -package org.nl.wms.pdm.rest; - - -import com.alibaba.fastjson.JSONObject; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.nl.modules.logging.annotation.Log; -import org.nl.wms.pdm.service.RawfoilworkorderService; -import org.nl.wms.pdm.service.dto.RawfoilworkorderDto; -import org.springframework.data.domain.Pageable; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import java.util.Map; - -/** - * @author liuxy - * @date 2022-10-08 - **/ -@RestController -@RequiredArgsConstructor - -@RequestMapping("/api/rawfoilworkorder") -@Slf4j -public class RawfoilworkorderController { - - private final RawfoilworkorderService rawfoilworkorderService; - - @GetMapping - @Log("查询生箔工序工单") - - //@SaCheckPermission("@el.check('rawfoilworkorder:list')") - public ResponseEntity query(@RequestParam Map whereJson, Pageable page) { - return new ResponseEntity<>(rawfoilworkorderService.queryAll(whereJson, page), HttpStatus.OK); - } - - @PostMapping - @Log("新增生箔工序工单") - - //@SaCheckPermission("@el.check('rawfoilworkorder:add')") - public ResponseEntity create(@Validated @RequestBody RawfoilworkorderDto dto) { - rawfoilworkorderService.create(dto); - return new ResponseEntity<>(HttpStatus.CREATED); - } - - @PutMapping - @Log("修改生箔工序工单") - - //@SaCheckPermission("@el.check('rawfoilworkorder:edit')") - public ResponseEntity update(@Validated @RequestBody RawfoilworkorderDto dto) { - rawfoilworkorderService.update(dto); - return new ResponseEntity<>(HttpStatus.NO_CONTENT); - } - - @Log("删除生箔工序工单") - - //@SaCheckPermission("@el.check('rawfoilworkorder:del')") - @DeleteMapping - public ResponseEntity delete(@RequestBody Long[] ids) { - rawfoilworkorderService.deleteAll(ids); - return new ResponseEntity<>(HttpStatus.OK); - } - - @Log("强制确认") - - @PostMapping("/compelEnd") - public ResponseEntity compelEnd(@RequestBody JSONObject whereJson) { - rawfoilworkorderService.compelEnd(whereJson); - return new ResponseEntity<>(HttpStatus.OK); - } - - @Log("称重") - - @PostMapping("/confirm") - public ResponseEntity confirm(@RequestBody JSONObject whereJson) { - rawfoilworkorderService.confirm(whereJson); - return new ResponseEntity<>(HttpStatus.OK); - } -} +//package org.nl.wms.pdm.rest; +// +// +//import com.alibaba.fastjson.JSONObject; +//import lombok.RequiredArgsConstructor; +//import lombok.extern.slf4j.Slf4j; +//import org.nl.modules.logging.annotation.Log; +//import org.nl.wms.pdm.service.RawfoilworkorderService; +//import org.nl.wms.pdm.service.dto.RawfoilworkorderDto; +//import org.springframework.data.domain.Pageable; +//import org.springframework.http.HttpStatus; +//import org.springframework.http.ResponseEntity; +//import org.springframework.validation.annotation.Validated; +//import org.springframework.web.bind.annotation.*; +// +//import java.util.Map; +// +///** +// * @author liuxy +// * @date 2022-10-08 +// **/ +//@RestController +//@RequiredArgsConstructor +// +//@RequestMapping("/api/rawfoilworkorder") +//@Slf4j +//public class RawfoilworkorderController { +// +// private final RawfoilworkorderService rawfoilworkorderService; +// +// @GetMapping +// @Log("查询生箔工序工单") +// +// //@SaCheckPermission("@el.check('rawfoilworkorder:list')") +// public ResponseEntity query(@RequestParam Map whereJson, Pageable page) { +// return new ResponseEntity<>(rawfoilworkorderService.queryAll(whereJson, page), HttpStatus.OK); +// } +// +// @PostMapping +// @Log("新增生箔工序工单") +// +// //@SaCheckPermission("@el.check('rawfoilworkorder:add')") +// public ResponseEntity create(@Validated @RequestBody RawfoilworkorderDto dto) { +// rawfoilworkorderService.create(dto); +// return new ResponseEntity<>(HttpStatus.CREATED); +// } +// +// @PutMapping +// @Log("修改生箔工序工单") +// +// //@SaCheckPermission("@el.check('rawfoilworkorder:edit')") +// public ResponseEntity update(@Validated @RequestBody RawfoilworkorderDto dto) { +// rawfoilworkorderService.update(dto); +// return new ResponseEntity<>(HttpStatus.NO_CONTENT); +// } +// +// @Log("删除生箔工序工单") +// +// //@SaCheckPermission("@el.check('rawfoilworkorder:del')") +// @DeleteMapping +// public ResponseEntity delete(@RequestBody Long[] ids) { +// rawfoilworkorderService.deleteAll(ids); +// return new ResponseEntity<>(HttpStatus.OK); +// } +// +// @Log("强制确认") +// +// @PostMapping("/compelEnd") +// public ResponseEntity compelEnd(@RequestBody JSONObject whereJson) { +// rawfoilworkorderService.compelEnd(whereJson); +// return new ResponseEntity<>(HttpStatus.OK); +// } +// +// @Log("称重") +// +// @PostMapping("/confirm") +// public ResponseEntity confirm(@RequestBody JSONObject whereJson) { +// rawfoilworkorderService.confirm(whereJson); +// return new ResponseEntity<>(HttpStatus.OK); +// } +//} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rest/SlittingproductionplanController.java b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rest/SlittingproductionplanController.java index d362729..a8e36e8 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rest/SlittingproductionplanController.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rest/SlittingproductionplanController.java @@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.nl.b_lms.pdm.bi.slittingproductionplan.service.IPdmBiSlittingproductionplanService; +import org.nl.b_lms.pdm.bi.slittingproductionplan.service.dao.PdmBiSlittingproductionplan; import org.nl.modules.logging.annotation.Log; import org.nl.wms.pdm.service.SlittingproductionplanService; import org.nl.wms.pdm.service.dto.SlittingproductionplanDto; @@ -43,7 +44,7 @@ public class SlittingproductionplanController { @Log("新增分切计划") //@SaCheckPermission("@el.check('slittingproductionplan:add')") - public ResponseEntity create(@Validated @RequestBody SlittingproductionplanDto dto) { + public ResponseEntity create(@Validated @RequestBody PdmBiSlittingproductionplan dto) { slittingproductionplanService.create(dto); return new ResponseEntity<>(HttpStatus.CREATED); } @@ -52,7 +53,7 @@ public class SlittingproductionplanController { @Log("修改分切计划") //@SaCheckPermission("@el.check('slittingproductionplan:edit')") - public ResponseEntity update(@Validated @RequestBody SlittingproductionplanDto dto) { + public ResponseEntity update(@Validated @RequestBody PdmBiSlittingproductionplan dto) { slittingproductionplanService.update(dto); return new ResponseEntity<>(HttpStatus.NO_CONTENT); } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/service/RawfoilworkorderService.java b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/service/RawfoilworkorderService.java index e9fe07a..f030393 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/service/RawfoilworkorderService.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/service/RawfoilworkorderService.java @@ -1,85 +1,85 @@ -package org.nl.wms.pdm.service; - -import com.alibaba.fastjson.JSONObject; -import org.nl.wms.pdm.service.dto.RawfoilworkorderDto; -import org.springframework.data.domain.Pageable; - -import java.util.List; -import java.util.Map; - -/** - * @author liuxy - * @description 服务接口 - * @date 2022-10-08 - **/ -public interface RawfoilworkorderService { - - /** - * 查询数据分页 - * - * @param whereJson 条件 - * @param page 分页参数 - * @return Map - */ - Map queryAll(Map whereJson, Pageable page); - - /** - * 查询所有数据不分页 - * - * @param whereJson 条件参数 - * @return List - */ - List queryAll(Map whereJson); - - /** - * 根据ID查询 - * - * @param workorder_id ID - * @return Rawfoilworkorder - */ - RawfoilworkorderDto findById(Long workorder_id); - - /** - * 根据编码查询 - * - * @param code code - * @return Rawfoilworkorder - */ - RawfoilworkorderDto findByCode(String code); - - - /** - * 创建 - * - * @param dto / - */ - void create(RawfoilworkorderDto dto); - - /** - * 编辑 - * - * @param dto / - */ - void update(RawfoilworkorderDto dto); - - /** - * 多选删除 - * - * @param ids / - */ - void deleteAll(Long[] ids); - - /** - * 强制确认 - * - * @param whereJson / - */ - void compelEnd(JSONObject whereJson); - - /** - * 称重 - * - * @param whereJson / - */ - void confirm(JSONObject whereJson); -} +//package org.nl.wms.pdm.service; +// +//import com.alibaba.fastjson.JSONObject; +//import org.nl.wms.pdm.service.dto.RawfoilworkorderDto; +//import org.springframework.data.domain.Pageable; +// +//import java.util.List; +//import java.util.Map; +// +///** +// * @author liuxy +// * @description 服务接口 +// * @date 2022-10-08 +// **/ +//public interface RawfoilworkorderService { +// +// /** +// * 查询数据分页 +// * +// * @param whereJson 条件 +// * @param page 分页参数 +// * @return Map +// */ +// Map queryAll(Map whereJson, Pageable page); +// +// /** +// * 查询所有数据不分页 +// * +// * @param whereJson 条件参数 +// * @return List +// */ +// List queryAll(Map whereJson); +// +// /** +// * 根据ID查询 +// * +// * @param workorder_id ID +// * @return Rawfoilworkorder +// */ +// RawfoilworkorderDto findById(Long workorder_id); +// +// /** +// * 根据编码查询 +// * +// * @param code code +// * @return Rawfoilworkorder +// */ +// RawfoilworkorderDto findByCode(String code); +// +// +// /** +// * 创建 +// * +// * @param dto / +// */ +// void create(RawfoilworkorderDto dto); +// +// /** +// * 编辑 +// * +// * @param dto / +// */ +// void update(RawfoilworkorderDto dto); +// +// /** +// * 多选删除 +// * +// * @param ids / +// */ +// void deleteAll(Long[] ids); +// +// /** +// * 强制确认 +// * +// * @param whereJson / +// */ +// void compelEnd(JSONObject whereJson); +// +// /** +// * 称重 +// * +// * @param whereJson / +// */ +// void confirm(JSONObject whereJson); +//} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/service/SlittingproductionplanService.java b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/service/SlittingproductionplanService.java index 229c355..a479831 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/service/SlittingproductionplanService.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/service/SlittingproductionplanService.java @@ -1,6 +1,7 @@ package org.nl.wms.pdm.service; import com.alibaba.fastjson.JSONObject; +import org.nl.b_lms.pdm.bi.slittingproductionplan.service.dao.PdmBiSlittingproductionplan; import org.nl.wms.pdm.service.dto.SlittingproductionplanDto; import org.springframework.data.domain.Pageable; @@ -29,7 +30,7 @@ public interface SlittingproductionplanService { * @param whereJson 条件参数 * @return List */ - List queryAll(Map whereJson); + List queryAll(Map whereJson); /** * 根据ID查询 @@ -37,7 +38,7 @@ public interface SlittingproductionplanService { * @param workorder_id ID * @return Slittingproductionplan */ - SlittingproductionplanDto findById(Long workorder_id); + PdmBiSlittingproductionplan findById(Long workorder_id); /** * 根据编码查询 @@ -45,7 +46,7 @@ public interface SlittingproductionplanService { * @param code code * @return Slittingproductionplan */ - SlittingproductionplanDto findByCode(String code); + PdmBiSlittingproductionplan findByCode(String code); /** @@ -53,14 +54,14 @@ public interface SlittingproductionplanService { * * @param dto / */ - void create(SlittingproductionplanDto dto); + void create(PdmBiSlittingproductionplan dto); /** * 编辑 * * @param dto / */ - void update(SlittingproductionplanDto dto); + void update(PdmBiSlittingproductionplan dto); /** * 多选删除 diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/service/dto/SlittingproductionplanDto.java b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/service/dto/SlittingproductionplanDto.java index fbb61a5..0b3c93b 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/service/dto/SlittingproductionplanDto.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/service/dto/SlittingproductionplanDto.java @@ -170,4 +170,10 @@ public class SlittingproductionplanDto implements Serializable { /** 分切重量 */ private String paper_weight; + /** 木箱物料编码 */ + private String box_code; + /** 木箱描述 */ + private String box_description; + /** 批次号 */ + private String pscn; } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/service/impl/RawfoilworkorderServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/service/impl/RawfoilworkorderServiceImpl.java index 668db55..1e47128 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/service/impl/RawfoilworkorderServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/service/impl/RawfoilworkorderServiceImpl.java @@ -1,250 +1,250 @@ -package org.nl.wms.pdm.service.impl; - - -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.map.MapUtil; -import cn.hutool.core.util.IdUtil; -import cn.hutool.core.util.ObjectUtil; -import 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.wql.WQL; -import org.nl.modules.wql.core.bean.WQLObject; -import org.nl.modules.wql.util.WqlUtil; -import org.nl.wms.basedata.st.service.impl.UserAreaServiceImpl; -import org.nl.wms.pdm.service.RawfoilworkorderService; -import org.nl.wms.pdm.service.dto.RawfoilworkorderDto; -import org.springframework.data.domain.Pageable; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.List; -import java.util.Map; - -/** - * @author liuxy - * @description 服务实现 - * @date 2022-10-08 - **/ -@Service -@RequiredArgsConstructor -@Slf4j -public class RawfoilworkorderServiceImpl implements RawfoilworkorderService { - - @Override - public Map queryAll(Map whereJson, Pageable page) { - String product_area = MapUtil.getStr(whereJson, "product_area"); - String resource_name = MapUtil.getStr(whereJson, "resource_name"); - String status = MapUtil.getStr(whereJson, "status"); - String container_name = MapUtil.getStr(whereJson, "container_name"); - String begin_time = MapUtil.getStr(whereJson, "begin_time"); - String end_time = MapUtil.getStr(whereJson, "end_time"); - - //获取人员对应的区域 - UserAreaServiceImpl userAreaService = new UserAreaServiceImpl(); - String in_area_id = userAreaService.getInArea(); - - JSONObject map = new JSONObject(); - map.put("flag", "1"); - if (ObjectUtil.isNotEmpty(resource_name)) { - map.put("resource_name", "%" + resource_name + "%"); - } - if (ObjectUtil.isNotEmpty(container_name)) { - map.put("container_name", "%" + container_name + "%"); - } - map.put("begin_time", begin_time); - map.put("end_time", end_time); - map.put("product_area", product_area); - map.put("status", status); - if (ObjectUtil.isNotEmpty(in_area_id)) { - map.put("in_area_id", in_area_id); - } - - JSONObject json = WQL.getWO("PDM_BI_RAWFOILWORKORDER_01").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "der.container_name"); - return json; - } - - @Override - public List queryAll(Map whereJson) { - WQLObject wo = WQLObject.getWQLObject("pdm_bi_rawfoilworkorder"); - JSONArray arr = wo.query().getResultJSONArray(0); - if (ObjectUtil.isNotEmpty(arr)) { - return arr.toJavaList(RawfoilworkorderDto.class); - } - return null; - } - - @Override - public RawfoilworkorderDto findById(Long workorder_id) { - WQLObject wo = WQLObject.getWQLObject("pdm_bi_rawfoilworkorder"); - JSONObject json = wo.query("workorder_id = '" + workorder_id + "'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(json)) { - return json.toJavaObject(RawfoilworkorderDto.class); - } - return null; - } - - @Override - public RawfoilworkorderDto findByCode(String code) { - WQLObject wo = WQLObject.getWQLObject("pdm_bi_rawfoilworkorder"); - JSONObject json = wo.query("code ='" + code + "'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(json)) { - return json.toJavaObject(RawfoilworkorderDto.class); - } - return null; - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void create(RawfoilworkorderDto dto) { - WQLObject schBasePointService = WQLObject.getWQLObject("ST_IVT_SbPointIvt"); - WQLObject wo = WQLObject.getWQLObject("pdm_bi_rawfoilworkorder"); - WQLObject materTab = WQLObject.getWQLObject("md_me_materialbase"); - - String container_name = dto.getContainer_name(); - JSONObject json = wo.query("container_name = '" + container_name + "' and status <> '09'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(json)) { - throw new BadRequestException("母卷号已存在"); - } - - String currentUserId = SecurityUtils.getCurrentUserId(); - String nickName = SecurityUtils.getCurrentNickName(); - String now = DateUtil.now(); - - JSONObject jsonPoint = schBasePointService.query("ext_code ='" + dto.getResource_name() + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(jsonPoint)) { - throw new BadRequestException("点位设备不存在"); - } - - JSONObject josnMater = materTab.query("material_code ='" + dto.getProduct_name() + "' and is_delete = '0' and is_used = '1'").uniqueResult(0); - if (ObjectUtil.isEmpty(josnMater)) { - throw new BadRequestException("物料不存在"); - } - - - dto.setWorkorder_id(IdUtil.getSnowflake(1, 1).nextId()); - dto.setCreate_id(currentUserId); - dto.setCreate_name(nickName); - dto.setUpdate_optid(currentUserId); - dto.setUpdate_optname(nickName); - dto.setUpdate_time(now); - dto.setCreate_time(now); - dto.setIs_delete("0"); - dto.setProduct_area(jsonPoint.getString("product_area")); - dto.setPoint_code(jsonPoint.getString("point_code")); - dto.setStatus("01"); - - JSONObject json1 = JSONObject.parseObject(JSON.toJSONString(dto)); - wo.insert(json1); - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void update(RawfoilworkorderDto dto) { - RawfoilworkorderDto entity = this.findById(dto.getWorkorder_id()); - if (entity == null) { - throw new BadRequestException("被删除或无权限,操作失败!"); - } - - WQLObject schBasePointService = WQLObject.getWQLObject("ST_IVT_SbPointIvt"); - WQLObject wo = WQLObject.getWQLObject("pdm_bi_rawfoilworkorder"); - WQLObject materTab = WQLObject.getWQLObject("md_me_materialbase"); - - String container_name = dto.getContainer_name(); - - String currentUserId = SecurityUtils.getCurrentUserId(); - String nickName = SecurityUtils.getCurrentNickName(); - String now = DateUtil.now(); - - JSONObject jsonPoint = schBasePointService.query("ext_code ='" + dto.getResource_name() + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(jsonPoint)) { - throw new BadRequestException("点位设备不存在"); - } - - JSONObject josnMater = materTab.query("material_code ='" + dto.getProduct_name() + "' and is_delete = '0' and is_used = '1'").uniqueResult(0); - if (ObjectUtil.isEmpty(josnMater)) { - throw new BadRequestException("物料不存在"); - } - - - dto.setUpdate_time(now); - dto.setUpdate_optid(currentUserId); - dto.setUpdate_optname(nickName); - dto.setProduct_area(jsonPoint.getString("product_area")); - dto.setPoint_code(jsonPoint.getString("point_code")); - - JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); - wo.update(json); - - JSONArray resultJSONArray = wo.query("container_name = '" + container_name + "' and status <> '09'").getResultJSONArray(0); - if (resultJSONArray.size() > 1) { - throw new BadRequestException("母卷号已存在"); - } - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void deleteAll(Long[] ids) { - String currentUserId = SecurityUtils.getCurrentUserId(); - String nickName = SecurityUtils.getCurrentNickName(); - String now = DateUtil.now(); - - WQLObject wo = WQLObject.getWQLObject("pdm_bi_rawfoilworkorder"); - for (Long workorder_id : ids) { - JSONObject param = new JSONObject(); - param.put("workorder_id", String.valueOf(workorder_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 - @Transactional(rollbackFor = Exception.class) - public void compelEnd(JSONObject whereJson) { - String workorder_id = whereJson.getString("workorder_id"); - String currentUserId = SecurityUtils.getCurrentUserId(); - String currentUsername = SecurityUtils.getCurrentUsername(); - - //查询该生箔工单是否存在未完成的任务 - String container_name = whereJson.getString("container_name"); - - JSONObject task_jo = WQLObject.getWQLObject("sch_base_task").query("material_code = '" + container_name + "' AND task_status < '07' AND is_delete = '0'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(task_jo)) { - throw new BadRequestException("该生箔工单存在未完成的任务,请先完成任务!"); - } - - WQLObject tab = WQLObject.getWQLObject("PDM_BI_RawFoilWorkOrder"); - - JSONObject json = tab.query("workorder_id = '" + workorder_id + "'").uniqueResult(0); - json.put("status", "09"); - json.put("finish_type", "02"); - json.put("realend_time", DateUtil.now()); - json.put("update_optid", currentUserId); - json.put("update_optname", currentUsername); - json.put("update_time", DateUtil.now()); - tab.update(json); - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void confirm(JSONObject whereJson) { - WQLObject tab = WQLObject.getWQLObject("PDM_BI_RawFoilWorkOrder"); - String productin_qty = whereJson.getString("productin_qty"); - - JSONObject jsonRaw = tab.query("workorder_id = '" + whereJson.getString("workorder_id") + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(productin_qty)) { - jsonRaw.put("productin_qty", 0); - } else { - jsonRaw.put("productin_qty", whereJson.getDoubleValue("productin_qty")); - } - tab.update(jsonRaw); - } - -} +//package org.nl.wms.pdm.service.impl; +// +// +//import cn.hutool.core.date.DateUtil; +//import cn.hutool.core.map.MapUtil; +//import cn.hutool.core.util.IdUtil; +//import cn.hutool.core.util.ObjectUtil; +//import 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.wql.WQL; +//import org.nl.modules.wql.core.bean.WQLObject; +//import org.nl.modules.wql.util.WqlUtil; +//import org.nl.wms.basedata.st.service.impl.UserAreaServiceImpl; +//import org.nl.wms.pdm.service.RawfoilworkorderService; +//import org.nl.wms.pdm.service.dto.RawfoilworkorderDto; +//import org.springframework.data.domain.Pageable; +//import org.springframework.stereotype.Service; +//import org.springframework.transaction.annotation.Transactional; +// +//import java.util.List; +//import java.util.Map; +// +///** +// * @author liuxy +// * @description 服务实现 +// * @date 2022-10-08 +// **/ +//@Service +//@RequiredArgsConstructor +//@Slf4j +//public class RawfoilworkorderServiceImpl implements RawfoilworkorderService { +// +// @Override +// public Map queryAll(Map whereJson, Pageable page) { +// String product_area = MapUtil.getStr(whereJson, "product_area"); +// String resource_name = MapUtil.getStr(whereJson, "resource_name"); +// String status = MapUtil.getStr(whereJson, "status"); +// String container_name = MapUtil.getStr(whereJson, "container_name"); +// String begin_time = MapUtil.getStr(whereJson, "begin_time"); +// String end_time = MapUtil.getStr(whereJson, "end_time"); +// +// //获取人员对应的区域 +// UserAreaServiceImpl userAreaService = new UserAreaServiceImpl(); +// String in_area_id = userAreaService.getInArea(); +// +// JSONObject map = new JSONObject(); +// map.put("flag", "1"); +// if (ObjectUtil.isNotEmpty(resource_name)) { +// map.put("resource_name", "%" + resource_name + "%"); +// } +// if (ObjectUtil.isNotEmpty(container_name)) { +// map.put("container_name", "%" + container_name + "%"); +// } +// map.put("begin_time", begin_time); +// map.put("end_time", end_time); +// map.put("product_area", product_area); +// map.put("status", status); +// if (ObjectUtil.isNotEmpty(in_area_id)) { +// map.put("in_area_id", in_area_id); +// } +// +// JSONObject json = WQL.getWO("PDM_BI_RAWFOILWORKORDER_01").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "der.container_name"); +// return json; +// } +// +// @Override +// public List queryAll(Map whereJson) { +// WQLObject wo = WQLObject.getWQLObject("pdm_bi_rawfoilworkorder"); +// JSONArray arr = wo.query().getResultJSONArray(0); +// if (ObjectUtil.isNotEmpty(arr)) { +// return arr.toJavaList(RawfoilworkorderDto.class); +// } +// return null; +// } +// +// @Override +// public RawfoilworkorderDto findById(Long workorder_id) { +// WQLObject wo = WQLObject.getWQLObject("pdm_bi_rawfoilworkorder"); +// JSONObject json = wo.query("workorder_id = '" + workorder_id + "'").uniqueResult(0); +// if (ObjectUtil.isNotEmpty(json)) { +// return json.toJavaObject(RawfoilworkorderDto.class); +// } +// return null; +// } +// +// @Override +// public RawfoilworkorderDto findByCode(String code) { +// WQLObject wo = WQLObject.getWQLObject("pdm_bi_rawfoilworkorder"); +// JSONObject json = wo.query("code ='" + code + "'").uniqueResult(0); +// if (ObjectUtil.isNotEmpty(json)) { +// return json.toJavaObject(RawfoilworkorderDto.class); +// } +// return null; +// } +// +// @Override +// @Transactional(rollbackFor = Exception.class) +// public void create(RawfoilworkorderDto dto) { +// WQLObject schBasePointService = WQLObject.getWQLObject("ST_IVT_SbPointIvt"); +// WQLObject wo = WQLObject.getWQLObject("pdm_bi_rawfoilworkorder"); +// WQLObject materTab = WQLObject.getWQLObject("md_me_materialbase"); +// +// String container_name = dto.getContainer_name(); +// JSONObject json = wo.query("container_name = '" + container_name + "' and status <> '09'").uniqueResult(0); +// if (ObjectUtil.isNotEmpty(json)) { +// throw new BadRequestException("母卷号已存在"); +// } +// +// String currentUserId = SecurityUtils.getCurrentUserId(); +// String nickName = SecurityUtils.getCurrentNickName(); +// String now = DateUtil.now(); +// +// JSONObject jsonPoint = schBasePointService.query("ext_code ='" + dto.getResource_name() + "'").uniqueResult(0); +// if (ObjectUtil.isEmpty(jsonPoint)) { +// throw new BadRequestException("点位设备不存在"); +// } +// +// JSONObject josnMater = materTab.query("material_code ='" + dto.getProduct_name() + "' and is_delete = '0' and is_used = '1'").uniqueResult(0); +// if (ObjectUtil.isEmpty(josnMater)) { +// throw new BadRequestException("物料不存在"); +// } +// +// +// dto.setWorkorder_id(IdUtil.getSnowflake(1, 1).nextId()); +// dto.setCreate_id(currentUserId); +// dto.setCreate_name(nickName); +// dto.setUpdate_optid(currentUserId); +// dto.setUpdate_optname(nickName); +// dto.setUpdate_time(now); +// dto.setCreate_time(now); +// dto.setIs_delete("0"); +// dto.setProduct_area(jsonPoint.getString("product_area")); +// dto.setPoint_code(jsonPoint.getString("point_code")); +// dto.setStatus("00"); +// +// JSONObject json1 = JSONObject.parseObject(JSON.toJSONString(dto)); +// wo.insert(json1); +// } +// +// @Override +// @Transactional(rollbackFor = Exception.class) +// public void update(RawfoilworkorderDto dto) { +// RawfoilworkorderDto entity = this.findById(dto.getWorkorder_id()); +// if (entity == null) { +// throw new BadRequestException("被删除或无权限,操作失败!"); +// } +// +// WQLObject schBasePointService = WQLObject.getWQLObject("ST_IVT_SbPointIvt"); +// WQLObject wo = WQLObject.getWQLObject("pdm_bi_rawfoilworkorder"); +// WQLObject materTab = WQLObject.getWQLObject("md_me_materialbase"); +// +// String container_name = dto.getContainer_name(); +// +// String currentUserId = SecurityUtils.getCurrentUserId(); +// String nickName = SecurityUtils.getCurrentNickName(); +// String now = DateUtil.now(); +// +// JSONObject jsonPoint = schBasePointService.query("ext_code ='" + dto.getResource_name() + "'").uniqueResult(0); +// if (ObjectUtil.isEmpty(jsonPoint)) { +// throw new BadRequestException("点位设备不存在"); +// } +// +// JSONObject josnMater = materTab.query("material_code ='" + dto.getProduct_name() + "' and is_delete = '0' and is_used = '1'").uniqueResult(0); +// if (ObjectUtil.isEmpty(josnMater)) { +// throw new BadRequestException("物料不存在"); +// } +// +// +// dto.setUpdate_time(now); +// dto.setUpdate_optid(currentUserId); +// dto.setUpdate_optname(nickName); +// dto.setProduct_area(jsonPoint.getString("product_area")); +// dto.setPoint_code(jsonPoint.getString("point_code")); +// +// JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); +// wo.update(json); +// +// JSONArray resultJSONArray = wo.query("container_name = '" + container_name + "' and status <> '09'").getResultJSONArray(0); +// if (resultJSONArray.size() > 1) { +// throw new BadRequestException("母卷号已存在"); +// } +// } +// +// @Override +// @Transactional(rollbackFor = Exception.class) +// public void deleteAll(Long[] ids) { +// String currentUserId = SecurityUtils.getCurrentUserId(); +// String nickName = SecurityUtils.getCurrentNickName(); +// String now = DateUtil.now(); +// +// WQLObject wo = WQLObject.getWQLObject("pdm_bi_rawfoilworkorder"); +// for (Long workorder_id : ids) { +// JSONObject param = new JSONObject(); +// param.put("workorder_id", String.valueOf(workorder_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 +// @Transactional(rollbackFor = Exception.class) +// public void compelEnd(JSONObject whereJson) { +// String workorder_id = whereJson.getString("workorder_id"); +// String currentUserId = SecurityUtils.getCurrentUserId(); +// String currentUsername = SecurityUtils.getCurrentUsername(); +// +// //查询该生箔工单是否存在未完成的任务 +// String container_name = whereJson.getString("container_name"); +// +// JSONObject task_jo = WQLObject.getWQLObject("sch_base_task").query("material_code = '" + container_name + "' AND task_status < '07' AND is_delete = '0'").uniqueResult(0); +// if (ObjectUtil.isNotEmpty(task_jo)) { +// throw new BadRequestException("该生箔工单存在未完成的任务,请先完成任务!"); +// } +// +// WQLObject tab = WQLObject.getWQLObject("PDM_BI_RawFoilWorkOrder"); +// +// JSONObject json = tab.query("workorder_id = '" + workorder_id + "'").uniqueResult(0); +// json.put("status", "09"); +// json.put("finish_type", "02"); +// json.put("realend_time", DateUtil.now()); +// json.put("update_optid", currentUserId); +// json.put("update_optname", currentUsername); +// json.put("update_time", DateUtil.now()); +// tab.update(json); +// } +// +// @Override +// @Transactional(rollbackFor = Exception.class) +// public void confirm(JSONObject whereJson) { +// WQLObject tab = WQLObject.getWQLObject("PDM_BI_RawFoilWorkOrder"); +// String productin_qty = whereJson.getString("productin_qty"); +// +// JSONObject jsonRaw = tab.query("workorder_id = '" + whereJson.getString("workorder_id") + "'").uniqueResult(0); +// if (ObjectUtil.isEmpty(productin_qty)) { +// jsonRaw.put("productin_qty", 0); +// } else { +// jsonRaw.put("productin_qty", whereJson.getDoubleValue("productin_qty")); +// } +// tab.update(jsonRaw); +// } +// +//} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/service/impl/SlittingproductionplanServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/service/impl/SlittingproductionplanServiceImpl.java index ded9e2f..65bc354 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/service/impl/SlittingproductionplanServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/service/impl/SlittingproductionplanServiceImpl.java @@ -11,6 +11,8 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.nl.b_lms.pdm.bi.slittingproductionplan.service.dao.PdmBiSlittingproductionplan; +import org.nl.b_lms.pdm.bi.slittingproductionplan.service.dao.mapper.PdmBiSlittingproductionplanMapper; import org.nl.common.utils.SecurityUtils; import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.wql.WQL; @@ -20,6 +22,7 @@ import org.nl.wms.basedata.st.service.impl.UserAreaServiceImpl; import org.nl.wms.ext.mes.service.LmsToMesService; import org.nl.wms.pdm.service.SlittingproductionplanService; import org.nl.wms.pdm.service.dto.SlittingproductionplanDto; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -39,6 +42,8 @@ import java.util.Map; public class SlittingproductionplanServiceImpl implements SlittingproductionplanService { private final LmsToMesService lmsToMesService; + @Autowired + PdmBiSlittingproductionplanMapper pdmBiSlittingproductionplanMapper; @Override public Map queryAll(Map whereJson, Pageable page) { @@ -92,38 +97,38 @@ public class SlittingproductionplanServiceImpl implements Slittingproductionplan } @Override - public List queryAll(Map whereJson) { + public List queryAll(Map whereJson) { WQLObject wo = WQLObject.getWQLObject("pdm_bi_slittingproductionplan"); JSONArray arr = wo.query().getResultJSONArray(0); if (ObjectUtil.isNotEmpty(arr)) { - return arr.toJavaList(SlittingproductionplanDto.class); + return arr.toJavaList(PdmBiSlittingproductionplan.class); } return null; } @Override - public SlittingproductionplanDto findById(Long workorder_id) { + public PdmBiSlittingproductionplan findById(Long workorder_id) { WQLObject wo = WQLObject.getWQLObject("pdm_bi_slittingproductionplan"); JSONObject json = wo.query("workorder_id = '" + workorder_id + "'").uniqueResult(0); if (ObjectUtil.isNotEmpty(json)) { - return json.toJavaObject(SlittingproductionplanDto.class); + return json.toJavaObject(PdmBiSlittingproductionplan.class); } return null; } @Override - public SlittingproductionplanDto findByCode(String code) { + public PdmBiSlittingproductionplan findByCode(String code) { WQLObject wo = WQLObject.getWQLObject("pdm_bi_slittingproductionplan"); JSONObject json = wo.query("code ='" + code + "'").uniqueResult(0); if (ObjectUtil.isNotEmpty(json)) { - return json.toJavaObject(SlittingproductionplanDto.class); + return json.toJavaObject(PdmBiSlittingproductionplan.class); } return null; } @Override @Transactional(rollbackFor = Exception.class) - public void create(SlittingproductionplanDto dto) { + public void create(PdmBiSlittingproductionplan dto) { String currentUserId = SecurityUtils.getCurrentUserId(); String nickName = SecurityUtils.getCurrentNickName(); String now = DateUtil.now(); @@ -133,20 +138,25 @@ public class SlittingproductionplanServiceImpl implements Slittingproductionplan dto.setUpdate_optname(nickName); dto.setUpdate_time(now); - JSONObject jo = (JSONObject) JSON.toJSON(dto); - jo.put("status", "01"); - jo.put("is_parent_ok", "0"); - jo.put("is_child_tz_ok", "0"); - jo.put("is_child_ps_ok", "0"); - jo.put("is_delete", "0"); - WQLObject wo = WQLObject.getWQLObject("pdm_bi_slittingproductionplan"); - wo.insert(jo); + dto.setIs_call("0"); + dto.setStatus("01"); + dto.setIs_delete("0"); + dto.setIs_paper_ok("0"); + dto.setIs_child_tz_ok("0"); + dto.setIs_child_ps_ok("0"); + dto.setIs_parent_ok("0"); + if ("1".equals(dto.getOrder_type())){ + dto.setMaterial_type("FG1"); + }else { + dto.setMaterial_type("FG2"); + } + pdmBiSlittingproductionplanMapper.insert(dto); } @Override @Transactional(rollbackFor = Exception.class) - public void update(SlittingproductionplanDto dto) { - SlittingproductionplanDto entity = this.findById(dto.getWorkorder_id()); + public void update(PdmBiSlittingproductionplan dto) { + PdmBiSlittingproductionplan entity = this.findById(dto.getWorkorder_id()); if (entity == null) { throw new BadRequestException("被删除或无权限,操作失败!"); } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/wql/pdm.xls b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/wql/pdm.xls index 6a9c445b375035fccc4222e4cb2840a38b750a9f..27686d052265717d47dd3bb8afe11a752a55505d 100644 GIT binary patch delta 86055 zcmcG%2bf&N5w_dCl2$8}BcPl!$`PeiMnVCU5h&*X%19*53PcpaFu;&8*~pk+ky%8} z*+kpqVE@Koz<|l>h9C0yQ*il>^F7GuCM!>8O84y zW5(ND{cEbUy<`1OdqGjv8vU&?Bk|yB_FP%A z%hs=M>}IpYY%r_LB6EycVX`Clo1Hyuzmn`F`yE}~EIsC+L8f?5t(v(;*#}x3ki8Dy z|7_JDds3$wdv0vCqS~IjIy`OnwCHq5m2B+}zsr8xbz62>*NgXT>Nc_Jp4WTUvDwFZ zHrVq{ujM7hm)UVW|NPXR34==-XIoFHXHU!ap3+)=J3ah%27c>h&&<{z-7Wjcl>zF`fj z-5pAYO>2iKII>>RLnfP9G~7Nc?mZ&^ zKT4CbrAOAwUN)mvw)v6$?Bm(`M~<*h$p25`|DJRpJAYe+9zy=FAG|B?T{<4W-%O#vWG8gob5Spe_NFOYDKf`)VcL+75`iIq51n| ze_YW(q{WbSD=M+sg|k{^ubNuV*2uP5*3IrG|JRiNYsvq$@jrW{2t(#y)B3V2vh^1= z&HiTk{zdg{)=ueJR9}BIu-P_;^(<-#os&ivHL}_BXALiEtUsFAZ2j58?fzoR(TnQY zrm%a2Z6=83M6iX6TA)KmHqZ85+}5`A+*UUG<;3RMs~2}FYVCjBpC)I|TN3?g>%Fw? z{BPMcOZUrmUDh_6TPg#zsH@E`n%k6PHQRbwciY2Pv_1WAMZL5N`m?BaY@0q}W?%Wg zU#Qz(>tetc4Y1kPhmS5AC=HR_Z^bk=Q_)ZsrFFB9uaHq*G(wxIRDX<&6~0_ioLx4z z35_cn9qcR`6MnT50Pa>aF%DHd&;WVm1nd)sqq5V zI;1KF7__z8a?_L_XP0iH?6Rg&c1?{FiZ`EX8ki4n$v$}MsAl_>)HUYIq7v#U{<3vd z{HRrAPQj0&Y|9$mvIm{kde5@cuCJ1P_{`3GYMk|Mm1=!z8uQ|w&(3MmCR5ee7uIZ@ zzHG&Bjwv>Fo!N+4a0R}P0o3+32boq|EZPt7@ z9ctF2<`O{n6y5f2Nq<<H(7g?sm*D48v&`TU)_7^jm*>@W zuVzO+c;KG*?|GnBcG@$&v!%}!XPZ3NHG9f4J+s4}>$m6f$M31S=a0`EY4>b+?j2ig zsOf-Pa>@&DXRmm&!Jd&X9$dZ49y9wiv>cl4@ym@luCX!AZ!zZ9YQ}6TH>O$>V{SsX zH!d;R`ad_zKJCcDR?%DHyKH{Qv_K@r|Z#2(zXJ=v3tZPb&>cLiH zYM7*~I7L=HMMiT9udSUTYnU&~IB=tUp_3gbvLOiro2JxjmQt^IO1%~-^)f9}Dz-|g z*gBQTafs8HR4l-@M zcG7zLp`6hdd_T8KX}$vtTctwl;dbM-Y#mkFL6qWA=Hy;yhg6+xLFkP4h5}S6n^Ki_ z5~aMS3F{R4xl^iAHustKEcx1H{g>YEY<4e+KQsCwoB!-eE@U^v3;b_tD7#~q+>+g4 z=sA{i3h({yF!Wp-zjmRuc*n4-yoO!&OnY80`x|_zGWOXnOFw&vGAim(sA$hy@AR-m zo!?75<|bu-eQ#~!})CUw)j8CXSWxS>;zRN7zR7*8cqS0Eag%aD5qn9HM8ZrfT z?uQpj%nrN5){u*;LE&u6hNg;YSfkFiY+^0dLWzw_g&d}ZCeiTXguY_Y$Hu3IVw0gl zHoF$7kPl}n0KEhG^h(oEmB*G;jn})X)fZD9_}-qyvSwUA|NYN+aA(>2eOuwE7&5X>yLJAlLp^ zFo#WeLB@s3Ie^mS97<_&j+Qhz$4#MpEPI+msPF~KIZV>z94`s^o)12mQ&er>SH|3z z9r5$wVUIB>+y5W8XG(bM;l|ZH25+~*NrSgjp^P_3p^Rg^P{v_eDC58jGC##~CM|BVr~yPGZZ?)JHJrI zTRF<$KQHFp8HFn2>bg+Im2;ttE9QI|CoBG2YN^3L7nWK7wH$Lh>(HYW8B3L{#0SGl z>%UgHN*tZ5EfKt=2z6H5)}d5{Qkzh!f>PU1s)`ar3DOGV~r%VnLGsw7HP6Qyd2QnBe~xvbk>#0QTtB$!faLCgUJF6&Ur zpjd=?y{i^cs*)&GO_Zu7NqhA$WfiQBM%uRk0%>_|IoEYSE))2zrP^yxFnu9};i1;EAu|&iW)Fgs87!j=n!CPs)9qP33F4{cvp-JCEgYBHQp7mM8YW4 zq!XOB*Kq!8F9=3Fy4leXa+KB*#F$VbVr(c85nm%BmWUXKnnds^Kqop1p*9F>?Rcl9 zwh%Ihgd!0WLWzipp+rP15pgJ9BZ3bVB03AAjyN&NT~|jClS7GwDWOEdZ5q#ni(OnP-+2X|+PEEap z7xi#&M=uzajAqxv?2%t0VkWeZP~Q=H2%$a*8|^IY;|+VeJ`i*5YzM3l#9TWkl&U6P ztClDgL(LHm!KE0T=p_g~QM%c=PD=xE;>b{<6Gx$xA-;ilF)zGGFJg&a%*Si=q9J|~ z(OVFVuWhso+;t7biG`s=Cl-Ygortf|iN$!$X0U5+h&gbhrFt$7slJb>ZzLWpaVi># z2TMbV9xMwbc0+uP4#W~2SdN+`aG6O$Um-N+{MXH{aB3P0!h7CWdYX;IHfo$`qsG$H zu_h5K9ioXt^bupyK%|K%5n*oYU2;4+$s0fIOHh)s5ryYK)YHY3TQEpq_cX>&j@ zP`o)H4nRBQmx`ffvm+cx0_VShf;bR}wRVeBdLR(9gZBplF*~%=fk5QH#z(eqrvovT zy4hnLg6lszF-Qnag|O8TnhGJaEfk43E|iFfuMrVTL>!NrY$q-!i5M&h26)%n6P%W2 zf;cghNH{5!NI22Yf6Zj!5vvlh9aV{Fj-NyvEQscU@Ygj@v{Um$J2g+VQ*$Bsc4{u| zROaWu77j5)5R4{ou{)flj3yszPY$IjW@}!lYNAvvQ7Sgu>?yd8PH>q^Cx!~4r4V-d z`LCrQPIZWu@M5byEtH6euMrVT`G{5yF-#Dx1aZ34!szv}_KZ*>;Y^e|@ZN5PhT59< zA`!7F5ZQlyH@hGh*9I5oull)*XqzHymm+JQBI}SM>zFU&PLU1S8bUVYaPhLWc)1HQ zI?`IaJUf)=T^>qoCzj+%*$%hOHhTq%M6e&}#Ypj@JrLXMmF~j! zg19P_h`2hG=)`YBiB7~43D@8?5;!X81PBa9F;st?z1CgW0f^)6b)i(noM5jHrK*Wi zHIp+pgx8AAiS|a6h~OZj6Qjh5jzYM})$AyQ-$|)As}gZ@c#()$B4T%V4T$XepI$8L z_q|5E_niOp7MphuaV+uQ6nhK)XN;ZE(UHs3(eWAV#7vhCNE}aWy zToFniVr>I-%>I3G}Yeg>hN|t%*s~=KMv0eJxxp8Nz?3o zxJ2$G+(^^x{h?F^r3XT(DoW*{R1KvEL#Y_0y(n?&se+%=(c&@kl$l{4a#gDUaiw`U zl&YAS_7Rly!m4JLT*#1m6|8J#+1W6guT@1IDmA6d$T8S7M-qLEGhJyOb@~`*nrR<% z`l_Oy=*x_t!m0^{yy2*@L=-Z#qzV~Uy3#!E6jp=6BkU6>?ZxJuQKh+-UuqO@Q0k~B zIv6`r9gG`YX`XaCkny0Br<@X6pRa^>G?g?GC5#TK5=MruG*3Gv)y0r!oQ~=RIyeJR z#{r@P`AesRp`RsHC|lVT9*MX<|lqt~Ad(9W_M93r|R>=39Qx7Y*E#;VIFlHVew8=W0idd(;)L}G*b!OUG z@}=Ftsfl$uN*%^S3hHDqfH+sNQfH~eh(LlW~Vz&Mq$PIvK;F$H>9 z4_|aJX&9$C*3I+~g$xf=gmTVfrCw5p`}>M@I0v#$Z>hr#dc``N6IrK^)Zs2W7@t97 zX;X2MWTn1hePdKo>$yiRw4ReE>-H0c-0>2c>>kdgtkYlWaLZb;&H-FxveE#l#7!qH zODf`I%Q^$aFzy-`NV9Usc%``-n<{>(6P$!ucaZ4g{%;}lCF^ifW}U&TlaV7jtdxXu zmS&}cMG?1P73*-)W}P8YhkK}sbvTK$&QPhtT~N}XHk`pYtFzKDsl}S;n zHL&LW1Cy(qNx9B-?Ayci1Vb6(Pc)PZwuUb8?`3>26v{ZSLzWv^*ES3)7KsYZuCcnx zI9V3TIQdb<`E@OpUbzqSNAG&JS^onpZQ&i((8w84^RQJJ?Sb1C9Q%bbt|O@86{zUqTSTjK)D~9fC}s89_3hNW-uDmuruIct*lW7te+vgH z|5|ADtAWh(=xEa{Jma|#Xl7r6jCw7)rkQ;?l&YY_#*m$e#dO}xz7k%nhSHxx31{By ztD#igG`FvXQVCvrJ(Oyo^hPKloMPV$rJ5+c6-u>G`m>Z8)3(|ua@JH!>zHP_bq#E* zOkH@S%ZVaXDmQ<1Rf^zDxp_O3s+b!MyGj=`Rn3ED2TEKq6yf1r?&QU&#g5vG@I?`B zu^UC>+vXkly394@LW~<-m0&9*%{>3P>U^674SQP=T-kF zoJ%A+UN2M1%eh7>Hy=Q#C3^m$gK(Xso^y>9J!j@kJ+GGVyxRYS^X?~{Ni(D~xwtAf zA2~Stv)p{_;B0t>b8YpYnH%IDUYvjz|4%rl8NxN6R-H#C%grYa&V^aI`J01qVWw~{ z$|Aga@VvUf`Q+sosV;D~AP=>ao4-T8*EB_`28MOoAlz$mXEe6$M?YuuOYd>6){Ol> za&=c+3u}3!SMueq&3)0>zSA%&;`rt&?9kkMP3*kslVq6Ggk2At&qQ-myj%lk%eR_G z;*=P1%YCc7r*&fDLP>~^aYQ1KUdnd`k;1&ZrH+TGO7 zebCbO%ym7$URZa6)vpHfN`u@hEo__WPI%9^2iU`l^5#rV^lhNpPqBVdZ<{A8b2E3l z6j}QeSqG8%2gd|?m~_mS71;^7r!dnxJN$#LONuVe;odfHN4FGN_Y~PdDY72)jt@$yJ~%~oaEfe5ifpLL z?%CSHuC11vRm*nG)oy1O^rx-*578OZ0k`$PdsuT}DV9Ietm(egn#Z?TGx2n5MqO&n z+q~`>w)@ z+-7;1?`>|Y3T14=csuMbw-z7#QKqe`Yq$3sC58{X0Tpv^cC?+a;@j8JPIZedZ(9Ch z%gg*?YilQ4cm|gXcu)4#xn9qgaZ2OAruIwxzgN-%|9w$bM`k@*USTnYC%SvFlGPYs z|9>vVz^6YJ(|h`AEOjwv{{pl5%#d*n$MV-?Upbd_P4@3l;^VQxnr!)hS(GuGT5(ZU z$1ld@!5r6OE$r70#kE*V`wdEAEtcES#qOV}xb)&%Vk$$(y$IjpimQeF)*-m!YH9!D z5L|KTqn|6TkIbwf_v;R>xNe;0mRwCxsWNC-YL&8ExYBB2zjIJVq*~hVopP?U&d#ms zYTL~43&|$9pgP`Kwkq+U)&`Ra1K#M_Bd(%a*dLr?uA*AnADv>ZqN>{5yIpOQOe#%0ntEK(bK^gVZZeqmiL33V^`)(@9TOKyS>L*iKH^~$VXlv;v zF1lLSeGbYnSxYXzWcV>m)Dz|*!)?zaLQt~KCjJ0~y6nBJD}yW%pbMulY( zZ$O#1QKPLG!ke{)(Wd|_d*E_ z;rlIV2#V4f4FYosXg?aH22^^m<5zk%QJ*s zOAu_dTIlwtOm!&rYtxEYdETLh9*Sa|vD}oP%X-+ z>kY^q-qSYBJPPHVZJJ6h2)O0alT?hWmP?t9%WzV;spnMktd`!-Jf{^$G|y@2R9_D+ z{V0cmIF9PUC2sNGGw;N^ zT0!-gZT1HzG%Bb0bt;iPXZi^7R778^<8G%CuRJ zS}{mnj#)+fhk@#Hj4w5fhq<(Wc#!KsJORDjo7@;C-x!8MWA;x|D5%&_T%y3fK6ak{ zL++hE_P`cTn`h+fS<~0*m+pBP_p6(0*w-G>?hocfb2M@^=@l7cs+&6x6{r6}I_v=4 zPA6j4rSnbEp*8-?#SDnE5%iD~1LC_)N7o1pito-1>1UhSYjU&u*$(#B+({^n--QWt z7iL*)M=pY?LJu)9P99b8oYZd91+TIzo1z`piiu4*&U5cU=hR!#oNt&nMP*dVRWz0A zu_d02+KoZ0ox_t+yK%%xmGZ5xD@AEDQ98Z9?a(Y;DI?EybJ_lO#eut11_Wd9Xz>Ad z%l;K7L$2NH=B`eEk&F1cxo!jPhMIX-=588jr><$u*WA9zFZ$c0$l9jJ7%lMEmRa4Z zFj`P3<3kRz+@e7hLdu;}s&`3|b#*H4fQo`R17ih|s5?5w3ZhIcW30e$-h7OLp@LXX zuk8g{L-RiR5C7aIFA*x3?_B+V7b{SOzL}Dt0^Ruy5O8-16%73U7%IrM>0}$)A^Kye z{KyPby$Oeg=gG>f@<$|O3uP8+4H*Zzo|kHkfxg`gK$%Yop2*s62BO5fr!@xpb|9RBgZWSmX@jY0yW!iaX-Jz?L*z!lu_ZNx`JwG* zs56AeySAHQ&XBfh2oE>$Xjg2Kw!x6L!4N*9+lnFE3%sX?ywjT6;bK@@l>TqF+`JRH z<#xMVp0A1t5T37!2@t*=+9f~$>i}b8{-XnojrorbFgWHvI>6wV|LB0$i}{ZZXg$e) z=rQmPP#hB=9THpa4p?~l1PJl@`Hv3h|7Ky!Ei(yPLATr;;ZnJL^b^~tBU~yse#_1C zT)O3!!)+bmQw+#=girdA?u;LS1CQQ`Ojd^D=WRx?cvl!y{ z{+*p6$QyKqCEYC6-(pDT;C<&{2)*wt-uF&f>B@`@NImhs3!riT+(n>%|J()8?y`^R z0;cS3bdcgYk+q3P;s=YFs1*yCZJs_g)$h; ze%72vH)-B64%$tiV^Lzabp!Nl>9%f(*6jx9Dkqm!7yF;h+YQjQ=--OlM|pxlt?uHx z3v`@=@?HDo_{1}Xb_Y~L2i+6U?tp6Opu0HAIhM@sU}jp|G^jixp|-X3=|KWL#6b@d z=mZBn2v8lM2PL2fg)YTM{h)@29+Yg|jCsdg=4Nqu219LIf%XvSL^%V0&_R#Tr7HKKgC3ZMdfQ3R!@H=5$)xSr<-w0C?ZuFuV#s7?NKY}u z$G3XI5Dgvlgdqpv5T_c_6NYH$pl2|IP2LmUcg%0`47QlM6y?f-gG+bpy#zYdL3;`G zFsHm1pgOpEC7`_k)h&Fl0Hyc60No{nt{1$2${Y?o^u8D7kW9sgDVH-eMECH$#So+d zL_u#cgvTVPxHk-W)XBMX-s!rbHw^J|A2{Kzr8f-Goiiu2-t3Buo#CwMojRj&8AW4s zAKyoendyw_BgXisU!P!1pG2$l3C8pZt-`M8BgSC2RdE{a>!7-K?<-KAlB3mq1v(og zwm{zi?F(p2OLJB3TcB@%s+=vLdN>g0@Z2T)qHn7AOwQ2z9;LjbpBQq4Go+swGS?Z> zFBsAfhQ!cOzu2X#gWdKeyPTARZ3$tCeUAuIm#K+UyPaOjOhy-|96~;Hw>csKEIa1WpY@35SDNkqu42hX(l21bpcK zgmZ64xCTgu34E=C4-@#&4n7QU-Q^798`Gob!vNO>%dk9n6Eh6(^gsnSkA!MSWw=0D z=Aa%9XfJz=gANblYdDxbO4+6u)%-j$JTbtA0~)3YKJ%$pqbwtY<3p4q#JP2jGa_(C zH8#!5#ai8D-`o|2n7W408tF+h=mePOt;kG1py6Q(RD>%prY2;X89yvVcDTxN^$!g`mbnBAcHgTTme513FVmA^JeynOG|0yCKTFk4iDV zKQYYsYl%-JA0jWs7>^;$sAK9a8Ea{k;s&`uU~# zNN3E@QUXW9nC>#61LAMIItGK`%4*{!H4Y1Vro<>TJAK|7%o1H7WA$6h^Jsf#Yx`#-p83943l?qCX54gt$fZ6 zN8dPruQ59ucpSj1OzxPe$jR#&x^eJ$mFzRPupS4GD~9N0%7k`(1LJsspXg}g;c$%m zj~6z%^?89q0M)#}Ap#wg z8~=fAk!fNMsZ_a4?(krg^x*{dAwH5#yKn-OV?c)zPr)*ILhC00(BJNGUQK{k17tlp zA#@|XodE8@jC-L3!7aaUnSkaUX-C=7@-@clURIte@KlYND8`gI{6sNkM=0eRGcjSz z#9+)sF($)7MQbL~8Zl-f`nuGf3}x)=iK)iO;|w)MOUoQ8#_$7Y{udX|Gu1@w0oi5Px9dx=tFL2Q50XjVaogSdm6VU0ELS<y+83Mh~L1zT$ zj0AK>fX+xjXH*K6wJWq9BG8!vy~r_Vf{9al7dz<80G*kD&J56*3Fyp9p|UuJrwW}V z(42$L5=Sp_%vqTLot1#j3eZ^r%86>0K-prmWD#;H6mgoKg_$vqYJV5WiX1g2i1)L_ zkjtDQv&E3i<<64X!I0SrLuLmgI9CVIAuXM~gTodZV zFed?>6QFYv&^eVtWlI6I6UEab1bUT&9wE@H9rTFc=n-IM;w*JUfF6;69#JV&_AKyJ zp>qZ5Gm~=#>NAsb19Wb}(YegkY75LwKZo3jpoLkLZ%s z#)80HprLHPvR@$3!tgnxB&SJ~OF>J-_U3NpO8n_E@y zu~&F>itLya*}4?jddTvR-m_IVq{uc>hEyNN06J7-FPkXjTQHBZ4eRPlWv&;t=;4rK z^~YBEAs-dxVZP#Vsw1KIc#*xIke!fMuMD3nLPJkXk)0&6WYB55%J|$hArggEFpT#V zKbK&@LdX~^(Y*IU8Rpla%;CIHhWYg<@tL$R4D*E;<}qcpFbwmBiMeedMtSB&WNIpg z?-w~}J-N3Q3G@aBT_n&O9dr?(n)hBL&@8T`F^d9pQGlx4C;jo3UgpSdf+9XS7h!U$ zXo%b;sG+&=#bU_soFR+Fkei($i-RGH6W%WlhAa+-aAH|3_jqcKOm0J{)m-=zf%=Wi z5`p@S%o0F#BeO(i7H)y)8(T6@L2FwwGiJF!e?Y@=L@yWUkFFV)1FE_3<%#B94yfkBmnWdh0d1F` zf({vInFs-GFOIGd=4g~<-MvDfx1z|tTLGx%y;mflD*)BJ_lg8`1)zz%cYw-F3$2>= zUMbMqP^P0Rg?T&ge?nIRs_T!HfbK>H*USC7WTim;6KW-(`Rh#nuA3*B%Ar+L+^YmS z%0X8N^c$yp6`0s}(VA5WPglWHFZVfa-ZHByh03!6kgn3as|9+8gRU0nA5o&CtAnGf z$;@Ey?_coH)rsa^T`5!^Mo_D%>@@=2sU zj~3{?4tjKe9-V+59iT@iS~qiarBHcXL#^hjj}hp74tk70?|0B+0`!;!^q2rWCILMr zGGp99N3X00pjHp8uM_A44!TaD-!ba~bX}rL*F|W!bLt=#jZhaC9GnF; zS-oDM4?5_2f$nwC^#QtGpgxknK0wz8PgQe%B!9hZ6@4UsJ-3R{e}DgSr9)#hiM>IL zdB_>FL5z9W8M7f6vq6m6>h7cs!I%w+7TA!|0(f5t?c`F5P)%ZQ6zC%kx>2ByI_Sm# z-I#!G4A6}U=*ASNGPzQ#%lS`}*P8_Tn1gN-=;IE$DL^+Rpqm18Qv$lFQs`#qsOGFU z^P^(py9+i8w55Y?22`JTn*ojQF4zpH?o>7>pql|r->GbIP|a0ufukqjK`qaL4E_#W z5f+WDo!?sk-4FuUTL3=E?7-!mt+oKH#{{+jteJY1^Oyjq@huo&C*q086;)G|lJ77` z9vwJVjKcF@liA0LRZloGjuoTYqC~*4ViW<#!k{%FPjGB7=-6NoKUL#cw8Vcux4@yw z@piC&w!~I}w{!5V0&nl&TLXNnw8kLU8e0Q=Yk*ao+9tUG$F#R~R z&>(yy3)c+cjGW$++~p9eDa_*m9c-U*(BlCeY@c<|;{hEkd5Yr!9c(@Hc(j0*7vpHU zU$7hx=n%XUbgYeEVDhuMxQ!xIlb0umr_VX)3F7JV4thfH^aMcT%J&37wFOSd^OTy^ zQ{*nd;ns{C%}bsroXiUjbfSP>bf6Oh=tKeeMaqc*bfSQCT~F2dAnx}F(wyT-0PQv} zInGJol$n1kf%sD_7+g+YZ^jRrp{H|258~p15a(UYAzf4!uL|D^Blr z=pAPNw2?=cI#vmN%2u=VVC{mS6SAr8ttDV@>G9?mqw znO7Y&BhI|$pp2oaFFa=hUvMSICu3{68R8#Ch;Kj00IF%t3~q>3=5^@dXQ|=yx@rX9 z&qe6zO*2LUFKdf7n=^84j$Lm3yOROkBAhhe-U7djP>Kt*`>kjA7gPN|+tkzJCIX;|sf6xn47 znKCZVm-!E|xFTO@RpFI+GT&KOrO2)>kny%IqYQV24$v|gpl`SVS|$VZO&Oq>VpR1b zv@9_~%fbjPON`L6Fha{@gudlQXc=Z~e{*tx(u^Hyh8ZRE^$s!P&(4e;G^45ci`Y?& zs@{wpYDVq_Thwle-U~Z~^jAmPkwQAzIjp3Uh4i)~oh%N&<3J||(8&N{36pzoeTCUY z%|FGNugTj}pcEf$<&>TRrFa9aQ+f)N>YnKoD2?x~I0cR9<^DG3uJIH!Vq&YxHLpHy zXMpYuJxA!yLTF%~>SG?7yggN*A3Er%0{zHA zPX$zCTc-jV4-TFRs6K8^m8XDz#+?didOS@g6gVo(j5$r9A3Nx20{z56PYck~0F6tF z(*pFg0Ojm@nn1ZKI8Bxne}f*z(@slWRh*7)?$7C56S}9vklp6*&XCh#NSXOR&XCh# zh)(CH!;oFMo||k7e3EJ-b2^C02b2z>Gu*gT)n|z6e>l}=i0V&sS8uY7tMD;*&!$QS z;+bwBY997X(eh8H0^Un&%vjUQxbCw|4IcLdj{RQ-}bIy|6I^*Y%&)xkX4-!<- z)a))Xyamq&GW~8i$8~W=6SL=tpE(CTNBs1O*>i%Q=Op|* zC-`|z@RJRGPH6CRq`|*|R<0?|Nts8_bxWHvHRD_{!>47>6*GKR_S|5`xnjl+ctG5_ z!Hjc*8Eo!z)0!KtEsuGaq&eBldD7h9I?vCO=Kc>#RDE7(?(?L%{Q~>E(A?*R=GOW? zuznsq?`^+>9uBqhD$E0WO?xA2iwr){xg34k59d?jdR_o8W18~3|& zGYgkunll?ZFAH~&e9;X=6R4;xcpytSfHci{p@6S-;0p!p)0`KgEj3_qA)qnMd0~KF z7)A_l&7OF*E)n zH+3~2D^jSfCo8Cn1$u*nUMx_bbhZ~Xs?WVk1nS4uC4eT9PCh}AF|v?{T1`4#Do~$vx>TS( z>2xWensmAp(75%!6i`h%U7CPi3TS%LNj3^#w$?*WmkIP1=jmkv^+~780M!wFSps@l zXx_^b(906dn}5h#b|PT3m9cfXFn{3u&p~myKz-8bazHidba|qAF9%eUPM0U3mjjxf zbdsG8pzQ^Eg+NC;N3Q@Ahn{@W=?XwK>2yT`dIg}Gbh;t|y#mnmq?2r=0MVq=l>)uZ zL9Y}?Z%2va=*oEL=}JIj(&hmmNz^pBnBxy*dHC zIu*(|#9=r9vbN|nEU!1p!H>;&ugrGa2Y+(5p7|}tlRrz~cd^%`$gWM1U6&%eK1Fsz zitI*yzEmOjrj&}mOOf52Co6ODkKK7P@5t{(_CDGh|J-4VTSUgtL|+rmoctjOqwLlc z*=>3b<90oVaYssxKc>j`=e$nH;(J&+r zZ#nYgXYTzrb?6g%jf3`(>FgST`qbw&0`;lSYXbBdf%@n3H351};&!`+pShPlv+!P_ zr@aJvtw8TVne+Cw0`;lSYXkJ!1oYYfy*2^8Hs4X7htrh^Z$?5j^?98@ed_Z%f%??v zbpd)^0(xD5UYCGgmk)I=lZmA;?{-2p^?AKOed_aif%??v^#OXlK>OfIPUzPM==BNc z^_4*PlfNECW?#+2+#pb&`n*A)KJ|G+fZiZbzaP0FKyL_8j+Pq$T?@mst8T!$E52{& z1}wYsyW8bqF^@?LXzKGuG3FuH*EfnW52Hj+Zw$uVD8?|Kq;fx>-zdiTC)bUYwg9I| zv_QtCK5r7JPkr7b&_^BgrU1Pu0lg`-z)cD0O_f4953|`d^Z7e4u@rdBdHOqnKJK8u z3((&spuY>y-zA{Gs}#zKo={DF-Ykx`aLk(-$&Vkbb~B*5?z$P!nEJdKPz`+DoPgd8 zXnN|CPZB~k^|@Q1K8v+mn3}~xaCSGKs(d$~F^#o5Kz9q&FKc%L>eE<$FzM~fM-`!( z+5EjgeHQEY0`*y}-+N}p{5}EweSrQx0sVcYP(BL@)%Wb)0_ZC9lWX2v09|E%Mu~&; z7C=|a1a=FUYs_d|nb8;g0{#|2_5FY<_lc5Qa2q{ret{xx?Qg+tv`xMqF^~8~Jun-AXcRCiB5MlJ$b88 zpj_O#RVWrET7PSx+zLpH7vG8|*6qrziNSQM=7rLrw>hY$CvO83`9TN04bYfJzYWls zN52i=m`A@2V9lf725`)y-v(!yN5@=z8`?Q0(r-gM=YP&$GLe3}GirD#pGmiiQB|B# zw~JA2U3=dyMrp15Jo@dypxbGXe-^idvj3Gx=dy|2pgGMuq#LR__#M&>)m%5+5xU_H z8FhnjCA;U2&<%IUpu?Zf<>+dH7t;Ek!6UBA>e^N4z10}Lt1wb4juCpvwOUhK3P!qC-3c#Z@aWF`;1Tfov7?h&XDSluH~AF#S7K<|O0Az+m;_XOxY z0`=3;JpxTTRLT`Qp&C27SD-#%b+15u!0O%ry%*4UO8VZw%-oxR-dib@TLMBgPIR9@ zeZcBIf%<^eeSm80{62yD1@V0WdS775pU=KepzNpnFg|;SQ_}Zgd{#Uq&3yOD6)glg>Q0fG8})dK?c0jmc9)qvFl z($79%^#Gvy1b85SY-P*?fTl*QF#Z*)2bRkP>H}8g0`&o_azHg;RSswjSd{~+0ju(S zC~rv@u*wvE!a28U^t7$a@DB>q2do|xs1H~@2&mph4NF1?mGR(liBy?~|%thm*bzc-}8qlX0QBUTRy z)Ca5{0#pN54<(=v0jdG3hZ4|-0Ie9XVnk)QL{#)`H2nW;eEi7A=h;3r8B%$e7UAt2 z=eI3th`;qP@;BiRYx%wUV_E|(g@11U{NB=MJwJ+ss2`q?9Wa` zn+qy9^4FB=Z>PxKaVj=IMZq8Jd9R>4hyBBp!Cj3cJ}e{fHk3K+AC?j5!b5`DlPXnt(nUppPb?k0zjs7iPxD-2%@vhVz&}ecIshdR(ABaP)Y9J}yxIoP0b$ zA5TCZuN3-(Yh4ZDJR!_`80F(YdP1N+aP&lgK9PVv5ui^bn)iuHp-(!fhH#z~sE->x z2_|;=K5+D8fIgXkJ{h1-CZJDN3YDo0j_K+3rv&QbMo)>OK5q0>4ER4KP#-vYDnOq~ zH1AWDLS?Q5R6{jS3)IJro))N&8$BHyeVPIPcxK}10DU@m${FBkKx5$OX)J$Y;OJ>A zf8y=rj}blNnq5z?KO@HYxY09W%)>Ah%iIh;s@+c-&qxdSz|k|om}e3#@JyvG@T`Ms z4Ch&a`nb`v0`+mDX9F|yYy$dhfIgdmK3geN9zgI#V>r(V)W?mU6R3|HJr|(QMP>#o z{pSMoxdimNN}=+E15{%;&kNKCj-D52OKo0!l)qp8JP&A$8$AyucP`jjKc9d;4`}+< zMIND0t1+Ax01ap6%?p6Wt^Nyu#;yJf0LQKV3jpg@{{?W5ZZG+E?sr}QSkKJAkhj%u z0C|mE{lD3Ui(YiytKpm%h5rQX;q>vM@cpj-Md7PFe^>uvV82LqNcF!c=o1B#k>vo? zYOv-d!L)Ojmju%uC0hJaz`P_b`u+P$0rOJ8XnpVDOX6V%=wZ<4rTkzkhBfZ+ zJFI!x?`JY5KV2)U9~hv4o>#;mA2xgi2F1hgufQPP6u$yvV$|>z7~|#ntAJNvOj^_s zL-S9r%ZHb;Gyeo=JpBGAK;z-}KLM(T-2Vh~ZJzY9*fTXJoMmt$IHFHDQK>@UIEf zAB2A`KwlH+B(xEYc`ZO+6X*euGidZ$rBGRo;-HyAUk5ZEihtb{H8=58{Of?Ol{@Wq zKzUklUyq{wa|c{$YgKYG{tef4dItCnD32%O-+)8$Wc(Y@ttaE(fbMuQ{tY;!C*$9M zL-Az%8*r$Slku{MhDQp0Q#^VV&C1d9CZJ`;pNxMqIP|7EFs4WJdD>Ff^;o@@NEL0P#2JW2-cTVjYm0sWR3q9>q>&0E2cw-ScD6%2VR zVaQv-khjE;w?+cPS>!F;w-pVM?E+dv4f(Se;?F?;Sq%A$&Ar^KsF552{d=#Xc9Yf3 zKa2LiI^};(RsI*($9h=!FQWWy*W7;*yNoFdKc{<-ag|OCAzeieGp6=BOUU#Al`ST zzAcCkP~v^`c0jxhL|kRRO@xf3w?l{U{(2i7;#v5qX-kF5Mhku^^c{hI=%DWi^dkp- z2T+Yhy#r`G*ZdBkI%mEEXq-vj0W|%bSms^VDSGDjU4ee=pzjLw69;`aK;H#4J~iGA z(02orE%UBGc`v;yPYi#q`Cb3S-~(e!_!LLkOTv3KaI9M2*xLtx1xzEHXZI zYi;36AInSlD<`o?
    t((cVe%tnxySYueS3bJC-WZvCq?#MLZ*M#<@vi4_=lp~pM(EUbo+Dg9|qkYLU-KLeTbV`A7~#2hv?{s z;W_dlXZpG33t;#h`7m{=|HwJ1hI}N3)F{%H{YVVi4<#!8C>Zh)48atgJ8n=>Gs&iY z6qp~$)1@XZA@ZYCq}-h_>JXW-KNe&yhx}NOwH@-~fczN9m?`-<`2I29?ygUB&e21mQOre*pQ>xF3<)J`u70+yFmT= z^6vrq_e5L%JqeX(VI46#!^yF!Z3xB8HvR+9|DA2*RBZ2T04#$@BCFf=9` zKZUU|+4w1p#hBy%f%pEWusCKLKZV6H+xRJlV$3#vilG>jji2J$m~8wsk!<`lk!<`l zk!<`_l8qUzk2o#K8~|8wYXX)``V`*{F-9srywJ`Wy!p77}NRF4RiCn2CEr8M_n0_6iq zON8=KMBV@5C+KP7=U)lvzXJ4M3FyBnh03EA(0T&>LZE!Q5&DIA%I6xPU%*jKt9=1x zCjKpoF96k9_=^Pe3qaHVPB5S4e3WS>^GkvHWYd=d^~t6$0oAnHmkCF|b&?5cg&hTK+W*(LajwHKrQ` zah)Mw!;rkqgL~5%?;9G@RtDTRVn_+fbmSW`qy|dV`%N(9n}i|X(2$IH{!M<9-~w;R zH)6g(13uk!Sw5u*AQR|95S_ zg(01BG4YMew=gE{kI?dNrU9D${Erw=+Zpg5F`$k!;6K5D|M-^3Ky_2|A2Fb^zjDj_ zn1IgG)ZYn!Wj6J9($w`F;5z_xKKTxSIQYJUew~)TLrcfMatpc4%lc<#I73jc=Ci&R zPJPGuUN{XL=lj6I~9k*{?7telq{BFerX7|F1A8elY*9 zFzOn!!x{A}jM4|}uP`dc?S4gzAfUzZ|0}GDpVa>=tg84){oGWtYcz?rFJa6+F{TS% zrMLUU7Cpt$Xi4E;@Z~3%PD4av4n9Z&AEm*+^@6Y5;yY|F zc>@b92p=Kgci>iJ`{RFO_!m=nuS-2hG~s4YCH@s)*o#s(yh_83^`G`{Z2mlEtZzYM zr3Euk&)dt`G{XrML!ed@ZWhJuh+^sFX#vgPlg<@t0o4eP1+>g`gl-yR0bMC`h*c=$ zs=2!9y#ob(JXl)-50am6&p0fD293~O!;2c2yNieC9-2|qF8A;qwpz{ccohgU-i*(^ ze23k?Q+v}Mf;#wE;G^W{`SL#6IyeKlN6P<@KUiNU_ew3>JlFM)wtY8FP93Tn^Yp{k z-1;YLnj>yjj`sq0$G-RdrbXt8?nUP5;YDV~)S~RjpQqaH+4FzCA$QCk+b_dQ8Nk3o z6(?r&ca2Jw*|{QPg&5#a85YkKWK~jRRa0cuM5fW3vRs?HZU6B3BpMs4k#Z4+O$A_0 zmF2Q`+db8q(#+hxJ@$r7SNzH$L^s&0J@EbOzJ2?8;b(7r_rZ5xeD}lm0DKR@_dt9P z!uMc&AB^vz_#TJvVfY@7?^1j-h&U48qwqZ%-(&DS7T?d~o6+ZAz?gvZNA2#i@6>qM z9x1KYSl*#zo5+t`>rMy-j=RU!$sCw)NF8sQC-ZkuvlLnL6j_TDS<4hzE0t*sixAEW z{I}HXk6z{O*W`L1T-3rol$&?2{k-l0ZlhF$Ic1eOFn7d#c4TdyuMP*@ayQ*)SJZwC z&ymM*ID%hK=9=Aan{~p-6ZKVb=|M`2jn=W@}O10Mndi zXmfvjz&5Je##OB@Rlmx;&Z=!))#|?L!R2=T*le(_MCRr^_uWdEqxNWg>yo?%Y&q7n zbATEEY&Gq3@08mioi4N;g17|Yjt*D@(|lBWc5cLjwprayuIhf!aJ=c9TlHWn6_k~G=S}xp>sDpV#j87^Kal_pftc&+FugkT*i*jWkW-B z#L1?oQ`8WOPBy(z;z(?Wk$8##8e-7Jy-`Cv7*BR`|Agk_r6Hb+J2QCcMI^#smakV_ z?>BN#T^ckJXm1B?B+xz%+9*Id(j&A{fHul|8aKiH0B9aF^Rn?!t}5xNE&&<~w6B9U z7HB^QZ5*JD6VS#1+BgAiTmX&CCVbWss*mp`0`2dhO$0i?L7N0 zvC4t4_)PSlFBPH0GnD#T6?}*=2auMk;b12nD2@5V~OdXVbn2t}1v+%89x~6bxml@AFE^zV^ zbkQ(pNb^)f_%Nm+5{Ao|7O*6Xm7f~Y0)|{@Mubuod<+Ix18lq&FeV$irv;4BZEFj( zN-i7%Y5`*|##kuay6%U4m4X|UQd>*mW=b8ZrGQ7GM2}jc1uhb3OF%CPfuWWG+ETj0 zZ(Unf3gw+eZ#5Lx3eZc8fAqI9MXT{a5u+Tm6`+?1v{eGy3eZcOoCA?i8rcfa%bmOg zx!lpv!1s#Z(W(2{Iu=n{;0xc)7kJ3E1WHp#WpOxxxj4=#r|{d z{1U58ima{3Zs+zN|!ohS2|+dla+|51H?^M!6N(JvvJFJ00%iSL0f<| zyw?`s7~X3O@D4GkEuIpYPt2iE##U&HR){g{zq#iX?_;)thKk$4nCr|Whi?aCt~ZlW zBCs90WVI-62SaWMb7VUha-EaspLJ;mLvG3~c+NInz=?qn4F|Uu$P@=@FOaDY(mp`i zCm`(uq&>Wi2Wr{}NQM&)AqbnISvvr-(H!O=9RT^AIXslO>GI9m0icbcKRW=lQM~B@ z(5CSI-3|cVj922ODGr%kOzq_joIH2J}2U(<%;LJ`3n9cQ*)C zcL6lUiMs$A^M{ z^egR6b=?H&z3xI;X{EW4}HWJVt0qPHh`ZGmbe-Nq%+3+S z1azxe=%77APxq9b_EFoOVR-cn!)q)Xx+kC)+eOZUo-zg&qr`cpXN57qE4c7kYL-Zy zwx+l4ExGcEd&@qsFzzk;z{0q<>;ntq-m(v@jC;#Iurlr~`@qt;x9kH$jkhr((gWEaoExB$x7vH+K>yB*%v22<$IK=wGpFKG95T`c(P8=={3D$jNKLPt( zazB7iG(MNy4{a&W<=myO*;Zq{>V8mtC*Gx&7l?EZEUq!BT6c#1MYWF!^%vE>a=*N0 zdj?hgD^#6Ldeuv z%2n=N_|_fVK&ZdltZ?l;5bEzSD^a4}foOz#rGW>c;qM8HlYwaX`^+yr033*xzhAbE z#1DiaIlC$-E5RX<)y|lKxx-(xjob5HrE|KK8zjzsjWRDEB+h+fa&zCXJ;ri}#_k+c zX+sTmx^(3`Sahv%@WG;MZSI3N?2t@)mvO~TQ*^C*uv~t$yZm6e{1}wj5C{9wfZwWO zl=z^+!DxtM#PoyF4jaM~{otg@83wFf>vKy$sIF6o2-Ju1h6vP$@rDHGkOXu{fDRF; zADcsx&^%^_dk#W%JvvmNKB6{Mpgy8DG(d+YphE+6Xn?Y1h6gzM3uo-$dy$^@?d7+b0uJ5_ap!a(2 zVT2e`>I@kHLw1`j&X5r>0YB$u%=mr&l48H>c=q zymB_vrtSY?`%Ps;q7=xOUc=wDgKT7qY*a#~38T>>dl_aKY&eh1-S!vTs<+SHX_aw_ z%T)dNq%61ZFSc*4V<%h39;(@@N%~{5{K!m6RL5Thg@se|WIh&hIAnDti)KQIW17g4 zCQZ+i`D?i{@f&$Bo2fG0PkZ64yo!FuKRZP>Cr{?DJt9RmH$`@2LgqeQ@2G@O132?U z_OJwXJY>Gel7XHD1=n)>UJ4n9o9^98Ww;%Sp5$FnisAOH*@_azaR$XII2)udRK*KE zGEjjCa^b7@*Jik+}2XfufPP3-*|5wm9!gp`#pB_iCdAdYprf z60eUJXff`XD&{8|lfkd_n$IReM+L7(0s4KI)<*&Q18(z*A2-F@gr4d?ZL~oDfigWE z4d^PIx>eny0o5e`XfW5vqa=6jyY_%qB##C`m(!!srZFEm+NBCJV;o3RPh$k+^O0i& z)XI4`CV<8S5D{bGoNkN9z`3|X7!%NAfL>)V3yh4d|k31@`~&M1BR_XIJ@@6{)WQGTyJL5yPOO%Q{0+gOZ}H)ujIh-bMb zh(Ycw7vCn&2!YETJNQHg*A4VU9TToaCJNl|*(V10M8Ho9xBbKbpBUi0V8a^+yvP4*-)>O^P8Br(dL>6#P<>!d^%P2wM=)Cpvgw+P^t zn920`cIBtrCOf!pwkHdmM``H9WP$s0S(5?RS#q+#{meX>t&wpT_}Po_$^R2R#leTl zoG}G(oX>KT))c^z{daT5l;HUkz+?V=3g9#fL9r>pa}JOxfNOMk3c4bm9+-lzNS@Q; zUBZP8yFlMOK2;3KI76nwknN_-88Q`yY!_#z!jSOp%fq0eT6m!tzj3QXL#DzIe*r(2 zVh0rM#kPDZ4B0MUHANlQQA^Fq@@iXixCR=ykcxqZX|O8>8m7Un7-*OVyJDbW8f=S! zhG{S@1{$WJonoM28qAAxQiAn6~@JEx_)8R`@VoyhN$K#Yf ziOo5V#%SV*A|j3^cH=hGxK!m^+>ULo|0h1BS%h@eCMpf%NPQ7!q^G zGg1xVs+WdnsA8rVQo|>)XG*i|=SJYnV8~2q5x?=B8Cqm!qD5wg7MUq6;9Qw`xt zn}$fBBZEJX!$6P^2F!vXCt_KtBYPGMk$4Ph%5;GptBRu*#SB`0i9hbbdG~+)ME~yFmMBPxY*$3v(FR^|d4)Ae%!joJFSU|uE;%`Htp=K`v^lDPrO8E!71ny$w&(Y$p1 zTr7}B-hz+t;?9cfwx#ssNU&oz^hmH{HuOla^(H$K=$H*X5@;{?857RiM*a7RaDH12W~jEULMqhL(Th8_iDuELT}ABIQ4pqLFk3I<&z zjdWCK3oZ|jf6gh zIuBrd-eIebH%^>_A;eagXKMHlDrfA~XG6JPr7;?RnGa)PDsMiFiK)E#Fh&>1^I=F# z<;{m7y5yJ-Lt-j#J`9PeJS68$Cg$?yqfaVk8MslVF&cwe0Apfmb^(luso4cEMyH$w zFeavE7r+=z%`Sj3F>AU2#@y7>{N4N?oSyzvzW#}Ez{pJJ28_&k3ll?pA&0n}KFDyGlF~!w*+p_w z?}V?Mbr;D^eJVIP< zi1(*E@0W=8XE^Vd1n-vsx;sSHmIUvY0IGR;_TCaecSAjWZiEtBpyFDRcl}v->bN7w zOT~aQodHY5fU}$dOM?MR69y~|1}qf=cA-9>Doe$H-MK~2Ve;Ti!d})$&oW@*`GaM^ z#PbKsfYGPsGGOBQgJr4^{yg&mXJ;Hl9CN1z+)?X1}e1voX53 z3dY6Fuc}=;U#;SwSdO+2Ww>vES8(R0h+9Euyfq<8Ex#@ zQl~9S80NO}uR7A5e1^xU!8%k&)PRpADqIH-V%T6EJcwa~b?_pF4c5Vn7&cf3Ph!|$ z9UO^agLQBuh7H!ik$Cid9hi(7fUo%c^9kz`VS{yvu)(@S*nn#gMrbr_upU0e^9k$W zQaqoq9xlb>3G3mKL=CX*z=Ll+eEOppvR+2R0Z_@&upa)TpHJXIhhPm6Y!I+NpRfU7 zo=?aP`p)){)IW7?fUfj?E*D7DRZ_~P*eJTrLDy=Dy3TdOc_W-y?d17;>y5Bq_tqO> z{{{)t)31&Eq~bf>1w3zXo*PvgWmFZOH{hy_hR7}-hyU_7`J2QkzscVe4B3R1jA`~w z!H`X2NcbBNn=195t3EsCT_hkvXZ_|LbGLE;20X~Vi4F>omVlmPrehIP-2E-iVHW;Ay z;Wii$bBNnuz#c@i^HPY#E~mowMxrO27x(zu=F3-BlPm;?oM2YjsNx`6##2|(R znaMZ_O~}9A;w{Q>2Sk;+=h!YPee!d=sBGm_ZVxKAi%P%e*e)vBpxe5%3xaIVUHatvXkZHMeaphCkHcf z|M}H6vZsmEo-RKcpCQ-9_tsPYnetNgU8*v-XkUdW#W{I2e`J9T=B@HF#?m0m-BD4+ z`FN=?`fx#tEUU7MY=w_3yeOsi#Uj(QEZ&G*O1(?+WMy`-Y}_wRkzJNAYwIdro-cH= zD^!+Sw5~!t=Bm8v-lnSyWSoY}AY&uy0fRCbbw1-=CPUw6yvxGSFO#9~*NJ61^tm)I zld;d`2uFMwhFwf~mtokgLL7m&U<16SDet`OGmPPQqA|KX*&)XGjQ0*P#%H{Dz!+Vg z?+{~FncOk!ZSzbM=+JB-6Y5FrCp+!B=R8@o`_%Ty&>pvcCqsMO{+%oY+Qv!cWVox_ zzmwr@-2R;mF8+iS9X}ba#?L7^IsaC#kX=5-8HG(Lt~^DI^4q{u#3;WFJVlJsTKU_+ zQ-VRK@WY_gBBm}+p+zvH^1SIz2iHC5PVIcFy|+`~eml4`z;~iGVrqM5fbV2$=%4Un zGwl>Ot=%cD(E(~X_wM|!t#PU|NKYS}DhBz~_Ng)ed}{kt82|^OJ{hOFF3P=I<^L({ zO2D(K&h&rpFJVhUHXtOlve?$8k3yTLYMoZ_3fEV=9umQVwdge3`}Az|Og00I$^JuFi;G3?8{-}jyGod5p0sOfFU`Tu*~_dDm@ zbKm!zbI|-~i8}MNqyYC_n)m!4c{`b%ZV65g{TYIBdy?`jkGVPZ^O?-QpwZhVoo&9Dk<| zGzmXfU4lesE=$19O-Yx4o%5C@VCTGL2?#oGSptI2Tb6*N^Ohwb>AYnLO3Zo7lJJyt z35vu`NtcACq)S5HvLxg!OG4g~?v7N|;w?vVi_*34BN3AGmLq9O+L_Cdh{;V!k3>wO zX-9IQQ)f;JZY1J~_Lc-nhj`038CbpLn*ere-`_-8vL6hVxA)!J_cxJswAG|LIb|(Y z^DWL=*S^2SS@#S2cJS}9OS<2>X;!05R$>-MaaOwaeH3R^6a*do2Yx92a}+Aft#=>A zEi2W3l9(WNVg=vkEOnCkZO#%a&U2o;v_uid~tQ7`FwSCqxpPwb)&W5Fd3ih zUq_>|#7K`uWw}Y}(cxl9UM5b;hCs#DjbTt-CO(Eib(#1W3pyqQI>v&IVNh)$W5S@x z%f!bTQ1N zEn+-KxaUH~g9M%nK`oC5iKTW~(s+=_8xj+k!~{cPf+aB_L}G#^F(E`^f+aD5Nl>mtVnSOIB-(UO=LA~DgDm>424(UO?RBqkdY6Wfv?BjHM75|fx>NK9f9Qw@npmc*nGiAk2k zq!5Womc%3`G0l*e)RqJ}7iySd;wOWIGrN;P!kOL4AR%UVGDtYHI~gRz>`n#=XLcup zgfqL7K_u1e!uBMvLP7|L<)6X?)b~sQf#R6@o+%(8m*^A___vt)o+%(8m*^A_aBByq zfPk|-Q$WDko+&5^dcMM}^wj|xGHX;CV*RHw8TCC=nT-0LsURcQ|5PSJvnzDvOtoaD zGMTPOr`z^akcrs(mR9v5XVLCH;Q#7tP|2 z`iQjUDQPsyF&$~t)@5K}I=6Lo+0(hLi_5-04PT|kPWPJW+|bqRO}7nwx^3umg-z#% zZeD9eO_OkBh@nh+6;E7G8RMv-F0(LYfN_Sp%)*pe7`njA?DbTJ9>q<%mhtrz8c3vT zfk?=Z!VD&%CVB?GGvqWqe>3=c=}O z7U!zAc@{#GUV9dYbsx?m`m-#|tPsqsB$!{%HZU?YFdHz=yv}AAHLtTR%xs1s?@9}! zXEO{9F}LToG@Hvxo$73T>IU5m?}RGD0ObI3{=6JOZtZwER}~d|Ie?s7F9(psS#IN@ zILiSnZoM4P&aIcDnygz-;Jt6Mppd&ZG*lTVn8QTgG7WbQ6B&iSDC0Sn$Q&E7q$`m* zmI&3~943;wuPAMe_P1E@P*=ZO(o-Me*s1%BdDB@u^uabB1bp)!IfuGeXXq>Nb!X@+ zz~34A3h;M^z9M!@BFWKLpfsJMuRtKq(N`c4=jba?s?O0@pj6##aRqA08TyKlp|1!T z`U)8OgnOF3BIM}l_CSqY9Q|Cx<$6)OHW%Tr zp-)~}DUD&C0TxF;kAcP64Gm z9z`o&|6K-E&-5-pd6MeCdicqcRPUPWXyANvvbg*Cd~z8Y5M3|x`Q(T27d6xQU@X_m z{800q55}VA=7*Z^d@$B|qJea`C640wD;Z{nfvIGe|29`irG=>s!Bkq9$`DLt5=^4X zz{tQr6~pKZdlkdz411M@sS3eVS(qwY=~Na~fEi=AsHx&kX(nH2IruEO15c2Apjc&~ zpqfdjb*yF*Y8|UBiRuuEYD=Qp#!6LC&9M@lY9`Rj5U5rH^ca>{N75@qLIw^NFbSO# zTL2QyCM*C6u?Y)6!r6ocAR#tk0Z2HTumB{SO;`XTkv4(E5fP99gM~~$ZNfq>1+@ta zZ7D3|Qc#NX5b+> zlj?jifW;0h2C%aUivg_Z$u?mzw}l|D#mgEV#-dZ$HH>bw8;MwgxpM$zP%Bl9%US-SKvlcdT9{hEIPF$zVQMW51z&4}tVK0D z?N-~i!INqx65@;Nn1pJ#I<8{XZgpJ6s@>{BrCn#Mxz1KI5vk*9rhw|Wy{UGqQzES0 z29iuC65@@QFbUOeOPGYtj4WXil;M(4fiJNHmRJH*;7gc*5p$&c2}WG+Qif46x0GR2 z%q<0sblOW9M#bDx3$ru?vor}N!CnIOC=UlN1B}yH%K+mv)-oH-GQc>EwG1!}VBNC@;>Jfy~HT5A~L!#Gh(o^pyDrjD~ zKBQ~Npi#Yxu33(loUU1pn4GRzj+mUTS&o>Tu33(dMAt0mN>N?29N{ESROHhWBQnS^ zC|ege@IDrg_VJ7Oy@m}S1DhMX-3KN*?73ISN2n_NXH4hHh_qFb792np9&#Gx<=zqA zZgXwKS?kPM{rmD+2XL0zP+qY%Mx3=NB5kwg^frLQzWIZQuQ!>m55d<{5Vu8qeLJUx zOXfq9MN``>c1C2eDTB5g0H-HvN278_vd=i`X)?Mq3cL4gLO zQ9ERro4}vc5LM?kpdmV)+kl2BI=2Ch&@CWrKqC~L+ki&sbZ!G0VXDp*ncHYUMdmg# zCdu5VsfTC;sGA#T1gLa7jR19X1C0O`soEIojv4_fH~mIj#BOe&(WvCU)R-w?QOPS9 zdp3%WpjR+-d64mCcye;F)WNN=NGmK7b>k}-NxJbz=yIT3MHH{(T<4fvS0dLe?{D~v zvRjFOvU#|EB?qLp=aqoT@`Cy=!wlwlSzay{40Yw7Zf4mWU0#GCig*=ceAi&CVvO$@ zj8zt66)@bxcdHnKB3%^4R0eB6z=_W_AYjI*e}ajNHR$wHgdnaK>c6N8L8>Du1Bc~#CnvfF1YE2Z}EZ~dBgn% z10$++gH#^wBb40+hEX}W!NP0+jFXcaEX)QALzmG88{r0yP?px@Al(=^=bz~IL8U61 zb|aHeIk}N5P37c9t~8aC8>LinCIN1=t!N{+BAQ%~bnS39atl&9xlxIToTU2|kq}M0 zDMVrulTbOiiAhiiZ3-3mCQD$GB|yz-lQbtT@PTv-Bp6Yxn;Ays8z=P;qVnjL69? zC{8CQx1cy9FCz}vJ zlALTp1WryiAqpoan-GPQlTC=k$;l=};^br#>eQ)!K z0D3hx-+=A{sEC7I461jLT>uqvunVA09P9$969>CcK`IVN8|aiVX=frJ+Mt;UR3=Q+ z%^Y==A<%3aLUSnUW)Kh^+00R^IA{g|Ck~oHz)fH`;|gx84L&ktzAob6BW6==$b7`5 zvA~e|2xO$`eI%t3{Jy_`*H2}ot_DZypMn!Hu$!}6XtLYQu`M#$?Y1?#I~3b)uF>F3 z|2C3Rn+>@M!Vnp-hcOl#j6IA|V=(quj6ETYJ+{^C3ALI%;a2l-Qd=dvLZBiF_A;ne z+FpPb$6hm_du=)GWzYwMjbHN%e@Bju7N^jHlf993LvDy5MFM=xkaZ@` zj~Q}_f&AD)e$0@s2alI|eIJk3YhTe+$4<7}6jZ1-`t%S^WWY_|JMwyTltZEdrq z4Gmtg7M`*&UreO)#$xDrZxG8p&`U-s`z z+>ng8LTCpAa_IY!MvY7)-F|Ll@0munpBvfxrjhNpjcmU(GMq)%%6{9&?GIg}`}rD5 zG9ur#PfHyzp#27r5Iw-4YWof_=&J_wfCW8ZTK1pr^$UZq&h|Pa+BR0*4q|?^=f}_92T+_vb^5ZHCh6x}z{<8N^|R(Z|dWGmLtl!xrW+V4U|k zY+(*t7^=_1HpIgmp?aUg==5J#AVdY>a)kLrDna6PK`IT9-CBenq@ zu?>ib9N`8;<#U8PVf8*ol!$mA>Sm}UWEn(Dh(rsMQ18>iBq+m{P=U8t0xgyR6?h91 zFhl9oa}kWJi#WV1wfjC!A=fDu)Alwt0}SrpGv3v)CCb2JGiL7gGN$hwGQfN|dE z7+{?DIcB3d1{mjkjsZsCk69RkKL!}_KF3g;&ifogai(}5x{jy^CL*$K;y4qjHyy)q zCbHaIqsJ|g;~cM!j2yQ_j$0yBtjC#1>T(6bJb~~SRMtqGU{D>7Il-Vh9CN~go(O@S zu%IVGpeG_hsV&egG`Amr@a$&j5p8M1RHot@(# zlHJ@XT2k+i9*$lF!tF zPSaEDFGfDcP4{mC74vq6gH!W%hJzy+L7-;INzt|1C|W~NwAv_IxuA6wcPn~9 zz{^i?*SGzS3DRdoLLAq5Cb738xrR&iSr>6=PilzArj{;iStZi8uB4~alQ?S zACMp<65`V?Fo_L@#04gyi|Q{}5*I89D%=Yxh5G>MNy<`e*+tH>x5@G%XQ@l?E+R|0 zL@pvr8sC^x>Gd@Y^&(S8kIB?8nuhwoC6l}OuS=Y}4q{*8+;tH95^|R|e~EK14(_SK zo(9wnTtWf4m+D?(q_&=z)Gq~cC(FpofO0F`F9XWW9$W^L3=mufl$$-cjIxmdg3G8N z9w3nCOD}_f8zHz10?8u;I(tA;n+S+Qy8;64t-e=40B`k0@lbQT0s?>J9{mak;HA7c zOVZofbXnn!o}WtK3J8p~?*hI80`5(|SI|scY0xuj)ZJb+WJJkd1sS*X(p8WV;Y*-b zK}Oc!Ugd&U(R&r8VVb(jgDtZf$QIaHV^W5zad}*`gy^x%YfR{~p1Zwnz{Lh!XK>ZW*BM;(@pTJ+9i{Q7gxyp6 zx&^;(!KwJJ+tRqsr6B^j0O_Aq8f3nxt%xtU0Yb$w)yg+Os5mBC8T(e<03)}j^o>v* z-2f@+g>QhAdur(hNXf-?1Eh*$B9;q~*Ud=LSU`&z3wRm(f4z*yPx1f3FCX^r;Rgdi z5mq?7Xy1!S^EoX%BOd28^~$mpV7pM7nANn1wDulkpzb)J@0q7jUza9(29kV8P3shq z);S_AJt8f`racjh>3)NmHqoWg`wQkn$}!k@W#Cj?4Fw9hdJV zIWD_CoGuw6A_g-KBCo{0Vs6WE4?~!E!@Ieg;8h*wt`P?jcQ=WHh}>o3Ooa3@-Av*j z;%+8!ka0JYILL%=CUgc}tIx$Y^3A;u{_=v}hrGhznH3m!p=;JzqBIb7GhAsXF*n1N z2A<9mrGcw^vO5i2oh8D%K=2n$_Yis-_&Q6J2EJ~BD=h)SZiXw(OSVL5Uh=MCXw(B76m`IYvF zCwYcT)=SZKN8K8^Z1G4P7?{$i6gmLdO>lKUS^k#NgD#KxcikU7cSSuSWhd^ZBWI^i zb9dzI`UNjN=70S=#Hu4$MQ1~uC}kr?rW0qQPjYwSY>I*_kKr~!4UAfPC(epUcS2>Y zv~Mx%gt}_G*B151l)ZSF&YV3Bq|*7FIeQvHrF=VU(D+yKtX^jnG>jolMs-F>yT`IS z-!vxb@Cj6mQ96U_Q`zYZs!wI7ThR0nXu5y`Go3N>X|#e0GX18YbVngju|^pTs!wHS zFsMG2onb*ULZBHIG{b;O$z%|wXw?iZa(yg2BeKZpE=EMeP-QZaO{R0nWFnhQ-;!yG zWQK@jS|XXY#CiX*%$r6}w@Cu+Gk|Kg3xmF5K)V3c?LXE9py#>%y8zVfKh_1H7fgEc z{$pK$38RsL%xSCDE+_$P1W^AYOhpl(n58TR)UCg=7*MzV$^xKl{guUldLPNMfLVyr zy*?<50h6}=vSZnFk0(rVQ`yfmsE#;f1Jq3yX9HC36WIWDtIe_jDw-}Epia|e15`9! zHUe~W$l0C@3ScFdV2jtvVQ3w2$YE$5aLBRHIU(pA3!M{!&au!rfG&>p;yXbO=7*Ey zqznS*8WQ5da+!n<=I4Thb78q4AucQzB%BM&1qpFsxgg=DX>&osnXp_Ci7;V_7)dCq z0dZk@Oh5+>^SBgr&@j)ILLQfby0AQ33VB=#df&_g0XI#X$0eZ;5agjGXal5w3h#hK z+KtGF3+u{c)c$s5GHQRjf{fH|S0+;&RQ|IsTl#h7(x<7D)D4!pne4?=b>r-HcB31z zce5MakiDDT=*AF3K#aQ8ZirWGRX4=zd|o#X<7)arveE07T zfhAO62~ialn8s@7hT4<}nGgaOiCxIxs_zRKT&GS7NnJ@7S;*kpFBe+y!Vq}j=Yo^l zA#jn^Jpu0YeNTY936-7{_;0w?_5`@o_dNkFq4~baGb*g_ zcj6VB4`)FK_^+ZJkg4vHtj>-;d*mehHfL%-kWMbr`3di(pp}08 zH5mMRKhbdve-r-~9C*>sefx!iU}>@6r#Afse^I;iAxQrVj_WsW+z8Tr?;mdAe?4aZ zRbv0O$@lu@(Wi8*z&W&Zo4=hE_lo4aNB+aVFL({kt%yFL`C|G_bEz#jXrA$yNu#NX z|HDCbM-x$;QC-~oR!5vb14=P3$S#ZbF??6lzV}D}md-){s(9X*MI*i%40s)DJ03xW zUnhfu;9i>&?=dE;-R(gGKJjJ-t*@g9wgiLUz^{e1t#9~!y~J94bsdiNI5yzeh=YJP z?b{rq#*nwjwj$JsKanN~t@OvMQy*NI`u^-1F90zb5#Bmr0 z7XW@A^b zRq=*)-tXnZ0X6X=Z)-5PCZ6yP2Cek#a4@(wp6En6k8Ur3tX~{|sHQI7?-uXVp#OXE zyLwMYDhbqiIOsyI!;yo7P;znnJ*a*^erquKy?E9)yWnr{M+HB;eek`{{xVjCi~Qc$ z{jsmbz7gw(;m9I<3Wtc}wIg3BFYUL&m-tHDe Xa=kWtRlKtwjC#T!P}_4&e3tkBTzh>e delta 84263 zcmcG%2b5G**7to+HFP&1IR^!r3`$lqG#OFJN=}j`2L&ZmBdDOLNQq_6is2a(rZ!;C zV;*xDoza&#u?S1Zvd!M>hc4O_by|wpF zDSR)AqG2Xm_x6I4yVvYA`%+b^bvIGeA3vQB)=bS!)hv5B({9EKAD9B!H@uo~G02fu82O4ZDw z&bJ&qvEB3L;MNX*NoCIJa!ICsmvsjl9yy^(W@V2i2N!j(We%R#V_tD##-yH}e*eL5 z`V}|KOc-9roSm6Jyo=c{|7ZDs=K1kQnyWLdr!~*inO4VKgTK0%YcrpY9g#VHLW|6{ z*>%kINcGM+eMCRGFMM(oq26+ z9dkFYs(KGhH<`6l8fNBBu2=P-Pn|cp-oDAzGndZpBAM^YTsXV8{B^(kD|6N4qeY2w zSG0LZ{`zrF9rH-$?l~>Yqw@bD`TsHgU-fYTv>w~UJej%Z_*R*1v+AUtiZYKa7;K)F zI(SC@e-{5Y&m5Xn$2^B3n`Z8s-ab=2^{!0W@pa5g?n3ih|6Z$URWff*YQ%iz6)SDD zZ$usQsucH{ug=$5od+jQ?^%^)Rs8|#q%s#RX_&clZsW{da|$zO^>1%}%#`)-Vt$hU zf5!jKGrw6-C-p1U?8?hh#$@raNy5Z}Z_&fxW#rbxbItj}`%5 zX2#MP1~|&iwnFVa@+gR6B~ke!qz2 z6n^~^hrFLmv<<&fnIo!o$*kPf>flYgZY(&scF)HJRf}sx(US+K>}}Ng;7@mdTzs(Y z!w(-;vw375n7Cnb|H(g3Tr@FL_ss?epML(5Dw*Fu*CSK>EzNph((LZ)X(P2=b$7NA8u3;37 zy)}wPRE?rl@35ennAc!k4Wx)!sX-@W6^Lg57%XCzTYC< zmqueesvQ-lP%rqiS`?QRCdgP3`T3|yzN}_~tbVR6ZNUw4g;v&7WTRsWHcQCYJRx6; zgnWl5kdX)v_MmD?o}by7ap=?k=N%xnQ$%dt6wv;l9ZJ8~jv@5h_Vxg`6mqOVJwb0g5Xf<1C z>&TVaI`At7JKgnXTHWo}UDoGY}0 zLYD;DkqNS+5@cQTWW1eiAk*4wBeho@>9oG#s;^CA^|4lb^|{)!ZHKj^g|?GIF&{|V zY3FZAyTmeCgDCS9Uz`H8@vthj&<;{4J2MsS;0x`LSSYLeOtV8?JB@p359pLB`><)t zCJ}4;tV;59L7v7^C9LP2($|iJ24@?N670=KLW6TmcVaJ-%7OtZ`E#!Ic? zz1V4}e^)7s<#bIb=bflU^k6DF*#6VDCiU3|I(r?w>JN2I!}v7CQLSdwH}ljVJLFAj z97ga?Y#!k-kuPHp&zG@>=F8Z@@?~r`Ugp{_Z@U-T_RG7LFJnFC%W5Uaum-7+uMT8I zdB&ydCJ5^#$T*beU(8`UUxvj*1zDp6S!0!@V^!TGFC#~1{yWXkMh>KC$4G@&p^V@x zWFu-#^BCmWXu_*dS{`qDknu0d(+$uOD!xH*0e&_aR@xy+)j(>KIZO)UyOp>!jdAZ(y1+&@sH>6#toDC>R&Zd+kXKP84v)$y&NAgay z3FW^*Ih#q6ob4qhKiKYzX{o~RzKWt#zww)fn=+^W?XL7Eu@26@mOo;!FXhYFJMv|0 z;Q2DP(R>+OotL@smF>t2?fA-;kuPJb$d|D}M^I~?*AXFJw&G|B}i1TG!3FpcuRELA0zsv1ibMr{q3 zYui$sb)txbsFbBt5dv4qNTrcXVNma^Nu&y5sVcEl)mVy%F1U^ec1R+M1p(hH-s2jN zz^Xzx%BM(hsdQB!L$WF|=cb70Y7y+;MAQ)kcdbiIH(O{S5KB#WpDKu@s>D)Nb5m)| zaZ5}Oi{NlUL<2z-38JShv`7%We2R#WA|j-S2q_YJTLK3k5}F9182bafd9*FGSP;kf z6cHgsL`V@4QbhEz2o7aLv=Br!F`}<6vzie4`BXs~#q{?{BEp+QgcK12kdt?t9gK)p zf?!u#W(L|)*h@|^gM6wWmZ}m@E&_bNRcoMIcWrk?S&lw+6sa$jJ9Stglw~i31Wm#5i!!IhzRcy5mH2qLQWz$ z3($!6LZ}JCA~V{SQd0=&F+NGeu|7q_Sf3&yq=+~U?-9XCg@}%Vs3k@mZ?CH*h!cE@ zgmFGa!U<`gBqC%bVm#g>f>RU`odr=_5EJZmwFNQJr-+#3Q$&RKNC+tsCP&~C!5NQ; zBLz`M5L0Y1bz)Z3!2lJkpqnwMT?eB_ZiVmM`oP_;(#JgP=h{}ETq!J*Apvd`!{Jt zNYRQpc#l@p$8REf2!al?)oj96w%X(WVGdlzDUwNJ60*7y_&YkdmiUv83!b$F8qF0qI>Mi5PaSYg)N3!4D3 z(l|sD)YD3jpyzj`M>Ih_<)#Wz$_7hlN&?5fK7wcp#3FO5MKlFsg15dY5EFboH3cH~ zJxX9wKb<%1lNBwqOTB|31OopG!sI4lTQ+Hx=#@i-XkKUh&Tf|Sx;O}646f( zblfg7n{6r01+m4aNZ9IABy4fxUvpV_gsentLslYM;5QNd1<^tf?z$GSdTJ4?rxvk# zY9RzyPc5XL%G~&OxJ3*Q1ii$o%yz5k;Xtf5XZln@v?eE2C6=lhOBF_I%??~gBe=|^ z5d(#Agb;SR@$U#hoMjP5z=}2IY@Z?`yhlVxI#2`V?ExpQ|V@qi%gk3&G!fvG6 zv2V9TMXfR6O(H@Hh)mC4rsjF#TI1r}RX=wTB?+=N39_~cvUUlw_PH|d6j_n2AY?@j z7AsqcmFGc5Lt2TIdwhykp6^pMGQ3A4LyGly0dkT+(?}R11bX6EnG4xch@dNewb^S6 zr8|C&xyYxg#NMkKOA)cpB3M&IlnSCm5E)xai4ZRKsRER;-?fwy+^W^)68|O7yphtX_xzt|QMi7_z6pgstr&v!{_!R4jDVZtTpxdl9S0YIS?<1`kDps@w zVy(H#Uf5O;SNjwZ*Z35TxYnm=L`acv9o{2>t%62?Ku;81@axR=_CmVg*P9!Bsvz26 zZuF@tu~gOQ;^-#-USV{qxfv-U*vM$aFfpRN5DwU!?S*iQqxyX{b!iha{3Y56aS4i|AYVOW~cjfw8?*|s}VXzGtF;oPHvZH zn*5jMOd-##*rs`wxdSrtQj1~JEOVzz!lYT|E}yD`)ZIQ+6{&lCst~DzK2?O&y*^cp z)O|ixEt-|>R>l0TX!5U7G#n>nPWZ!k2~^*d{k5tYWBO*t6q*4!HQ@r*`6EhI6qzq8 zOpp~N$chtW)pBLS{{Q=#?oXL{ruco7`fnVB$}ZiWYLVSpz-g^!F3EywCCIqA&$p1P z@q8KA&-pSgc=Kgkp(6Ym50P+PnV*p>!F(B)Zuv5LR$-5 zG33iQ#pla7C+EvJi{{HX?d8hY$}w28TRnjPodYVjQw0aq81tab!wz+usf^{GOn4k5(>r~to@N9PXyrxVO$ zHfI6KxjcH@rwXER<_V9lxsFct0xWOFn+Z^x@1?6C6AO(>8JDBWX`)2?=xw?@ zdeRn1Z__yQlr69d@`VDc#0q3bWO>C>9{o#N9(_xfM^D@Gs-nC}<{3^_hp>gGZ)vjO zOSNLpWg&H>5PFcb5PFX;kDj%K6iOk_A;mJNd~O-+=`5pxltCAfmO=N><4J@RI6oM$GErbrB%cB=SPJI;p`wB;i|`?mhdY2AxNX=at~yF36W8!F zLX~BA);51D`o5NluEa6Yu>4t3*L>JXC+9Lapr|CLnEE#C?_``4Aj__;XX+1%XXi*9 zvd@rPA#u$YaJ6C ztG()fg>y(CTtjJGYn4ZTv~b?f^5`=QXT>X=YpsW(8D8$-h2fT`0WbWoaE?8MYm|+P zwDRb43+F;J$Ca4E?5gJG;@ZQEzUoPydXlHe3Log#!c0s} zj86lt0dXU*J40TQBP%oWWZ-X;AZx3#><34f<_(9*)X`oG36J$LSWIYpPy%J=-6J*&}2AaaWdGwfse0>sR zeN~pNJE+1u+CL%tfCSkWS2DJ)XHK_(=PjK2XkSX7qbMq3XC zg$lA%f{e39{O|8Cv)8; z&Aweb+C_sfTPW}Z<(gX)s?yvP)sOCKz}k&m zfxHb|Hnr?*I$-5Dy0aN?SDsF_+{KoYxy9CFxGHC{#rw%+yVJ&H=Q2H4#!-y_>YK0e z{~-wp{O^mhS~Ad4^9qYGOm_CoN>*cl{l8p{flqr32K?mJSmlec%9dW=Sd(<=^{r2F z7Ob%JO2^k;m>k0Dhmq8ZORrkqqr~YqEV&w)?<|T-uEyqjq$)1C{urI)<(&Ix()xlJ zG-=7DQ1(tj!&0k}`N2ZD)M{-0X$$94>xS&0qfF!3y13!W$}K4yVHr@FT@@Epjm(c0 z!39-g^OHqzLA5)3_fe*GIuy)B(+YeXHFs`S-77AZ8kv9Dg1J~~Y<{){bFuW3vsP;pj;#= zR2NCQC~t)Pfthxz5QTEc<6Y9jN%VX*g4Wv3>HTVK{$ru^e(B1Lp09_Z3%%Se3yWj7 ztr*b!odB3=td}^Z656Vi4T=k|M&?%wrMnED*2BBBl-{ytQjPSK1!y%`+T6-rThaVQ zQ41?CjyfBDsERA4YItdli~Y}HYs4POv5AV5h$8I0jZ6w@s>Q8RV^e?>3ue1NTngsG z|3Jj)SLIcsBdk1E5iUntS~(S|f^w)x^$}hZ-Uz1%XAdf(N1y1+YhZZu_?5Q z)PN$pvln$Yjnl29{2H-ZuL16^=%wh+oR`|lxrhio`^0r-dGrNjw3X}3^60PDro)J^ z@+whTbi9{Wjg(0@>X^o3%bpxb|qb??A?*R#OaYCm8dZvo*(ekLK zRe;B~8XI_rgj3rqP#cYnHvlsaH#N0If!3zANdjw%H6@?vcN8{uj;Rt^#sZOv=2fWJR06>z!`Y={2 zuRathN1W5iU8VA1*ELe9n!m{B=gzgMRiu8RB6Lr)0`#C3-P7B|N0)uSx0#YYfKgA) zXn?DiMz4Xx*Xy?Jal6c`^$Zpr*X0<_)C@YW%Q1+lwmjvfw~Qye9>VnKa zG#c`jHA4Xv>yGP};_P!ro7sJClL~Kyp0P!G3LA4HXu1+{k(cH5N_3>rmu`#cCoIm+ zJjP6Ka~m$IJR>K$;_N%fXl~2)=wq6mSXq(uFR~K!^b?)r2e8-HN}!|sK-9sf3a~O@ zevS@2Uv+i%nm(r8ak>lVM_89d9g&$0rzz}sJ9-DhE?>KCjdLwcn4W{8lRdzA)apRC zc3;!j9LRR)Yub&!9pzOlgKKY=p$DDlgg=0(M3v%Mssk8j^zQIOuuDbR=1}%P_6ii* zJh{*oEHwK;U$dm?frOSqhdt`OpEd|7wM+)k;?Ivv!(pyfGP+`*uGzFxW4*0L8{ z4@33|=+q`&Psilux7qt-C+?6)fc)wwsdTREz!?;G9jF2W6ABz8vbgetMHb%x56QWf z40bWLkNV~qo_^#Wu{D}{_;evJVgm|$L7vurEQs4-Weh6dWA(C9y4H306qXVNXJ?zrF+Pr!PAzTx{K^AbVaL;^()pF0 ztk__gp?gH0-6|JX4Z%FSRUY+*8Z5l6pCQ@;S{AVrs@%;GZ9P=woYb`(E`|G{9FCi9 zQGa=p1~&)oL=$LJ%1d~{t6UyUq$w)mHmm%gwHDkCinKLuo!ZV@-_9$-RZKgvzH`FT zj3%(w)9RY%p|7yvYcJNj4PSde+sVSaJ)mLl)!swf$Dr*ig>s-GR6X+i;CG|682|w- z?I2LM;p3;j71|*N?ckvuV$cqiLOBu=s-F0cQo92!vm+l>P#(d_C-<`>pt=p{7^~in zfG!gyI|`I*3s!GOKv&@YR@~Wgs3lZ4nVkeW*g`vrp+l6JjyeIVTiZ@CXeU5*YuhOX z?F493lLX~hPN;4&I}5bbLOTm|s6r7abnPhJIR@?QtG9Cu+PTu|JWTaJupXo1;ocHBOD55*tBY8}yy%}XSJQ9lN*7iuR2=DWeP^4vImDAx)sBSTj z66k0PJxZWsY}rQvs%`5iSnru>JXgT&F^}?4T7MLvyQI+_1?ykJ$t<=0C|IAf+OUf+ z&cRefx0qc;k+D`0K8c_l$E~!HcZDLlrRxes(v8hd-Uk4?LJ{|d8$!8@>k375ug7lM zRc-~32JlvNtvI6L3Qqo1MmL__M41z;GTlTO=cVeF_S$sItrisFllvEhP4-*C|G9;$NI0IlyX)=xk|w7z?y^<2_W z5#5yb5Je_hMS6%LldK{=qJm+z%6q{2FtPOT*7xv=@K*GQ-HINf%;fCvN1BGqvbG`6 z7SeUA+EeILEWM}DPqg%&s0N)(dIBEC^`3z1uC6EGVN2W-aBNj|N6hsYG5Rr}UV=Hv zVtNT?s>Ss3m|ihVFOTUJ!}L;2{zM7ux!fZYJ5wHo?k&)17TQ~&(=D_&pe1t0ddHx> z0o5&X?-;ZLuij%~&|`e{9uu?lm`bacF*ic>BSn1# zI>$o$h@o>Wvrm*Rh}KFC^oc?H0J_r3gQZ7AeE`kh)5ZhJ^ez&vA2#YM@Oc*ASK#w4 zye|x1s~?){3%EF|r1#>1iWc4%7O(Wj6#D*Gcs~o*k0JFF_{kRDPv8qIydU8(5X$|rKxnz{(fbRWr}5do`U`xKh4%-1h06J%>0o((z;%7nKL_3jmls9J zTVn2T2-Us%0D(Hk*#JO0nZ*`5z_+gfU^>TH>%wRNpgK$ph&8YQfcjyAyC!mUKR-}7 z&T%$Sj9X$k13hP84yQ00=rIFhn1PB(=&{_DkvTwzi9rIb4*_d*5TKu9`{7a?CY(2I z5WvBkHV9xHDh2@@ylH~~R&UxMjK6#F31yuO1|>`eXeQhbQk#LL#1Dot+wf6k#Sexu z+wgH@?a6~t1KUK&!BAwI-(?JjB2JD^&q=%HWH12~$_$AqGXyoWE$VKtU*$YGM77CL z=ACF*bOz$M(^AnG1)u`FqA^Z_NV1r)VJr- zSbHwj_Pkgw$ZgQ2u?Agg8??6P(hBXF{c)&OMn5z+RFqj`l^H6^tj+#wyg7CzdxjP? zG_fEyZCX_-L&h*E2xm{ks$o*ldZcL8FmKf`vFfDkRTE6(`EGwYOl;WZ`yICpIuNj@ z08yq0d_F11S34Yt;20hbL~slb2j=Q%d$#Cv(`J#nhKHkSf@^pNOrI#dF!giX4e%uq=DRB*fj45gaRcPlkyFqvW2PYAqNAL>kZh(mON?h&#L|eH1X= z%yx?z1x$BY367G{lQ)X^Q82BC%G0RMu6VSPHjq)M&i-(b43yU(qj!&k6zx@IMvF3= zEPk{obGlFEDlX2yszM_T+CQRXP5 zXyq7xZ^uB9u-h2}Mf9eO;c0;t5@}(N8UsbPqj;^@F|j^42Fg^7`fylg&8RZRLYZ=T zSScISu~4QQ4=Yt=j)gM1A3qk#1Xo)6ST+UeYsaEmLfGe6D3k2$;keHl7$G$4rTTB%qmt&6Q<6r`GY^6}nE3{Oh#|f0qWI~SZnx0m1$w519uMf9qRjDtdUpo`yH&kB*U;m^6t6~D zvbeE|Gb1fk=m`SFF+3^!1cC0f&=WlLgc$S$4?Q8r(ngqbEmYC+e_Fd3r(Rk*N-P~G z(6cOboIuaE&~Y9*E(RUvq2prEaS2dma%wNeJuFk`c!8c{q2mR*%RJ#=CWI?+QX#-I}`g>qfQTRKK8og~on6&g(v<^@Q}vq2|$=%g5Ql7~);K_^uT z<-&`NSD}*ydZC3*7U*82I66*NCOsRIW6;SSI@v?@0=8cE_sKFcUW9_U+MbM&v7&=; zinab&v3`muvd=0qMHI=1A{hUtc_P(5g)5$o>43K7 zqlu(lPWRC1vAaH9ph=!s?f?kYc-9PoW-WAvKrcm#O?ZZdR>xm-XuuV%=ZR#0_EMAiKf!oT!Dhv z(PpBhRCE|}TSG-O$Tdq8xzZ{!OBA`vDl*F}GRs-70g+kW`dMBP-sf4BT0h%DHOMtv zpnOO>m7Xn7x9*t@sIGfv%WdYAP9tZ7$z=~*7PAHF8rN(ffFlgUPAt74M6D%Q*~ozuOeHxPZ=fY&bhe}n9p=RvJ-wn2BX z^Altz=g6FIVnKpzVS;QCWoi3y0(bG^gp5lPWJ?od%MxU#B*>QM$gsOozX4rO&SEE9 znIK!0BP%oWq_$S;NsKl6YpwiRv@Rjz`W%^qY!KO9xXbuwl{r;p&K+~7Ku$}LZOqnf zi6bDJAJ3U&&QxB*-==$hIWNwu(%(aGGsPkRf`&s^fA!k`F6zvojBWvtgG= zZ<;3!`(Kc;3(u2={WDVRs`JpWHIOY#hPF=&^kjkF00AvMS)eys=*fWU z66a(<4@5m}4V(<9ljrUtP6jl0=@T3t>|=y#d~|^@)BP=Ufk53Miv=FKAZFp?W5FnLzKf&}9PUaL9JF%tMz6)b*HU z4vHME$D}#aE~^yEnSfA@e4ZlEyDjt-f!<@Gr+DZo0&R~gsmv)JdWtucL)|H0V*21P z$Uc8c%&~Jy;`W785S7u0=yFl!pjBqMD08n>X1P~pxhS*IDzn@xv)tAI_^g5DmDT{K zI6^fdxw?wUciecBL$j|n&8sM$s7-S<`4Y0!DD2^axV4 zcs&%-2Du)}l>2b%df!mf>!D5XwXTOUJ@EjF+y#U>=D6Y{RKunl0PSTSwa^WK_A-Yo zbOWHh#F4)N&|b!kgc|^L@8XH*-PNhy(o=H`tsb3f4NW6Rix$syGC>-*I!!=NSkP$#deVYU^PtlN6S+y0?_A z`gF0Bz2$WD<7LqcD2R{CIvu?wSYK0aEVnXH!-mDq5H()3YMcQznwLc{Q4bV*hF9YZ zRU_Lbm1?s9>}2MgoZ&BpN(SdgW#zy=+OF#o$*gXtM`xwxHWnspiY6!)9;V zW&yrxftwS6+(BE0; zHi5onq1!xk8=zs$zRg3o`3A$Tu`NIy9InYUJHDHLHG~Am8*F>qLiv=N^5`84rBhN} zX7PhZX+U+1jfbuHk>4BODT{l@-a!cWVt7(kq&8%?&oTA0vu-lgv-8%N2JOy{_*y3p z6`qDDLw$r367ytdzCC;08eDYk8q+L$^BPmD;ZDiqw(s@i*#KurrlPa;`s|Nu{6jX& ztncC6grd(&knKs3ou44PAVGFvuFO4iV{fj|DsxeSY+p>Kt|V@fLVc+0;+Rb9Xn#zm z`O=pp2(vjd=c>3gL3UY!?D7QJ6$!E{Rn`%W2>-07<|-A&WLK*!JFzI`PJ%Ey+h`fy zV#m-nS|)AuUE4;>q>a93+i00@qh;tAVewJs+i00gP8_~D+>}WhKC)$d3fC$`WX zzR(?7sI8G5s41OYcjOEq4Wb?SX7Jgryg56q9g5s3$WJYDry&1ekvlzdr;J)|U9{69 zcX}l4-YH1loSiZk{1N4FQMgm)g5#X+U)kd0*aWrkvr#x6-ee0u8-?QuOt$c|QMeA1XQS}Oeg$#1Z-Qt0 zCdje*Y!GFbJU%?O$y#)dwMgTJ=ZHlvZg`GZ1@8F_moXycZKeHC~6yVlrP3}YRhp$8sqm3 z3G)#P18YNs5+@_^-dmn00ZPu^iqDNu?ukVx_rxNUdtwpFJ+TNSXEro)8=*X3 zZroQ$lW@M=xNj}*e3--lCHVSgZiMoDfA`LpyQe#WMkt~(F94@cf;B>Ufq-3v@&W<7 z2;~I=Ci4Q+W81XvUKe=i1-{9!dtD&V{8b1CF3!({7MHTP3k90B)?O&kOOax;yU;@~ zlxE5yPv!XDC|&wo7=vC|DU|a+p&FswD^M4q+$&HQq1+3ojw5>o>RhCIy`g(~P)fJ1 z)Ml?hY0F;e99ICtzOlDL-=OtebWjnEP+la8xCrG%qKJ!7UgQBRzd5z31JRbSf0G3dqqK3^PzUYuLI>4;C8bRYZS!jI4rY0>)y>Y_*c1?r+l`vKMH z(f(NV?gvz(NBd*Y{eV^yJ>tTWP>mj4BG3WW(n|z-JyNXRO90jA(IqkHC4g%5=#m)p z5vals78-26R3+GT^5fXUFM;e#h{mY z=w&hJWtBp?wkK4hN0$rKMUO5QLvO*mG&Fs=hh7e7*oj{5p_j*?msbkq=7CU+9$g_& z7d^T{pe}lJg=bz7j~-p&p;yG9S5yk+?u1Z{9$hI=7d^UCpe}lJrH5WAhU##P=+TuP zdSwiHWu;K=ehAg*(NzL<(W9#b>Y_(idFWL+(8A~{$4ui-wq7?PT~#TR+bcpfdUUlw zUG(T`fx76?)gF4aKzrg!-s`I!6n{CUM31hn6nc$?YV_zDfx76?H3D_fqia0$8iBf% z;58n4jfZmjx(3V@s6qhP{jR}`7f#e)gBdTk57)wDN=8JZ#OsiKf4k|K-8%;l2$la1 zJJVFpd%)jyC^Y|2!}STW8**f2b}xTpj?C?LZxR`+7ys-I_-2vmDS@)?_R|dqa)nlQ zOM>iHJu-2d{K7sksOz37`acP>-{i=g8h0ef?o5!~1(|a_xNGlLS@!iNDfd)t_twFL z?Dr?^+MXW^;d5>~^I3fEZ39?5MWQT0APoUVG=E0_SE#6{J z(kSG$(x_b&@>*%sE(&?AZ`9XHqo(tlJ?UECsIQeqO>YF(FxMt`Bt9O3ZIV!pLS83O z7lph|pe_n|orhi*gI?#M*TtaMB}2hvnY|X>3)Dp+ulLaFW6#6sQ}KZv-?spu}N;Pz^HPBv2Pnx=9SR0i`s) zvdKYjia~Gk(3@h=n<|BJ+#ythi#G$hEc%DF^kzVpMPDPuMtU=tr$`N?Zw7R^f3Vlh zfa((bW)VY2<2c(s0I#i5$N|8dW%4Ru+UpP^AdEYMZz7~GFzYVto z9)f_kC*B4+gE%D?n`LOar=T$}!!;G#2%DlzljdhAz(+Fu2Fj)X`!kt1kA~ywci^Jn z47vjr1!vG5uqZf#?toFj8FUAX3eKQAV3;_A)c!kQS?~tkfqNaiL3iL@hvVvZz>08O z{f?M3=#H2(=#H2(=#H2(h|2)pq_2m_Y3Ms)Q+f1@y-Rn(rt;|j_>_8sbilk5HihHr zcfuweFYkmsVWoN}%t;=Mxz-?9ok4doL|h*2x2U@WOg9vVoV!q&Is@DlgWlz#cg3K0 zRSM-|hR|Xej_wv?od+s?w?Lf>>TVCc8_;k@{%#MwTcB=MzgwV59;kaPRGmTh2-JC? z?h&SVpco>)$3yP{G(4~69uK`I2EC_JDA#7RR2@GD1?oId2LQG zJcUTPdwS4Ac{>gYl%41xnrAp8e-OVbODG4;~`4+5Ixf~tEMQ1w8S$Drka zst2mvL1jT+4rWV}PI}JPLl)XmpbrVud7vH=sPjNQ1gLtN9s)FYpdJF$$#XqW4*{CH zdzB-CdP0CZ8dk4*gB})We|t|K7O3+;J?xYM``uUZ|p$m5T*&dxz z{I0CKGp2stS0y~9IiL{!Sy#r>D$8!ytMEy`{HvbR9I>mOw^zNcS52&V)k_Ii{Z?dm zWm|U^4X?vh_KQTEHm@dJ^;&}Lb(LkmsaV9D3E6*_AbZOeF?4?gE#67U{%(ToJzK;@ z6^r;FA^V3Si+hqjvPFD~B62(xJV5jNydpU3J`Nchx%vSgm-gnIkB>`xbI!-deRF#} z*4!TV&F%46b9+203MZP}0H$Ne6Bep|z$XOioR3ck)HxrY@X#j&>YR^Hc<2+cj`c*W zjmu$XH*h^^q3Wl3QlQTH_@qFc^YKX!eNv##`S_%VKItuG9X<)@3Y4ys>62LNSl?qB z+ubLz*m2hLx7GkV4y#@LH&2N&&S~_NDC3+)PkCjY5@npz=qazvQ?VL&DyIgl{SL~W zNvQg7o))Nc8a*vg=QMiSL!XX8pZ3tFW6-B_pw3trN>9}@7OD=MX9Vh;M$ZV;IgOt2 z&}U-MXFT+o81$KBD45S$W?CIM&kFQ#SkA@HvjTNaqh|rt#m=*U2B*=pfa*Tw*%c4po%*|wY`_1OtSBg z^B|$>zWFVn;V}Ad0S$-Ie+#G{I{z)8;V}Ad0d;a7Mo+u-(Qg4wK8*gdg{s@;WwG=z zTlFuCrH>=UHt@2y^kqOpApK=pD%JjS%+QxPbtGH*iiMWSI{OuYK4GD+2=qw{eZ@mx z5$N%_lFGc|p|1$k?blw3)oyI+;35LmYY&XS3TQZ_{wkp1kov2D>e;+k0S$-LUjhAE~8|Z)1qKAp~Z-^r9ocbH0h&!hKhF9c`m?Cd@Mc#-h@`hLB4N*kTu-C&U zxN{XrJ59LyW0j~PZ;B%B82g)|h&#sqrdQ<6m?Cd_Mc#}l@}^hhO;O}k)GPt?+ z{^Y(>giB5+66ta9--#lxAui>GQIFC(LEO@be;9JXf!@ zQ;UBK#fKyAZ=v{b#QiN4uN&33P<(KOzXdz*%nrR4&&zUa0QXxbjkm1@dT#e^LAV3$ zZwulr+qmBLh_`_Vo4B`$5R2dTRY?cW+c3+q@LSiN3gyz9b}957fxd04?Hz%>W1;T= zswb@80W>^G^Bq8SlzIoy@Y$eu0IhhSowG)oYkS@+Jd?*bZT zq<1~^T@Ph9dRL&l=kLm7^ghaAqj@)XG8*QO0C7V>>s68Wph!5O{2mm+31zFudr(A2 zuJ@qGu56d<&EeBox9?TjWZt({>QUeKrSOlemG4X8AKSv;_l3XD!f|A|cHdN+Iq{Lt zwM6c8sIwOPffW0DTkHo?>?gL^4}7s7XtB7GmGl8BZ&{Sx+c(uH?^v{BaOcDuq~~`( z6vn5P@u4vOU>P5J#)n{pCuMyo4Bm(jeN!a+L#Zy6W1O22xns&7#>N+?2)AoARu%b3 z6#2JRX#po5#qI`mvxukn2Ad zltGF%eC$yl0~MV2AA6fWb~a~g_D@yomwY3+-=u8{{Jj8E7WjJs7G%fwPc8 zZCX?;hwh1Y)jfgl*X)_*GdB2?4L)asd)iOH$UlkjX@cyJIkGY{Pp`y_K zj@-q64ni;cOM>i+m`p!?@z(^|mkF}JRgk6YV8Euu@h=nkdrn5@`S?eU%qjgfWbP=7 zlYJAD=@*+Yppu{OJIdNd>TPfr)4!OX@drJQ@=yKsqn=9nDJP@Tke*<7v6ImsoG<%D zWR20dqlnL1f{UNQh!9--EEZh+EGM{#puuOc=;CLw=pwrvs@fhk{~R`z zM{Jm^qt9Ve_`;XZVN-Y(*5|SD>2sK*Gxg^%Cj=Ki=YFE%uAM_2`*tycTGjCvp~d$8 z{z;(K?EU?dKsA?pEIvOd{U-t5kWe<;D2E6d#mFV>|1$uMOmz$RGXUWmNB`^re}+Zj zx%+?i7X3M9(Vt}*ko0w99D@ig2DCc9)|<>9_*?}|68cYMq3wV1(7(i>fAP@2#Grqv z6v{!4P>o!EA+^b0_fzn+w%D4`m;{Hs7Y zq!9X7fx6(*U!#JwjidcF2K_6b8b}ye=btT`Y$zhm)j#Aa%2%xqFd?WX~4go0t82RRzd{8l)1E$3U|)U%v#J?GmP=UZ?T^KA_Ctzr_+9B@rT zCSsXvAm0hpxevbsG`J7H12nh~zXLdI*1iK+-G|=+9KIIdJAn0T0lvfC3tzJN9hy@9 z0SHVGTuf0LJ@Wp&DC4}=-%AZRul4u72EKEU)-z%H zz!lC=tO<>R{xhc3KSik$+ZO&QO0nDj6AFa~uKd$0^iQu4Pow=)6iPUamc}z*6wZl@ za1Dw5C~&v5{88Y}xBa7s|0uQ57gw?){OI97dbrA6ZTu*;p|0&_$X_j*9tvlQRO7XLGf zUuxyKViWoCxRn89t#oD9WPkQG#vWq*Cx+?4*$ufP7vJIiWkWp~9-H~jR# z&oTJviJxBh>5ZSG@zV!CL-ErWKmG8-BRrqtXCQtC;b$;@hTx|ZKXg%xQxA+0_K;P#bGcu|!7>5yq+p32sJ%zRb*FucW#DZG|NHM2DzH$!XkDE3AK zhUNTscIM+|iFqzN^m9DNygATRqHC1rUx~Mi%96PI^U#^$3s^IT+QJrkvCrq2> z=b5_5zy(qjbRs?E?Mfd1gjqctK{Ke#1ssAQu{lRqlI&wk@uRzlLYS~Ds%JGQ6s_xL z&68$yV|E@EQy4EMJNHS`ymmu-MUh1%Ki=HwACZ2DadT}wt%`CSXxS?40mCU?rG`OUcH>SE2 z+uUBy8+At1B76ALWzvMp@x)jME2IFQ2{NjA~o`^D0;@E z>xS>Awx_|f*=Nl11abXm6La72tl5!}yU%lpg&a&4cY7YXx3ap|gYN05b$0smX5`cZ zQHj-_Ux^<7RtcUT=U90r9)qz1|L?^AXW_L2L8LbkjN$7o+(lM!1LRv6wUM$)q6XRP zzBKJ5xVkuEk7AaFxCdur`QcJ2q!|6v_X?uL0@G9#y!X0)uPWYq!>0<7def(h@E}XZ zjP$xPRt8qFHMo^{!7HhSYmLRTHVYK2-~;_mSc}$T964{OIG% z8^NSqQCnNFjZm?>qIN!oZ;IP37ZBJ8J@;IhLfOq5p_}S9un~INdGbj{l^5Zm3Yxzd zIWUb$Z{*jfhc(8#w(D>(r84xqRF4{qGR~{sm>-kf6*;$hV~i{6k7z84xb0zMuSnyV zB8@TMt0IljD|SU4tRjsQ72ya@MbsP9L=@==zF5*ks>S&bn|MWE=NRvcGIBif7@zA94*hGWh%>do+A3fX5Lz~I1aJ!mjl|ni9(OUJ=GzWBl5W4yT3YQ8nGia*icioi#1MJ~!%a?QJ1JJ0=4jY z)CXnpCL9q}%RO`WCtC{~XsL`kX<9;=Ya^_IrGS=D=DMgKQUtcdEjh)?tKbulZZv2K zMXt5-+!%06C~_k_yMKXS^RM!%_9dW!W9a;!~4zP1%*Y56Acd$I1JH>9UfOH9+fS{NmByDfMO1i82%^jyWY5 zdC!BtT%SMoRb&T1_D|MA_fi(n2FmP@hS>tzK$-o~aGxrOZuPa$1`6$uM&Lav+6D^g zEYt=H-Rf(h4HUW*v(E>3@sTg#p)YN*xDc@V&e{UJ%YR_HEx@}F2hhUX`uV3Vpu1p` zle;xoTR?T{W7W3>bPvY1;Es0#Y&*-O%M6apc7O&iVmm;C7qK0n!Hd`q;NV4U2W!=f z*bd;}MQjJKdJ)@UxG#@J+Ny7ds$Yo%eSAtWpV};QURqX8ta|mAwHIZ|VKZ+;dr`)D z58I0}D$n&Ew)cv(_lmFv+KVFe9_B%#4z>n*>&dwe0(D-)4gzg!tG$DVb`a}1Z17%p z@X!t(s&Z$22UxFbo9L-&5q!Xw{WuHt27T-yfITk4v+zGX! zU9yuXGR4+PC$C5+uLy5NCsBka*+SQ|_n)&7q5Y-nbr$GY3+*h><1DnZhjtdIyA_>1 zv~vvF*+cW6HptnI%mI4;y8wEc_b_$=bYpb9g?91xzl+>|x6tq6?|&D6|JgLV0D7T0 z!5Yv-+Q2xZ*ao^(XaoPQhf6rkE{w)YrjqC=-E?xE4V%uc&@gN|yF$aT>Ff#(!=|$< zv<#chuFx`UI=e#Cu<7gyO~aMz8&aUxIXIE$$Hl1B@ZXj$ryW-qH*mQQqv4ODZ z?21kvHl181oQEIXbasPD=SCB3MRkKozlkRL6gHiApxx*&&hF4eM64!AA1OAk~OJ^a3&+g{?o&8@K-LThsX4QZ2{9G2b1QKi5S@( z!tu;{oMJIO1#_as^z@jXF-%X7q1#$9RI8_8SS>x#9G;6#LOE=>J*DA3k5m14WoJKW zs-?L^y9YnIQ|tvL4n|Y061||rz4&HmwY3+NxKFCC7nHcyS7|ROale)G^Qx>;qI*G! zy=J;Es~FML8CH>AP~>ZbF2BtdHAvNL%QYcuLU)e6r6#_!#q^e%_&&zym!!P9q?9)Ik*nw0tNX~+^N`|A>Emx=pV&?8<8NXge-qgc`s85Ra*QNKH&cBD zGv8wR3g+Zgw$?|cYim|Naed`-D%DrozyjoE8|a&z_@rsrhAU(isEg8mQs6>cU_U8v zQFi-BW*Vh9DdWyAvAfS&#%Pn*uppOc4AfS(U2g5)> z4_SF(^qBM$Iv555`Z&zt?P-8iF%V|K~O+F8H1oecvQlUwn1cnn(n1G| z)vK)4g8_X~lo>2mv%ylC!QSe@fIjBe(u2k7r02s7u~1z~4-w`UX!%n35I~n<%ddqG z0aU|-LjYYK9iKh@6VtpexkFICu55;&MngPehzx9Nm z{9GP=SjLVU^t^N2MnY(rZWZ0f(yZpg4O*`Qv66^Fh*3FCMQXz=MZ;Vcxd<1(%0Blr zg7!eRJSw8Qs-dFDYM|NcheDBGqBT~Lp-|-iSa}u5cUnb;LXlsrybw9$Q+9fJQFM_6 zu{iDwg))&bCS?lbRmG?R!>j_mOL@&OQNYE+hDlAVwF(ULH8D(T!mY4}`I;CeHPM74 znHE+Q?ek0QVNx6GP#9;aVW^EwQB|W+#X_qL`xk3NPcaM^W!zbv;i8P&WekG+_jwVV6Au(6GxMA>i$}n)iJK zz`DyG!Ea~?+w2hl+c!`H;jqq#y!H@(deca&lzzZ>q$uTf+apCOx7!{mN>SO7qRjtDHbzNpxWhW5{@2WYb)}Z+f&e z1J>4PX^$Oo9Z&0x{$KfHEMND&V}!rK62}PN9o`w^+vOO0H}qzViK?dUl4MLyyF4Nq zBML2x4Gr<8aIA$7kRE!hz}?ZFV+HPx_8beiPM60D+|AL);$|$DIkBja9$Hn&l<6`^&ak2eB z*BA7<=>C5^ObS8g@h~X_oyYUBbs^|H9yW#j|9IH6ODb+W>|k@wD*022AvD-jh}!D)^+g&C=z156QIZi0-OLvLacWJ6wz2OkBWs@ z?}S7}CR#<*X)sX~`8OV$CIwHFYWWX_1U9INUXh7XBhEQ7(bvetSdC2dH8K&3gy{Fg zL`Ar&V~vPgVM;U!nw*P6wyMY^D6&P)yi$=#P(<7$_$$|aF$s#Omt+zYS?d?=lc0#( z56^7plPi7B2EHxL5QKB1ZW7Mp9H9e&`*j%PXbhf7bkfr@AXN5Y6$%# zG@=kfKgosAxl$*)q?DFS1v`Y$rvkkzav}7oKx;>u3UmmePX*e^T?m6?^HiYspk!@= zQ-Kd5^r@~5$3y7TkeSM;zhfGd2_f`pP$q=Xr$LzzLZ1eOLI`~t6w(m-G+!6I0n?yR zB_VWfLkL#C$aH{12z@%hA%s31;1EKe4sZyePY3vF>G{(E4k7gE0PCDK9kuXzv{5FD zdeQXc5IXliR7PDcGoVa}t<8WkA+|OH%IJD`1{4XgwHZ)Em%B5dNQkY?fFdEbhEOk8 z#Y3$&GjLBTc=#i3yr@iPX&*D8Oo->tgfbzXKNHI6urd?MgfQkzD08jU%1kH|!k9Cm zjD|7iawkWKx>;rk#KlTy3B<)pXL-o17-W`*%!)x~c}SXDLqfWWC9|bkH^Fwc``J>h zr`wThHX!;D!`V`;Zls*spw=Zf_iTuLkFdh6!`s-a5u^SNR@GGUZ!fD~&WK4a6@a%4U6wUo_HHOLP8&a~>F zpDo@bf%bX0INvicUuD_t-&J_T*MfxX3ln6EY!R=ch`gt%ElJ4ElbZCFwEo^d&dWJh zmgi)5vK29zo|{-1lc{fImB=1O?MBh#MrErL@~wf)yPMouinX~yd-1xMOphR}kIB?8 zwIM-vYD}iro+h$gq99K%@VHF&w0ZcNzms;DTIO{1TAd-k25n9#U`tG<@U025ZBj&< zo`Cvz0wsQ-LiDu6Jp9dmp{|#C(mc1?<~dKA=Qi6s=lSM2FV;Ng`Q|xKnr9mMIqJ`o z=6N8$BeHoBs4kZI0EW>0d;mk}em;OYzs(0Qgzo19s4Lm|zCRE+AHd|${mGUIuL?f` zbuyqKbbm6S!KrXEpuwqdGQc5pe=@-8J2)BO;8Qpm;M-(4I~koYgzitqFq9ufhhLYy zh&7;Yl?9@Vb0#bhWt=l%fhfaqasd(?W0kLRcR{_X`uO$74e{Hc%6Fr7VIXA#}e8iiFVp zA}A6<_luxR2;DD&GCI*Nf-)g=zX-}`=zdY`RxEOJY#IY-2;DEX%BX8)u_)t0_lrdt z7rI{zWpu`0EQ)ZQOzRhWMHYKScq6wna5U+VAwQn~-_vtRrR?i#kjr6@l{>6gmw zc2WAJ6>c}LI0ejKqcRy1N{}*0RsO0aorq(8*uyW!HQ2**>|%k-p=;R0FNdyS6Tck# zhE4o(R8rW)FGod%P5g2g5;pP6VMy4-FNY!F;P`Sdxretq%jL06{PNf)etB#YzdW{y z=bS}q}{wB-_n7~P7m6^x6NuNBOkRQBC}=Y;9k=3Ksrs})|}Lhi^qx!i52*WvOIw_OJ< z?~qDb2Q5R~b{(|TL3W+AHdh(zfU$Ag>~;UanvEFUL$4Q%i`1?MCPZr21EZ1J^}vKk z?RsDi34T2=AyT^@n8#7Fu5Z_)lO{!KvDo669@&lb22sF8YBxZE5UJe&1$05N0Sbgj z?FJ~Iy=ns#2$9+iP#`%{%hep2x?fJ8Do_`xJyooBk=j!MeNwDDRjhVn_^ICNQ^jgm zxu=TNNs(GE7YWt9@@c|Eq*kAMavGo^QhOSp;^oCCFOgbgW3xZa-_g_j9aXst-=2nQ z4&mF=q>tr>Z@KZ(*=5t zHS~00a`irkg`e)Br+X+v8K(<$MI~09VF9`~K0^R5@_B{;>Zh`YrBWl{FL0qtei41e z`r-b7wW}N4%~FyJU2aB6A#}MJnri5BGc*mM%gxYKLzkOTJq%sy$hjHSbI~jxy5yJC zCxtG#8KDAtkYI}_;6j&M#1t30+~TWhi&Ry6el>mLwBv07F9a&L0Jki1fl5qQ2{A+N zd5G4<%~nCXK;>3JyFleupmiCyRnRU_xizYqEn1CWy*`E|KN7ml0(8@|O#m(^xeb7@ zf7k{<*gtF&$aY-KCbA6`tow&;sNk@F*am~GJPm6@P;y(|osLJMxFn+08Y{*E0lm=e zBhsRj+ef5DDb9jvQOGS``M?wfyC7*-4z@=i8#SsdC`q@%X?ld?l`5&;HOsK=+5j&v z_pfETY2B{B&Xix-VO3MjvW;3|PkWZ`M7b1oTW)vyU{``{cY^HP1R1L#zdX7?^JV9& ztbuHS9rywjX6qKlzW0pQ?8RI8{*j9kWcx&>J9$?u-8cEyUYsK9(3>(k|Urv&^^4 zGPFw@uSQ2H^X;-M)=|oQM=6tjV#C#Qa6x=XjCU0FKPse03buhU z(?=j#aXO6Kw!=bn2fITcE*!l>ATAue0}x#k><~y_T**;s2P#`vc{_4u#Ur8}90c;` z;y8S#h3igsC*UC*y%X>dj^61l+zEIHNACn&mD=gyRB9*Ki_~?$6IC9<(K}J)6~obI zSw-|jz*$gaS>!&hewNh2=jie*_$*%wXGtv_pPg7e)$J(vG4`|a?x^laIb1D_c4MmN zBLL3PP&3D?uua_sW(YO!0yFGVcYzspsk^`pyVPB%fUry5g-Qs!)Lp2AuuI*AdI-DJ zUGY%!F0`ExYTgywrS6LDQg_96sk>skR1UZ7D7s7CEse~^W=0vvX!=b|oUm)aG;+->T)fUc5m zdoG}1mwGOsZkIZr4F2dY^*rHBvg^6?gyW8ypXWHppNl!qW6l$dTehEn`;|x!fJ-zECcomwl>Ms#|T>h%U^%n)5T^y7}BISI@WibFW-|a<)(H z)PRQSK;W0eKNq>9*?Z+^c3aNpETcqrGZ#r2?r8Q!QpO@2Rjr-sAI@fTy5}Xj{o5y( ze1SCY%RXEZHe&lwwK~4-L)GHQEOPNa?nBk;pt}!M8~m61V4co1`=D#si0#WAm(uQI zU~<@*is+UwBZ|1~Lq-&F2PZRLkxWdHj8`NRQzYXR$v}~?`N%+#bj95V7dH3cN4JC* zLy?2gx%Ng}3`OpZ&O?fpUkpX=lbX61iiFQKTnt6-w{m{2fgMZp7vbq9tXV8D@tFpc zT8Po4UUYHx*ZQf3X)d2g)_viAA@8x|{X#z9lJ|S^{up_`C+|nmfxI78pyd5RW~l`4 zM-|AYDWY%jiHaHxQq|I2t_AZi5hX6LN?amJTxgZJ#4B-0Oo>ap5|_l3xWp@Qi72tx zDsf3gCAdBeHIWr1F0x8wMTvb@iL6&58&e|dmB_}F$a*ERqD00jk*%l%7o=>Fx?{c+ zN}LZRn*?Lbsup{(r??32+@ndVVuck|pc3Bp(aKeH7VU zz+3AS2@p`Sfe;c%vQ&|R0t$n1&~h1q6CkNPn@X{yvKN?W@NEl_Z~2hz2l6G$wk&%s zTfT2wz6i3x2lzgueE=IT8e3NZ1v$BSApgCT$+CllUV+Kz->*5Kvz_ z5;;MSF{I3Ud2m~$krI;KlpA8oM==>|Oh+*pYfMLhj5PdFOr{c7QS~3?$c$n#_I@)8 zWMW5pz1)zI#AkdUQ<8TrG6~RUnjf9a_ZM49`YX3#iA4;A{Kod z6S2-?9GAa!9^<(Dt@9WsMG?Kw2d|o=(iq3ZO_?)}>zz1|Qhf4_k5s$y238!{c!ssk zV?4uJ=P{mPDc3bB~2p&eM)(u!99J$0T4j)5(x6Q6F{b` z51zvGukSxEfn;I|0>Ly7CEJjjgwx;HvQiuNF^;t;M{T7gbFH71uryplT&2 zGN`qZ6CLP81|@Ar3za7_D2@2`U_CRDTdZ}M6JuK}RsLLBzA8Sx8n9}ms{yN4y4p3_ zYQUP3$H=GsSB?`-l+?(K^oMB*C7AYh1Vee)P>VN@9M&7pLd-r#-{O^ zF1*Hb;WeHMukl=XjpxFtkD?kVE_@P_q;tiSkR)~ClaM4e;ge`^S6%odq)A-(B(4wE zKutn=;$1j(gaj-ud@=)D7d{!l>cS@jSRCVIVA{Fj>v9s40Vr((DDvCCSSNr5`46pWydUPTp zK7A?^`7hKzA~KbU+=froh^9IsQ#~S69g(Sy2#J%aOr+~=k|g0YG-U=AUp|dNs|@Hg z2K`4gHv*mJK&N@2(;VnD4|LjPL8qI9vPn;2UwEoh!wu+k27TM4bh-nb?txBspwk(Y zsuShYbb$UWsBm$SDvt1poYM5zzV1f47gDy1=byo3tZSXYWH9L!Uh7SI&4`VP?w}Nt z`2Sjt$-0eN#H4Pc7ReH~QHx}$+o(md#BJ0fS?V@wk*xRbbCX`Q_k4`qKm!v3*H=(p z%wz)AZOr7Pyc$Lw*J6(z>n>)xe4Od!<4gdmyO;?)br&;{`0fu$lPsXb%P7Pw#ZkNc&sKXp4W6i}JCS%RT9GwE2!$hpR znB$1daYU#A&tW26+y$G9Is^J$F7i4CwdSIZL9Mx{;~b!hQI|+%x{EpoTIWEi!PmLe z*P;B?UDU;GNE*n@1CmTJPpDk+^Piz5x{{J)c3X7M#zZ zRtwGtsN6H=GpN;q^Bw5?49rv?j5>9n=MW!7GMH|F@~mGPpeoAJ098?zb}3B*R7F`D zph70?K&hnDz+_RD!k?L{ER8JpB@`74Y46U&hup1Rk59jiG^)onP8#905ShxT9^^$C z@w&cxuvckRj})jhsz(Y`8r35eDvj!q3YA9nNQg?KdL%@pQ9Tl&^Aq)|jA%V>y(f+8 zJ!w?$Nuvd(7Kk)jz_q|mP%J>2R2nTnl2jTkK$27$EkKe)87)X)&k7mgp+>&|>4}#{ z3k|SHqlFA?rO`qFt29~&V39@(0cxdD4%RzaWwa1^=#)_|zQ~Y9iwurPqeYBkrO_hb zs5Dvx9I080fTPlA5pYBr(H`(Rvb+c|(iRt?oKzYu%538*jmVZ!*DBIzF%ubSZt{zn z$S8cGs=U|{S?m#6?1(IOL@1LNGm*G9zQmVCOBi&t0bK&nykLw0T>{XaJSx0|L2Y-w z1fa4V=n@Zf2|)9Myr3W`#3}^(SB!_;Y1rb?UNmg+I+jLZyS3=tE#a+Y@(N3NB}D`B zfSyhGf7&0ux9`E%7&iZ#z2JS@z23z1d)f=W%S#@%O6=%5@nc@*xh*DaJBQtZLQNzp z%y~Ov&f6IiwktCX<;mkayCpFC9d?GNS}v1U4P4>+n+n&!70y0{*WfB#11g+8gxBCI zT!UBP8fZJN?lq1az)}DbsL0=?3~EK|Qh=&xT?$YUtxEx_qID@iMYPh+@G4qqXLubV ze`F~ddYou&Gz3I7H!=Y$S{p$?hsYaU+iv7$c5~G7{fw1bjlfgQ+6Xw+tc~bby35C9 z23qv;GKRLAbs0lj%}RU1OMkVDp{-nV&>PoLDR)UP&(^i6v-qTVm z!A2?xZ5XeczFdC8cxreen43K^%}mA$*JdU|MbYdPMYAK)Ohi)dQSD|X5_eNuWpdy) zwhOBm)C$*C3~GhzDuBuzeHDXR;kwF!u5ziT@?S;e-*thGl>cggs&HKmP!+DL0jk1v zwM*%0fU0m^4NxJo+JRE}uSP;;G!Yxcr!s~UX{Y$^!j*1Vor$sNQfcMP8W6es(;uCX zdX(iYxJHF*3$D?HH7y{oLwYINbX|ojZM?3+l{Q{i;o5>!sBp#R>lwne1$9S-YYP&h z!nFm2RJgXNa3!KCPq?;t!nMT{u4_##5aGI(Yk?K6Ymp`uu4|Db6|QTMBo(e}kt7kW zYq?N($t+ccwMb9Aa9wABMYyhGU@KhL0a%4AZR;+=bsa!exUK`J4C$={s1vSuJxz}+ z9n)(yI3iqI8OI9OR^X^`Z3T|htXANtaBT&SG;-R>T^o5TH!Z3dttclIuC19JjtW;2 zHY!}#Gm&xTmcE{eyaQQ6Re8N5vfd-I-Vs^vh)^c4XCiTJe1k7sH!!FjG~WQwyx?5} zx&fdfTsL^28vrW8b%O`G0ieE&Fs}gST`-(>N#P@n>5Vrj-N>L5@QG5o(SdICKsP$j zjUMR6%Ytq)xhvXb6Jt&U3fss{0KJf?HlUjTD&l1mgWB8KCV+}~*#uA(FPi|W;$;)c zI#avY7hrET1Vp=RW&$6DXn9mYHgl>!4x?ZFVR)NcPrexut4i6-H;UIll13;uqY`yj zDO(JPsFW=X@(HdWj4hnV8k5K^NTl3=ws?u$qAwWQ;$`g?kcn3M{gDR z9z?H-d=H{mMZSk2tRmlobcyobgLJ7P-$P!@evvt9yeIP(;TFy9HDqK-%3hDmUM6D| z`CcYN8M&8<*e-0ZBeK^J!RS8az+U7)*XJf=nBgrRW{7I<3cZD7Y&u>+Kdb@aYH4SL;6sx_))YeD!y@s*4@}A_K(kYezR{3v9y<$Ale;3Hy@6 zWI(~bxZo=eGfO(2GH)|D>RtRSC*fF3*l~o}XElZea^8uUu&*U7`qR6^vSRxRPdWW0 zKUs3eDeo$I&%)`LurprRpYby*sZRe?o&;z^7_}E!VbsQT z$QrCRu0z&fwYfUfhB~AMtIgG+Hm@?baTTIE*M|NLa{y03IZy}J7F(IAt`HGfVYH8l zScA2X8?H52`?%p+gSAguRutT0<^c9_<0agE+^^nZVE4ts?l-Wq!f3w-yPsjLmD-$v0O0<~>Qy{ry7#6;$pd%__mQfIp7LypKHPQ9IWJVZpI8B>G4Pj+9W zK@guC2wC^>IYZb%q0bq@uABVaL458(e9jQpO$*`{f=~sZZfH2^+|&%Vqb$@6wxcX`7NZ^I zp=Pih#i3@f9r3CeZ1>DydxjUpOCH)iGuZB#LF#6o$026$Fw#_+C@`gY7-_;LlI|0E zvOXpehdH~4;}cb(!$^|&rNdmc`XQX!&|$h8zKGGN?z;8}P9b11gGT`TG7l3_;T!?* zE3hCE`4MEMn870e9pcul9|5SC!6P2%5#-^kSX(a-{X{jZo4c%QUR!c~?CL$tp8DB9GyWZd{ zCSq5~(~j;!gm!dSBDA5qn`5!%pQ#3*g(uB+r}L-&|f@^m{SBC_=3C=;1yiux!M znU7CYxJN-m0FQ!5rOW@Lj>u7u$Wain=MxdEl7E!%8nmN3Exoe;WPFJ3!9+yHy^k@G zv>|egiF|5^(1z|3@i8G1Evd!+M_Lxg9P%;F0=r87SS&Ez=m}W-<8cQ5%m5!}VEdfF zaR+?d<$&GDy)x>&Km5)glR}`##0#F_$m&gGCpa>C`4eU52^ZN3iY$8UzVN1pBv~hz z^{;Ru-DFS1vL@LtaGc9J8qix5vDBB`+_5s}u|ldhuBF6mlaCtZy_ z$qBd15>F!GF-?c$6s26O+9@Vt$Lmiq5j$Rg3PhwSoMIxCxQep=lp{jBrV9~jxu-xx z_lKpO(<@z%g;n&{n2>fO0^jA~)6*cJ&l8*m0i7&44FWRWa2f=3vg9-f$auqP5YX|4 z(;%SZ4W~iCjW?w5PHy`~ZW4+_KrG)G5YQcJ&wv1Ss5O=B3<$izV+3bF;Gf;|1ZP0N zhEonuM@>0!1_X5f*)t$u_n%Fb@^y`q$x3K<$n8Pj?jq9?E|L^qe6izVVz#=o}NWUh149 zbdCvGFLlllI_C&M3to*K61saSAN;%l7gu?n!L0~C&)`;spLgKr0j?tayaPY)z>#|? zY|UV^<2=g6uEerQE-|>3?Uxwb%JxeDmyQgZUl6#}?Ux+*B@g`4Zv^i!;9^ob0Iu@A z1K=v(J8a4m9Z2}Fl)K+{09;sgIB;rS9RL^o-hrafMb#ZBith5A93=H2VqQ8y*gVzB8an4~(SkeoV*Dq#yVe+cQ?3l0|KTMv}=-~%4 z8JeO{G7=$a)2?AXW5V*iuz?(3ffpu;D-52b2>oGkXFJdybdM#}i!epod7;qZr7>$(rB3sg3P5=&4?$Tgy-|ph zbfPQ_GAGKg%>>RYLlvah!XR^=EDSQOQ5a-eqcF&{Mq!X?jlxur>5al5(;J0B=4NMM zkh$4e7-VjC7GfQaZgxhMi;S*Vqa>1~Yu}SdlFpMQ1MdlR+^{ny%92QvOq3;&9$ny- zM0(=q$*2Ysuvnuk2DbBLSpe2~vMl5!Tcg_&Spe0EvMhj#H_8I2PLyQ<)UJIWNUef! z#1v&S&W}x3kj*%cn64n(;$UBnOqgs3lkLG|XTYSWp%IK&o*ag;PoU>8jC}$<$HC-y zFgXq;$H7p~m%}hrjdD;ObhEP@)CPSW+g}|D@&;1FCK6(IdN2w51bPo9K{}Tr?cqrD z@JRG(?@!AIOao%3PNN)C zF|qGY!xXk5Af}~&3A|(o6fgn%DzgF*Xk?%QCSdQ-1&%-g6R_zlU;=TkGAlHgH_J|v zg$!!P1_}YHV*`Z%l{;`DK-J(B0#r0fAwX3m6#`U5QXx{TV*`a;Kf8|b6{QRlF*rp` z#EuOVF%dg9P~?adc|?jFks^;skt0$BB04ru0G+WP(2W%Q_Mu{3`{YIsL?3~ z5ivT&AfiU67(~SA6oZHwonjDCqf-nr&gcZmD0(z3(_nIn`cbBsu!mmw#*&PVwkiUbK|xLB5Q2DcunoWZS!DtF-J09OxH?!e0fI48}H zat0^1<(wNg0g4=D`M2fZtYTEfJ?X7m%(jc+?U%TFURQXf%pB5;Qb7^xRibXSG&{? z;A)rpxs>+;9{5hp(xZY^+Qqkc4=#3K;m#=BC#fj20s}N z7}0$A#%S@A=%OBkYeMr&JcxfmKyPxW%RQ8M9AohEQ-ph5IsPod#=y7o?}ri(@$a8N zu2J|;`3=ZLc(Rn9G%dno6rb_$HJJCI&tLEaMG9)b)n?dv+gTmtI>F2}y)3wis4<@T#4lAl&3*A*m#0l5^q0U^-?!^1xsK%e%T?`b}brm|?R>Ay`F-Sufggd!jko;BA&|l)$ob;(*hBpK$io6-8Z^p42$FFg$!O?r?M9Gh^^bzAX!2aatxw&U1|V-Jp9ICkUMi-XQ7&Q!%s%CKTFp(Pg zX)=}f1+E~In@ImjWAcYtL0j}{Q}TP){R|;!p4jao!At@u;mi**hA(GMS3jG$l)-lGVxn zRn18JSJBYsWGaV-klqQ1?t@Xqzl2#)YZV&Y->yo|N>{8-{#)3if8q`d77a+RSd+Xf qh=x3c+P^kgkS '09' AND is_delete = '0'").uniqueResult(0); JSONObject update_jo = new JSONObject(); - update_jo.put("status", "01"); + update_jo.put("status", "00"); update_jo.put("productin_qty", 0); rawTab.update(update_jo, "container_name ='" + jsonTask.getString("material_code") + "' AND status <> '09' AND is_delete = '0'"); } @@ -133,259 +133,93 @@ public class CallEmpReelTask extends AbstractAcsTask { String point_code2 = jsonTask.getString("point_code2"); String point_code3 = jsonTask.getString("point_code3"); String point_code4 = jsonTask.getString("point_code4"); - JSONObject jsonRaw = rawTab.query("container_name ='" + jsonTask.getString("material_code") + "' AND status <> '09' AND is_delete = '0'").uniqueResult(0); if (ObjectUtil.isEmpty(jsonRaw)) { throw new BadRequestException("未找到满足条件的生箔工单:" + jsonTask.getString("material_code")); } - // 判断是两个点位的任务还是四个点位的任务 - if (ObjectUtil.isEmpty(point_code3)) { - // 判断是取满 or 取空 :取满起点是生箔区域、取空起点是冷却区域 - JSONObject jsonSbIvt = sbTab.query("point_code = '" + point_code1.substring(0, point_code1.length() - 2) + "'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(jsonSbIvt)) { - // 取满 - JSONObject jsonCoolIvt = ivtTab.query("full_point_code = '" + point_code2 + "'").uniqueResult(0); - // 更新库存状态 - jsonCoolIvt.put("full_point_status", "02"); - jsonCoolIvt.put("instorage_time", DateUtil.now()); - jsonCoolIvt.put("container_name", jsonRaw.getString("container_name")); - jsonCoolIvt.put("workorder_id", jsonRaw.getString("workorder_id")); - jsonCoolIvt.put("ivt_qty", jsonRaw.getString("productin_qty")); - ivtTab.update(jsonCoolIvt); - - //更新母卷工单状态 - HashMap map = new HashMap<>(); - map.put("status", "09"); - map.put("realend_time", DateUtil.now()); - map.put("update_optid", currentUserId + ""); - map.put("update_optname", currentUsername); - map.put("finish_type", "01"); - map.put("update_time", DateUtil.now()); - WQLObject.getWQLObject("PDM_BI_RawFoilWorkOrder").update(map, "container_name = '" + jsonTask.getString("material_code") + "'"); - // hint: 判断是不是010105 - if ("010105".equals(jsonTask.getString("task_type"))) { - // 生成放空任务 - JSONObject map2 = new JSONObject(); - map2.put("flag", "102"); - map2.put("product_area", jsonTask.getString("product_area")); - map2.put("point_location", jsonTask.getString("point_location")); - map2.put("point_type", "1"); - JSONObject jsonIvt = WQL.getWO("PDA_RAWFOIL_01").addParamMap(map2).process().uniqueResult(0); - JSONObject nextTaskParam = new JSONObject(); - nextTaskParam.put("car_no", TaskUtils.getParam("A2_USE_CAR")); - nextTaskParam.put("point_code1", jsonIvt.getString("empty_point_code")); - nextTaskParam.put("point_code2", point_code1.replace("M", "K")); - nextTaskParam.put("task_type", "010105"); - nextTaskParam.put("material_code", jsonTask.getString("container_name")); - nextTaskParam.put("product_area", jsonTask.getString("product_area")); - this.createTask(nextTaskParam); - } - } else { - // 取空 - JSONObject jsonCoolIvt = ivtTab.query("empty_point_code = '" + point_code1 + "'").uniqueResult(0); - jsonCoolIvt.put("empty_point_status", "01"); - jsonCoolIvt.put("empty_vehicle_code", ""); - ivtTab.update(jsonCoolIvt); - } - - } else { - // 取满放空 - // 校验起点是否存在 - JSONObject jsonIvt = ivtTab.query("empty_point_code ='" + point_code1 + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(jsonIvt)) { - throw new BadRequestException("未找到可用点位:" + point_code1); - } - - // 更新冷却库存状态 - jsonIvt.put("empty_point_status", "01"); - jsonIvt.put("empty_vehicle_code", ""); - ivtTab.update(jsonIvt); - - //判断任务类型,如果为二期B1生箔AGV任务则更新点位表库存 - if (jsonTask.getString("task_type").equals("010104")) { - // 校验终点是否存在 - JSONObject jsonIvt2 = point_tab.query("point_code ='" + point_code4 + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(jsonIvt2)) { - throw new BadRequestException("终点未找到可用点位:" + point_code2); - } - - //创建桁架任务将子卷搬运到桁架下的半成品缓存位 - //查询当前点位为空且没有任务的桁架内缓存点 - JSONObject cache_param = new JSONObject(); - cache_param.put("flag", "4"); - cache_param.put("point_location", jsonIvt.getString("point_location")); - cache_param.put("product_area", jsonIvt.getString("product_area")); - JSONObject cache_jo = WQL.getWO("PDA_COOLIN").addParamMap(cache_param).process().uniqueResult(0); - if (ObjectUtil.isEmpty(cache_jo) || ObjectUtil.isEmpty(cache_jo.getString("point_code"))) { - // B1才创建半条任务 - if ("B1".equals(jsonTask.getString("product_area"))) { - // 创建半条任务 - JSONObject jo = new JSONObject(); - jo.put("task_id", IdUtil.getSnowflake(1, 1).nextId()); - jo.put("task_code", IdUtil.getSnowflake(1, 1).nextId()); - jo.put("task_type", "010206"); - jo.put("task_status", TaskStatusEnum.SURE_START.getCode()); - jo.put("point_code1", point_code4); - jo.put("point_code2", ""); - jo.put("material_code", jsonTask.getString("material_code")); - jo.put("product_area", jsonTask.getString("product_area")); - jo.put("handle_class", InHotTask.class.getName()); - jo.put("remark", cache_param); - jo.put("type", "3"); - jo.put("priority", "1"); - jo.put("sort_seq", "1"); - jo.put("create_time", DateUtil.now()); - jo.put("acs_task_type", "6"); - taskTab.insert(jo); - } else { - throw new BadRequestException("找不到对应的半成品缓存位"); - } - - } else { - JSONObject param = new JSONObject(); - param.put("point_code1", point_code4); - param.put("point_code2", cache_jo.getString("point_code")); - param.put("material_code", jsonTask.getString("material_code")); - param.put("product_area", jsonTask.getString("product_area")); - param.put("type", "3"); - InHotTask inHotTask = SpringContextHolder.getBean(InHotTask.class); - inHotTask.createTask(param); - } - // 更新点位库存状态 - jsonIvt2.put("point_status", "2"); - jsonIvt2.put("material_code", jsonTask.getString("material_code")); - point_tab.update(jsonIvt2); - } else if (jsonTask.getString("task_type").equals("010106")) { - // B2生箔 - BakingServiceImpl bean = SpringContextHolder.getBean(BakingServiceImpl.class); - WQLObject materTab = WQLObject.getWQLObject("md_me_materialbase"); // 物料表 - JSONObject requestParam = jsonTask.getJSONObject("request_param"); - String temperature = requestParam.getString("temperature"); - String hours = requestParam.getString("hours"); - // 校验终点是否存在 - JSONObject jsonIvt2 = point_tab.query("point_code ='" + point_code4 + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(jsonIvt2)) { - throw new BadRequestException("终点未找到可用点位:" + point_code4); - } - // 更新工单状态为完成 - //更新母卷工单状态 - HashMap map = new HashMap<>(); - map.put("status", "09"); - map.put("realend_time", DateUtil.now()); - map.put("update_optid", currentUserId + ""); - map.put("update_optname", currentUsername); - map.put("finish_type", "01"); - map.put("update_time", DateUtil.now()); - WQLObject.getWQLObject("PDM_BI_RawFoilWorkOrder").update(map, "container_name = '" + jsonTask.getString("material_code") + "'"); - // 更新点位存状态 - JSONObject point_param = new JSONObject(); - point_param.put("point_status", "2"); - point_param.put("update_time", DateUtil.now()); - point_param.put("material_code", jsonRaw.getString("container_name")); - point_tab.update(point_param, "point_code ='" + point_code4 + "'"); - // 更新冷却库存状态 - JSONObject cache_param = new JSONObject(); - cache_param.put("full_point_status", "01"); - cache_param.put("cool_ivt_status", "01"); - cache_param.put("empty_point_status", "01"); - ivtTab.update(cache_param, "empty_point_code ='" + point_code1 + "'"); - // 创建桁架任务,入烘箱。 - JSONObject hotPoint = bean.getJsonObject(jsonIvt2.getString("product_area"), jsonIvt2, temperature); - String container_name = jsonTask.getString("material_code"); - //优化 - if (ObjectUtil.isNotEmpty(hotPoint)) { - // 创建暂存位 --> 烘烤区任务 - JSONObject param = new JSONObject(); - param.put("type", "2"); - param.put("point_code1", point_code4); - param.put("point_code2", hotPoint.getString("point_code")); - param.put("material_code", container_name); - param.put("product_area", hotPoint.getString("product_area")); - param.put("request_param", NumberUtil.mul(Double.parseDouble(hours), 60)); - - InHotTask inHotTask = new InHotTask(); - String taskId = inHotTask.createTask(param); - // 3.插入主表 - JSONObject jsonRawHot = rawTab.query("container_name = '" + container_name + "' and is_delete = '0'").uniqueResult(0); - JSONObject jsonMater = materTab.query("material_code = '" + jsonRawHot.getString("product_name") + "'").uniqueResult(0); - - JSONObject hotParam = new JSONObject(); - hotParam.put("container_name", container_name); - hotParam.put("workorder_id", jsonRawHot.getString("workorder_id")); - hotParam.put("material_id", jsonMater.getString("material_id")); - hotParam.put("qty", jsonRawHot.get("productin_qty")); - hotParam.put("io_type", "0"); - hotParam.put("qty_unit_id", jsonMater.getString("base_unit_id")); - hotParam.put("task_id", taskId); - hotParam.put("start_point_code", point_code1); - hotParam.put("end_point_code", hotPoint.getString("point_code")); - hotParam.put("temperature", temperature); - hotParam.put("oven_time", hours); - bean.createHotIoMst(hotParam); - } - } else { - // 校验终点是否存在 - JSONObject jsonIvt2 = ivtTab.query("full_point_code ='" + point_code4 + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(jsonIvt2)) { - throw new BadRequestException("终点未找到可用点位:" + jsonIvt2); - } - - // 更新工单状态为完成 - //更新母卷工单状态 - HashMap map = new HashMap<>(); - map.put("status", "09"); - map.put("realend_time", DateUtil.now()); - map.put("update_optid", currentUserId + ""); - map.put("update_optname", currentUsername); - map.put("finish_type", "01"); - map.put("update_time", DateUtil.now()); - WQLObject.getWQLObject("PDM_BI_RawFoilWorkOrder").update(map, "container_name = '" + jsonTask.getString("material_code") + "'"); - - // 更新冷却库存状态 - JSONObject cache_param = new JSONObject(); - cache_param.put("full_point_status", "02"); - cache_param.put("instorage_time", DateUtil.now()); - cache_param.put("container_name", jsonRaw.getString("container_name")); - cache_param.put("workorder_id", jsonRaw.getString("workorder_id")); - cache_param.put("ivt_qty", jsonRaw.getString("productin_qty")); - cache_param.put("cool_ivt_status", "01"); - ivtTab.update(cache_param, "full_point_code ='" + point_code4 + "'"); - - /*// 插入入库单 - JSONObject jsonMater = WQLObject.getWQLObject("md_me_materialbase").query("material_code = '" + jsonRaw.getString("product_name") + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(jsonMater)) { - throw new BadRequestException("产品不存在"); - } - - JSONObject jsonRegion = new JSONObject(); - jsonRegion.put("iostorinv_id", IdUtil.getSnowflake(1, 1).nextId()); - jsonRegion.put("bill_code", CodeUtil.getNewCode("COOLREGION_BILL_CODE")); - jsonRegion.put("io_type", "0"); - jsonRegion.put("material_id", jsonMater.getString("material_id")); - jsonRegion.put("pcsn", jsonRaw.getString("container_name")); - jsonRegion.put("vehicle_code", ""); - jsonRegion.put("qty", jsonRaw.getString("productin_qty")); - jsonRegion.put("qty_unit_id", jsonMater.get("base_unit_id")); - jsonRegion.put("bill_status", "50"); - jsonRegion.put("start_point_code", point_code2); - jsonRegion.put("end_point_code", point_code4); - jsonRegion.put("cust_id", ""); - jsonRegion.put("create_mode", "03"); - jsonRegion.put("task_id", task_id); - jsonRegion.put("create_id", currentUserId); - jsonRegion.put("create_name", currentUsername); - jsonRegion.put("create_time", DateUtil.now()); - jsonRegion.put("update_optid", currentUserId); - jsonRegion.put("update_optname", currentUsername); - jsonRegion.put("update_time", DateUtil.now()); - jsonRegion.put("confirm_optid", currentUserId); - jsonRegion.put("confirm_optname", currentUsername); - jsonRegion.put("confirm_time", DateUtil.now()); - coolTab.insert(jsonRegion);*/ - } + String containerName = jsonRaw.getString("container_name"); + String workorderId = jsonRaw.getString("workorder_id"); + String productinQty = jsonRaw.getString("productin_qty"); + // 取空取满放空放满 + if ("010101".equals(jsonTask.getString("task_type"))) { + //更新生箔机点位库存 + updateSbIvt(sbTab, point_code3, "01","02"); + //更新冷却区点位库存 + updateIvtIvt(ivtTab, point_code4, "02", "01", DateUtil.now(), containerName, workorderId, productinQty); } + //取满放满 + if ("010102".equals(jsonTask.getString("task_type"))) { + //更新生箔机点位库存 + updateSbIvt(sbTab, point_code1, "01",null); + //更新冷却区点位库存 + updateIvtIvt(ivtTab, point_code2, "02", null, DateUtil.now(), containerName, workorderId, productinQty); + } + //起点是冷却区 取空放空 + if ("010103".equals(jsonTask.getString("task_type"))) { + //更新生箔机点位库存 + updateSbIvt(sbTab, point_code1, null,"02"); + //更新冷却区点位库存 + updateIvtIvt(ivtTab, point_code2, null, "01", DateUtil.now(), null, null, null); + } + //起点是生箔机 取空放空 + if ("010104".equals(jsonTask.getString("task_type"))) { + //更新生箔机点位库存 + updateSbIvt(sbTab, point_code1, null,"01"); + //更新冷却区点位库存 + updateIvtIvt(ivtTab, point_code2, null, "02", DateUtil.now(), null, null, null); + } + //更新母卷工单状态 + HashMap map = new HashMap<>(); + map.put("status", "40"); + map.put("origin", "1"); + map.put("roll_status", "0"); + map.put("realend_time", DateUtil.now()); + map.put("update_optid", currentUserId + ""); + map.put("update_optname", currentUsername); + map.put("finish_type", "01"); + map.put("update_time", DateUtil.now()); + WQLObject.getWQLObject("PDM_BI_RawFoilWorkOrder").update(map, "container_name = '" + jsonTask.getString("material_code") + "'"); + } +} + + private void updateSbIvt(WQLObject sbTab, String fullPointCode, + String fullStatus, String emptyStatus) { + JSONObject jsonSbIvt; + if (fullPointCode.endsWith("M")) { + jsonSbIvt = sbTab.query("full_point_code = '" + fullPointCode + "'").uniqueResult(0); + } else { + jsonSbIvt = sbTab.query("empty_point_code = '" + fullPointCode + "'").uniqueResult(0); } + if (ObjectUtil.isEmpty(jsonSbIvt)) { + throw new BadRequestException("未找到对应的点位: " + fullPointCode); + } + if (fullStatus != null) jsonSbIvt.put("full_point_status", fullStatus); + if (emptyStatus != null) jsonSbIvt.put("empty_point_status", emptyStatus); + sbTab.update(jsonSbIvt); + } + + + private void updateIvtIvt(WQLObject ivtTab, String fullPointCode, + String fullStatus, String emptyStatus, + String instorageTime, String containerName, + String workorderId, String ivtQty) { + JSONObject jsonCoolIvt; + if (fullPointCode.endsWith("M")) { + jsonCoolIvt = ivtTab.query("full_point_code = '" + fullPointCode + "'").uniqueResult(0); + } else { + jsonCoolIvt = ivtTab.query("empty_point_code = '" + fullPointCode + "'").uniqueResult(0); + } + if (ObjectUtil.isEmpty(jsonCoolIvt)) { + throw new BadRequestException("未找到对应的点位: " + fullPointCode); + } + if (fullStatus != null) jsonCoolIvt.put("full_point_status", fullStatus); + if (emptyStatus != null) jsonCoolIvt.put("empty_point_status", emptyStatus); + if (instorageTime != null) jsonCoolIvt.put("instorage_time", instorageTime); + if (containerName != null) jsonCoolIvt.put("container_name", containerName); + if (workorderId != null) jsonCoolIvt.put("workorder_id", workorderId); + if (ivtQty != null) jsonCoolIvt.put("ivt_qty", ivtQty); + ivtTab.update(jsonCoolIvt); } @Override @@ -449,7 +283,7 @@ public class CallEmpReelTask extends AbstractAcsTask { } else { json.put("priority", priority_jo.getString("value")); } - if ("010101".equals(form.getString("task_type")) || "010106".equals(form.getString("task_type")) || "010104".equals(form.getString("task_type"))) { + if ("010101".equals(form.getString("task_type"))) { json.put("acs_task_type", "1"); } else { json.put("acs_task_type", "3"); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/InCoolIvtTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/InCoolIvtTask.java index 9ad2517..9d4828f 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/InCoolIvtTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/InCoolIvtTask.java @@ -72,6 +72,7 @@ public class InCoolIvtTask extends AbstractAcsTask { WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); // 点位表 WQLObject ivtTab = WQLObject.getWQLObject("ST_IVT_CoolPointIvt"); // 冷却区库存表 WQLObject coolTab = WQLObject.getWQLObject("ST_IVT_CoolRegionIO"); // 冷却区出入表 + WQLObject pdm_bi_rawfoilworkorder = WQLObject.getWQLObject("pdm_bi_rawfoilworkorder"); String task_id = taskObj.getString("task_id"); JSONObject jsonTask = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0); @@ -113,31 +114,21 @@ public class InCoolIvtTask extends AbstractAcsTask { } // 校验终点是否存在 JSONObject jsonIvt = ivtTab.query("full_point_code ='" + point_code2 + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(jsonIvt)) { - // 判断是不是暂存位 - JSONObject zzPoint = pointTab.query("point_code ='" + point_code2 + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(zzPoint)) { - throw new BadRequestException("终点未找到可用点位:" + point_code2); - } - zzPoint.put("material_code", jsonTask.getString("material_code")); - // 有料 - zzPoint.put("point_status", "2"); - zzPoint.put("update_optid", SecurityUtils.getCurrentUserId()); - zzPoint.put("update_optname", SecurityUtils.getCurrentNickName()); - zzPoint.put("update_time", DateUtil.now()); - pointTab.update(zzPoint); - } else { - // 更新冷却库存状态 - JSONObject raw_jo = WQLObject.getWQLObject("pdm_bi_rawfoilworkorder").query("container_name = '" + jsonTask.getString("material_code") + "'").uniqueResult(0); - jsonIvt.put("full_point_status", "02"); - jsonIvt.put("cool_ivt_status", "04"); - jsonIvt.put("instorage_time", DateUtil.now()); - jsonIvt.put("container_name", raw_jo.getString("container_name")); - jsonIvt.put("workorder_id", raw_jo.getString("workorder_id")); - jsonIvt.put("ivt_qty", raw_jo.getString("qty")); - ivtTab.update(jsonIvt); - } + //更新生箔工单母卷信息 + JSONObject raw_jo = pdm_bi_rawfoilworkorder.query("container_name = '" + jsonTask.getString("material_code") + "'").uniqueResult(0); + raw_jo.put("origin", "2"); + raw_jo.put("roll_status", "1"); + pdm_bi_rawfoilworkorder.update(raw_jo); + + // 更新冷却库存状态 + jsonIvt.put("full_point_status", "02"); + jsonIvt.put("cool_ivt_status", "04"); + jsonIvt.put("instorage_time", DateUtil.now()); + jsonIvt.put("container_name", raw_jo.getString("container_name")); + jsonIvt.put("workorder_id", raw_jo.getString("workorder_id")); + jsonIvt.put("ivt_qty", raw_jo.getString("qty")); + ivtTab.update(jsonIvt); // 更新暂存位状态为空位 JSONObject jsonPoint = pointTab.query("point_code = '" + point_code1 + "'").uniqueResult(0); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/InHotTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/InHotTask.java index bdfc1db..233f454 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/InHotTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/InHotTask.java @@ -119,53 +119,26 @@ public class InHotTask extends AbstractAcsTask { String hot_point_code = ""; // 判断此任务是否有三个点位 if (ObjectUtil.isEmpty(jsonTask.getString("point_code3"))) { - - if (jsonTask.getString("task_type").equals("010204")) { - //更新冷却区库存 - JSONObject cool_jo = coolIvtTab.query("point_code = '" + jsonTask.getString("point_code2") + "'").uniqueResult(0); - cool_jo.put("full_point_status", "02"); - cool_jo.put("cool_ict_status", "01"); - cool_jo.put("container_name", jsonTask.getString("material_code")); - coolIvtTab.update(cool_jo); - //更新对接位库存 - JSONObject dj_jo = pointTab.query("point_code = '" + jsonTask.getString("point_code1") + "'").uniqueResult(0); - dj_jo.put("point_status", "1"); - dj_jo.put("material_code", ""); - pointTab.update(dj_jo); - return; - } else { - /* - * 暂存区入烘箱任务 - */ - // 更新烘箱区库存状态 - JSONObject jsonHotIvt = hotIvtTab.query("point_code = '" + jsonTask.getString("point_code2") + "'").uniqueResult(0); - jsonHotIvt.put("point_status", "02"); - jsonHotIvt.put("container_name", jsonHotMst.getString("container_name")); - jsonHotIvt.put("workorder_id", jsonHotMst.getString("workorder_id")); - jsonHotIvt.put("ivt_qty", jsonHotMst.getString("qty")); - jsonHotIvt.put("instorage_time", DateUtil.now()); - jsonHotIvt.put("update_optid", currentUserId); - jsonHotIvt.put("update_optname", currentUsername); - jsonHotIvt.put("update_time", DateUtil.now()); - hotIvtTab.update(jsonHotIvt); - - String product_area = jsonHotIvt.getString("product_area"); - if (product_area.equals("B1")) { - JSONObject jsonPoint = coolIvtTab.query("point_code = '" + jsonTask.getString("point_code1") + "'").uniqueResult(0); - jsonPoint.put("container_name", ""); - jsonPoint.put("full_point_status", "01"); - coolIvtTab.update(jsonPoint); - } else { - // 更新暂存区点位状态为空位 - JSONObject jsonPoint = pointTab.query("point_code = '" + jsonTask.getString("point_code1") + "'").uniqueResult(0); - jsonPoint.put("point_status", "1"); - jsonPoint.put("material_code", ""); - pointTab.update(jsonPoint); - } - - - hot_point_code = jsonHotIvt.getString("ext_code"); - } + /* + * 暂存区入烘箱任务 + */ + // 更新烘箱区库存状态 + JSONObject jsonHotIvt = hotIvtTab.query("point_code = '" + jsonTask.getString("point_code2") + "'").uniqueResult(0); + jsonHotIvt.put("point_status", "02"); + jsonHotIvt.put("container_name", jsonHotMst.getString("container_name")); + jsonHotIvt.put("workorder_id", jsonHotMst.getString("workorder_id")); + jsonHotIvt.put("ivt_qty", jsonHotMst.getString("qty")); + jsonHotIvt.put("instorage_time", DateUtil.now()); + jsonHotIvt.put("update_optid", currentUserId); + jsonHotIvt.put("update_optname", currentUsername); + jsonHotIvt.put("update_time", DateUtil.now()); + hotIvtTab.update(jsonHotIvt); + // 更新暂存区点位状态为空位 + JSONObject jsonPoint = pointTab.query("point_code = '" + jsonTask.getString("point_code1") + "'").uniqueResult(0); + jsonPoint.put("point_status", "1"); + jsonPoint.put("material_code", ""); + pointTab.update(jsonPoint); + hot_point_code = jsonHotIvt.getString("ext_code"); } else { /* @@ -352,39 +325,6 @@ public class InHotTask extends AbstractAcsTask { tab.insert(json); task_id = json.getString("task_id"); } - - if (StrUtil.equals(form.getString("type"), "3")) { - { - String point_code1 = form.getString("point_code1"); - String point_code2 = form.getString("point_code2"); - - if (cutConveyorTask.isSingleTask(point_code1)) { - throw new BadRequestException("点位:" + point_code1 + "存在未完成的任务!"); - } - if (cutConveyorTask.isSingleTask(point_code2)) { - throw new BadRequestException("点位:" + point_code2 + "存在未完成的任务!"); - } - - JSONObject json = new JSONObject(); - json.put("task_id", IdUtil.getSnowflake(1, 1).nextId()); - json.put("task_code", IdUtil.getSnowflake(1, 1).nextId()); - json.put("task_type", "010204"); - json.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); - json.put("point_code1", form.getString("point_code1")); - json.put("point_code2", form.getString("point_code2")); - json.put("material_code", form.getString("material_code")); - json.put("product_area", form.getString("product_area")); - json.put("sort_seq", "1"); - json.put("handle_class", THIS_CLASS); - json.put("create_id", currentUserId); - json.put("create_name", currentUsername); - json.put("create_time", DateUtil.now()); - json.put("priority", "1"); - json.put("acs_task_type", "6"); - tab.insert(json); - task_id = json.getString("task_id"); - } - } immediateNotifyAcs(task_id); return task_id; } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/OutHotTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/OutHotTask.java index d787724..0e979b2 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/OutHotTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/OutHotTask.java @@ -102,120 +102,57 @@ public class OutHotTask extends AbstractAcsTask { jsonTask.put("update_time", DateUtil.now()); taskTab.update(jsonTask); - if (jsonTask.getString("task_type").equals("010205")) { - JSONObject cut_jo = WQLObject.getWQLObject("st_ivt_cutpointivt").query("full_point_code = '" + jsonTask.getString("point_code3") + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(cut_jo)) { - cut_jo = WQLObject.getWQLObject("st_ivt_coolpointivt").query("full_point_code = '" + jsonTask.getString("point_code3") + "'").uniqueResult(0); - } - //清空起点库存 - JSONObject cool_jo = WQLObject.getWQLObject("st_ivt_coolpointivt").query("point_code = '" + jsonTask.getString("point_code1") + "'").uniqueResult(0); - cool_jo.put("container_name", ""); - cool_jo.put("full_point_status", "01"); - WQLObject.getWQLObject("st_ivt_coolpointivt").update(cool_jo); + JSONObject jsonHotIvt = hotIvtTab.query("point_code = '" + jsonTask.getString("point_code1") + "'").uniqueResult(0); - //更新终点库存 - JSONObject jsonPoint2 = pointTab.query("point_code = '" + jsonTask.getString("point_code2") + "'").uniqueResult(0); - jsonPoint2.put("point_status", "2"); - jsonPoint2.put("material_code", jsonTask.getString("material_code")); - pointTab.update(jsonPoint2); + // 更新主表: 什么时候更新主表 + JSONObject jsonHotMst = hotMstTab.query("task_id = '" + task_id + "'").uniqueResult(0); - //创建AGV任务 - JSONObject jo = new JSONObject(); - if (StrUtil.equals("01", cut_jo.getString("empty_point_status"))) { - jo.put("point_code1", jsonTask.getString("point_code2")); - jo.put("point_code2", cut_jo.getString("full_point_code")); - jo.put("material_code", jsonTask.getString("material_code")); - jo.put("product_area", cut_jo.getString("product_area")); - jo.put("task_type", "010302"); - } else { - jo.put("point_code1", jsonTask.getString("point_code2")); - jo.put("point_code2", cut_jo.getString("full_point_code")); - jo.put("point_code3", cut_jo.getString("empty_point_code")); - // 2.找冷却区空货位 - JSONObject map = new JSONObject(); - map.put("flag", "2"); - map.put("product_area", cut_jo.getString("product_area")); - map.put("point_location", "0"); - - JSONObject jsonCooIvt = WQL.getWO("PDA_OVENINANDOUT_01").addParamMap(map).process().uniqueResult(0); - // 如果为空 - if (ObjectUtil.isEmpty(jsonCooIvt)) { - map.put("point_location", "1"); - jsonCooIvt = WQL.getWO("PDA_OVENINANDOUT_01").addParamMap(map).process().uniqueResult(0); - } - if (ObjectUtil.isEmpty(jsonCooIvt)) { - throw new BadRequestException("冷却区空位不足"); - } - jo.put("point_code4", jsonCooIvt.getString("empty_point_code")); - jo.put("material_code", jsonTask.getString("material_code")); - jo.put("product_area", cut_jo.getString("product_area")); - jo.put("task_type", "010301"); - } - AbstractAcsTask task = new CoolCutTask(); - task.createTask(jo); - } else { - JSONObject jsonHotIvt = hotIvtTab.query("point_code = '" + jsonTask.getString("point_code1") + "'").uniqueResult(0); - - // 更新主表: 什么时候更新主表 - JSONObject jsonHotMst = hotMstTab.query("task_id = '" + task_id + "'").uniqueResult(0); - - // 更新暂存区点位状态 - JSONObject jsonPoint2 = pointTab.query("point_code = '" + jsonTask.getString("point_code2") + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(jsonPoint2)) { - //查询冷却区点位 - jsonPoint2 = ivtTab.query("point_code = '" + jsonTask.getString("point_code2") + "'").uniqueResult(0); - jsonPoint2.put("full_point_status", "02"); - jsonPoint2.put("cool_ivt_status", "04"); - jsonPoint2.put("instorage_time", DateUtil.now()); - jsonPoint2.put("container_name", jsonHotIvt.getString("container_name")); - ivtTab.update(jsonPoint2); - } else { - jsonPoint2.put("point_status", "2"); - jsonPoint2.put("material_code", jsonHotIvt.getString("container_name")); - pointTab.update(jsonPoint2); - } + // 更新暂存区点位状态 + JSONObject jsonPoint2 = pointTab.query("point_code = '" + jsonTask.getString("point_code2") + "'").uniqueResult(0); + jsonPoint2.put("point_status", "2"); + jsonPoint2.put("material_code", jsonHotIvt.getString("container_name")); + pointTab.update(jsonPoint2); - // 更新烘箱区库存状态 - jsonHotIvt.put("point_status", "01"); - jsonHotIvt.put("container_name", ""); - jsonHotIvt.put("workorder_id", ""); - jsonHotIvt.put("ivt_qty", 0); - jsonHotIvt.put("instorage_time", ""); - jsonHotIvt.put("update_optid", currentUserId); - jsonHotIvt.put("update_optname", currentUsername); - jsonHotIvt.put("update_time", DateUtil.now()); + // 更新烘箱区库存状态 + jsonHotIvt.put("point_status", "01"); + jsonHotIvt.put("container_name", ""); + jsonHotIvt.put("workorder_id", ""); + jsonHotIvt.put("ivt_qty", 0); + jsonHotIvt.put("instorage_time", ""); + jsonHotIvt.put("update_optid", currentUserId); + jsonHotIvt.put("update_optname", currentUsername); + jsonHotIvt.put("update_time", DateUtil.now()); - log.info("出烘箱wql执行update语句!"); - hotIvtTab.update(jsonHotIvt); - JSONObject update_ivt = hotIvtTab.query("point_code = '" + jsonTask.getString("point_code1") + "'").uniqueResult(0); - log.info("更新完后烘箱库存为:-----------------" + update_ivt.toString()); + log.info("出烘箱wql执行update语句!"); + hotIvtTab.update(jsonHotIvt); + JSONObject update_ivt = hotIvtTab.query("point_code = '" + jsonTask.getString("point_code1") + "'").uniqueResult(0); + log.info("更新完后烘箱库存为:-----------------" + update_ivt.toString()); - log.info("出烘箱mybatis执行update语句!"); - HotMapper hotMapper = SpringContextHolder.getBean(HotMapper.class); - hotMapper.updateHotByObject(jsonHotIvt); - JSONObject update_ivt2 = hotIvtTab.query("point_code = '" + jsonTask.getString("point_code1") + "'").uniqueResult(0); - log.info("更新完后烘箱库存为:-----------------" + update_ivt2.toString()); + log.info("出烘箱mybatis执行update语句!"); + HotMapper hotMapper = SpringContextHolder.getBean(HotMapper.class); + hotMapper.updateHotByObject(jsonHotIvt); + JSONObject update_ivt2 = hotIvtTab.query("point_code = '" + jsonTask.getString("point_code1") + "'").uniqueResult(0); + log.info("更新完后烘箱库存为:-----------------" + update_ivt2.toString()); - if (!update_ivt2.getString("container_name").equals(update_ivt.getString("container_name"))) { - log.info("出烘箱WQL更新不成功!"); - } + if (!update_ivt2.getString("container_name").equals(update_ivt.getString("container_name"))) { + log.info("出烘箱WQL更新不成功!"); + } - // 将出烘箱信息发送给mes - JSONObject param = new JSONObject(); - param.put("iContainerName", jsonHotMst.getString("container_name")); - param.put("iResourceName", jsonHotIvt.getString("ext_code")); - param.put("iMoveOutDate", DateUtil.now()); - param.put("iabxActualBakingTemperature", jsonHotMst.getDoubleValue("temperature")); - param.put("iabxActualBakingTimer", jsonHotMst.getDoubleValue("oven_time")); + // 将出烘箱信息发送给mes + JSONObject param = new JSONObject(); + param.put("iContainerName", jsonHotMst.getString("container_name")); + param.put("iResourceName", jsonHotIvt.getString("ext_code")); + param.put("iMoveOutDate", DateUtil.now()); + param.put("iabxActualBakingTemperature", jsonHotMst.getDoubleValue("temperature")); + param.put("iabxActualBakingTimer", jsonHotMst.getDoubleValue("oven_time")); - //判断该接口是否需要回传 - JSONObject back_jo = WQLObject.getWQLObject("MD_PB_InterfaceBack").query("interface_name = 'momRollBakeOutBound'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(back_jo) && "1".equals(back_jo.getString("is_back"))) { - String product_area = back_jo.getString("product_area"); - if (StrUtil.isNotEmpty(product_area) && product_area.contains(jsonTask.getString("product_area"))) { - SpringContextHolder.getBean(LmsToMesService.class).momRollBakeOutBound(param); - } + //判断该接口是否需要回传 + JSONObject back_jo = WQLObject.getWQLObject("MD_PB_InterfaceBack").query("interface_name = 'momRollBakeOutBound'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(back_jo) && "1".equals(back_jo.getString("is_back"))) { + String product_area = back_jo.getString("product_area"); + if (StrUtil.isNotEmpty(product_area) && product_area.contains(jsonTask.getString("product_area"))) { + SpringContextHolder.getBean(LmsToMesService.class).momRollBakeOutBound(param); } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/util/ConvertUtil.java b/lms/nladmin-system/src/main/java/org/nl/wms/util/ConvertUtil.java new file mode 100644 index 0000000..5d4ab3c --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/util/ConvertUtil.java @@ -0,0 +1,34 @@ +package org.nl.wms.util; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.nl.common.base.PageInfo; + +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + +public class ConvertUtil { + + public static T convert(final S s, Class clz) { + return s == null ? null : BeanUtil.copyProperties(s, clz); + } + + public static List convertList(List s, Class clz) { + return s == null ? null : s.stream().map(vs -> BeanUtil.copyProperties(vs, clz)).collect(Collectors.toList()); + } + + public static Set convertSet(Set s, Class clz) { + return s == null ? null : s.stream().map(vs -> BeanUtil.copyProperties(vs, clz)).collect(Collectors.toSet()); + } + + public static PageInfo convertPage(IPage page, Class clz) { + if (page == null) { + return null; + } + PageInfo pageInfo = new PageInfo<>(); + pageInfo.setTotalElements(page.getTotal()); + pageInfo.setContent(convertList(page.getRecords(), clz)); + return pageInfo; + } +} diff --git a/lms/nladmin-ui/src/views/wms/pdm/ivt/cutpointivt/cutpointivt.js b/lms/nladmin-ui/src/views/wms/pdm/ivt/cutpointivt/cutpointivt.js index 81940f7..a171474 100644 --- a/lms/nladmin-ui/src/views/wms/pdm/ivt/cutpointivt/cutpointivt.js +++ b/lms/nladmin-ui/src/views/wms/pdm/ivt/cutpointivt/cutpointivt.js @@ -23,5 +23,11 @@ export function edit(data) { data }) } +export function getResources() { + return request({ + url: 'api/cutpointivt/getResources', + method: 'get' + }) +} -export default { add, edit, del } +export default { add, edit, del, getResources } diff --git a/lms/nladmin-ui/src/views/wms/pdm/ivt/sbpointivt/index.vue b/lms/nladmin-ui/src/views/wms/pdm/ivt/sbpointivt/index.vue index 4291611..ef2ba1e 100644 --- a/lms/nladmin-ui/src/views/wms/pdm/ivt/sbpointivt/index.vue +++ b/lms/nladmin-ui/src/views/wms/pdm/ivt/sbpointivt/index.vue @@ -67,10 +67,10 @@ - + - + - + @@ -123,6 +122,18 @@ + + + + + + + +