From e10092b8ebf6967567c4edf7a8b0a2858c1f6b7c Mon Sep 17 00:00:00 2001 From: liuxy Date: Thu, 2 Jul 2026 16:32:16 +0800 Subject: [PATCH] =?UTF-8?q?add=EF=BC=9A=E6=96=B0=E9=9C=80=E6=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../nl/ext/erp/service/WmsToErpService.java | 2 + .../erp/service/impl/WmsToErpServiceImpl.java | 62 +++ .../src/main/java/org/nl/ext/erp/wql/QERP.wql | 12 + .../st/in/rest/HandNewMaterialController.java | 17 + .../st/in/service/HandNewMaterialService.java | 17 + .../impl/HandNewMaterialServiceImpl.java | 440 ++++++++++++++++++ .../rest/PcsIfOtherIosInProcController.java | 105 +++++ .../service/PcsIfOtherIosInProcService.java | 96 ++++ .../service/dto/PcsIfOtherIosInProcDto.java | 113 +++++ .../pcs/service/dto/ReceivemstQueryDto.java | 1 + .../impl/PcsIfOtherIosInProcServiceImpl.java | 238 ++++++++++ .../service/impl/ReceivemstServiceImpl.java | 45 +- .../wms/pcs/wql/QPCS_IF_OTHERIOSINPROC01.wql | 117 +++++ .../nl/wms/pcs/wql/QPCS_RC_RECEIVEMST01.wql | 160 ++++++- .../nl/wms/pcs/wql/QPCS_RC_RECEIVEMST02.wql | 94 +++- .../src/main/java/org/nl/wms/pcs/wql/pcs.xls | Bin 239616 -> 264192 bytes .../impl/InspectionsheetmstServiceImpl.java | 51 +- .../wms/ql/wql/QL_TEST_INSPECTIONSHEET002.wql | 2 +- .../org/nl/wms/st/core/config/bussConfig.json | 5 + .../core/service/impl/InbillServiceImpl.java | 37 +- .../st/core/wql/QST_IVT_RAWASSISTISTOR.wql | 4 + mes/qd/src/api/wms/pcs/otherorderproc.js | 58 +++ .../wms/pcs/otherorderproc/importOrder.vue | 82 ++++ .../views/wms/pcs/otherorderproc/index.vue | 269 +++++++++++ .../wms/pcs/receivemst/AddShowDialog.vue | 4 +- .../wms/pcs/receivemst/DtlShowDialog.vue | 11 + mes/qd/src/views/wms/pcs/receivemst/index.vue | 23 +- 27 files changed, 2004 insertions(+), 61 deletions(-) create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/pcs/rest/PcsIfOtherIosInProcController.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/pcs/service/PcsIfOtherIosInProcService.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/pcs/service/dto/PcsIfOtherIosInProcDto.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/pcs/service/impl/PcsIfOtherIosInProcServiceImpl.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/pcs/wql/QPCS_IF_OTHERIOSINPROC01.wql create mode 100644 mes/qd/src/api/wms/pcs/otherorderproc.js create mode 100644 mes/qd/src/views/wms/pcs/otherorderproc/importOrder.vue create mode 100644 mes/qd/src/views/wms/pcs/otherorderproc/index.vue diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/ext/erp/service/WmsToErpService.java b/mes/hd/nladmin-system/src/main/java/org/nl/ext/erp/service/WmsToErpService.java index 0e247fd6..5f07351e 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/ext/erp/service/WmsToErpService.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/ext/erp/service/WmsToErpService.java @@ -9,5 +9,7 @@ public interface WmsToErpService { void getPurchaseInfo(Map map); + void getOtherIosInfo(Map map); + void getPurchaseInInfo(Map map); } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/ext/erp/service/impl/WmsToErpServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/ext/erp/service/impl/WmsToErpServiceImpl.java index c2ded9ca..f2f2bd57 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/ext/erp/service/impl/WmsToErpServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/ext/erp/service/impl/WmsToErpServiceImpl.java @@ -407,6 +407,68 @@ public class WmsToErpServiceImpl implements WmsToErpService { log.info("采购订单导入数据结束---------成功:" + ja.size() + "条"); } + @Override + @Transactional(rollbackFor = Exception.class) + public void getOtherIosInfo(Map map) { + WQLObject otherPorc = WQLObject.getWQLObject("pcs_if_otheriosinproc"); + + JSONArray ja = WQL.getWO("QERP").setDbname("dataSource1").addParam("flag", "33").process().getResultJSONArray(0); + log.info("其他采购订单导入数据---------:" + ja.toString()); + List list = new ArrayList<>(); + for (int i = 0; i < ja.size(); i++) { + // 过滤相同数据 + JSONObject jo2 = ja.getJSONObject(i); + // 订单编号 + String vbillcode = jo2.getString("vbillcode"); + // 物料id + String cmaterialoid = jo2.getString("cmaterialoid"); + // 批次 + String vbatchcode = jo2.getString("vbatchcode"); + // 行号 + String crowno = jo2.getString("crowno"); + // 数量 + String nnum = jo2.getString("nnum"); + String orderMd5 = vbillcode + cmaterialoid + vbatchcode + crowno + nnum; + if (list.contains(orderMd5)){ + log.warn("其他采购订单相同:{},md5:{}",JSON.toJSONString(jo2),orderMd5); + continue; + } + list.add(orderMd5); + //判断该采购订单是否存在 + JSONObject jsonLike = otherPorc.query("vbillcode = '" + vbillcode + "' and cmaterialoid = '" + cmaterialoid + "' and vbatchcode = '" + vbatchcode + "' and crowno = '" + crowno + "' and dr = '0'") + .uniqueResult(0); + if (ObjectUtil.isNotEmpty(jsonLike)) { + continue; + } + //插入其他采购订单处理表 + JSONObject jo = new JSONObject(); + jo.put("id", IdUtil.getSnowflake(1, 1).nextId()); + jo.put("vbillcode", vbillcode); + jo.put("dbilldate", jo2.getString("dbilldate")); + jo.put("dr", jo2.getString("dr")); + jo.put("vnote", jo2.getString("vnote")); + jo.put("cmaterialoid", cmaterialoid); + jo.put("vbatchcode", vbatchcode); + jo.put("item_no", jo2.getString("item_no")); + jo.put("nnum", nnum); + jo.put("crowno", crowno); + jo.put("vnotebody", jo2.getString("vnotebody")); + jo.put("vdef2", jo2.getString("vdef2")); + jo.put("pk_org", jo2.getString("pk_org")); + jo.put("pk_org_v", jo2.getString("pk_org_v")); + jo.put("cwarehouseid", jo2.getString("cwarehouseid")); + jo.put("input_optid", SecurityUtils.getCurrentUserId()); + jo.put("input_optname", SecurityUtils.getNickName()); + jo.put("input_time", DateUtil.now()); + try { + otherPorc.insert(jo); + } catch (Exception e) { + throw new BadRequestException("订单号:" + vbillcode + "数据存在问题,请检查!"); + } + } + log.info("其他采购订单导入数据结束---------成功:" + list.size() + "条"); + } + @Override @Transactional(rollbackFor = Exception.class) public void getPurchaseInInfo(Map map) { diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/ext/erp/wql/QERP.wql b/mes/hd/nladmin-system/src/main/java/org/nl/ext/erp/wql/QERP.wql index 13d4ca6a..dbf7463c 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/ext/erp/wql/QERP.wql +++ b/mes/hd/nladmin-system/src/main/java/org/nl/ext/erp/wql/QERP.wql @@ -111,6 +111,18 @@ ENDQUERY ENDIF + IF 输入.flag = "33" + QUERY + SELECT + pp.* + FROM + V_HHL_OTHERS_IN_VIEW pp + WHERE + 1=1 + ENDSELECT + ENDQUERY + ENDIF + IF 输入.flag = "4" QUERY SELECT diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/pda/st/in/rest/HandNewMaterialController.java b/mes/hd/nladmin-system/src/main/java/org/nl/pda/st/in/rest/HandNewMaterialController.java index bac47a18..0e0b49c9 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/pda/st/in/rest/HandNewMaterialController.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/pda/st/in/rest/HandNewMaterialController.java @@ -56,6 +56,13 @@ public class HandNewMaterialController { return new ResponseEntity<>(handNewMaterialService.confirmVehicle(whereJson),HttpStatus.OK); } + @PostMapping("/confirmVehicle2") + @Log("新料其他入库组盘") + @ApiOperation("新料其他入库组盘") + public ResponseEntity confirmVehicle2(@RequestBody Map whereJson) { + return new ResponseEntity<>(handNewMaterialService.confirmVehicle2(whereJson),HttpStatus.OK); + } + @PostMapping("/getBillDtl") @Log("获取收货明细") @ApiOperation("获取收货明细") @@ -66,6 +73,16 @@ public class HandNewMaterialController { return new ResponseEntity<>(handNewMaterialService.getBillDtl(whereJson,ctx),HttpStatus.OK); } + @PostMapping("/getBillDtl2") + @Log("获取收货明细2") + @ApiOperation("获取收货明细2") + public ResponseEntity getBillDtl2(@RequestBody Map whereJson) { + HttpContext ctx = new HttpContext("11"); + ctx.setPage((String)(whereJson.get("page"))); + ctx.setRows((String)(whereJson.get("size"))); + return new ResponseEntity<>(handNewMaterialService.getBillDtl2(whereJson,ctx),HttpStatus.OK); + } + @PostMapping("/queryPoint") @Log("获取收货明细") @ApiOperation("获取收货明细") diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/pda/st/in/service/HandNewMaterialService.java b/mes/hd/nladmin-system/src/main/java/org/nl/pda/st/in/service/HandNewMaterialService.java index 8d88fa2b..f9d3fda0 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/pda/st/in/service/HandNewMaterialService.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/pda/st/in/service/HandNewMaterialService.java @@ -30,6 +30,14 @@ public interface HandNewMaterialService { */ Map confirmVehicle(Map jsonObject); + /** + * 确认组盘,生成入库单 + * + * @param jsonObject 条件 + * @return Map + */ + Map confirmVehicle2(Map jsonObject); + /** * 查询收货明细 * @@ -38,6 +46,14 @@ public interface HandNewMaterialService { */ Map getBillDtl(Map jsonObject, HttpContext ctx); + /** + * 查询收货明细 + * + * @param jsonObject 条件 + * @return Map + */ + Map getBillDtl2(Map jsonObject, HttpContext ctx); + /** * 查询收货明细 * @@ -131,4 +147,5 @@ public interface HandNewMaterialService { * @return Map */ Map directInConfirm(JSONObject whereJson); + } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/pda/st/in/service/impl/HandNewMaterialServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/pda/st/in/service/impl/HandNewMaterialServiceImpl.java index 802df1ec..deedea5d 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/pda/st/in/service/impl/HandNewMaterialServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/pda/st/in/service/impl/HandNewMaterialServiceImpl.java @@ -708,12 +708,452 @@ public class HandNewMaterialServiceImpl implements HandNewMaterialService { return returnjo; } + @Override + @Transactional(rollbackFor = Exception.class) + public Map confirmVehicle2(Map jsonObject) { + WQLObject task_wql = WQLObject.getWQLObject("SCH_BASE_Task"); + WQLObject vehicle_wql = WQLObject.getWQLObject("MD_PB_StorageVehicleInfo"); + WQLObject bucket_wql = WQLObject.getWQLObject("MD_PB_BucketRecord"); + WQLObject receive_mst = WQLObject.getWQLObject("PCS_RC_ReceiveMst"); + WQLObject receive_dtl = WQLObject.getWQLObject("PCS_RC_ReceiveDtl"); + WQLObject io_mst = WQLObject.getWQLObject("ST_IVT_IOStorInv"); + WQLObject io_dtl = WQLObject.getWQLObject("ST_IVT_IOStorInvDtl"); + WQLObject io_dis = WQLObject.getWQLObject("ST_IVT_IOStorInvDis"); + WQLObject point_wql = WQLObject.getWQLObject("SCH_BASE_Point"); + WQLObject change = WQLObject.getWQLObject("MD_PB_BucketChangeFlow"); + + String currentUserId = SecurityUtils.getCurrentUserId() + ""; + String nickName = SecurityUtils.getNickName(); + String now = DateUtil.now(); + int detail_count = 0; + double total_qty = 0; + + HashMap vehicle = (HashMap) jsonObject.get("vehicle"); + HashMap source_bill = (HashMap) jsonObject.get("bill"); + String ivt_level1 = MapUtil.getStr(jsonObject, "ivt_level"); + + if (ObjectUtil.isEmpty(vehicle)) { + throw new PdaRequestException("载具不能为空,请点击查询载具是否可用!"); + } + HashMap point = new HashMap<>(); + String flag = (String) jsonObject.get("option"); + String storagevehicle_code = vehicle.get("storagevehicle_code"); + ArrayList rows = (ArrayList) jsonObject.get("bucket_rows"); + String material_id = (String) rows.get(0).get("material_id"); + String pcsn = (String) rows.get(0).get("pcsn"); + + String iostorinv_id = IdUtil.getSnowflake(1, 1).nextId() + ""; + + //工序返工入库校验 + if (flag.equals("3") || flag.equals("4") || flag.equals("7")) { + point = (HashMap) jsonObject.get("point"); + if (ObjectUtil.isEmpty(point)){ + throw new PdaRequestException("点位不能为空,请点击查询点位是否可用!"); + } + JSONObject vehicle_jo = vehicle_wql.query("storagevehicle_code = '" + storagevehicle_code + "' AND is_delete = '0' AND is_used = '1'").uniqueResult(0); + //校验载具为塑料托盘 + if (flag.equals("3")){ + if (!vehicle_jo.getString("storagevehicle_type").equals("10")) { + throw new PdaRequestException("必须使用铁托盘!"); + } + } + //查询该载具是否存在组盘记录 + JSONArray mater_rows = bucket_wql.query("storagevehicle_code = '" + vehicle_jo.getString("storagevehicle_code") + "' AND status IN ('03','02')").getResultJSONArray(0); + if (mater_rows.size() > 0) { + throw new PdaRequestException("请选择空托盘!"); + } + JSONObject point_jo = point_wql.query("vehicle_code = '" + storagevehicle_code + "'").uniqueResult(0); + if (!ObjectUtil.isEmpty(point_jo) && !point_jo.getString("point_code").equals(point.get("point_code"))) { + throw new PdaRequestException("该载具存在别的点位上!"); + } + //查询是否存在未完成的任务 + JSONObject task_jo = task_wql.query("vehicle_code = '" + storagevehicle_code + "' AND is_delete = '0' AND task_status < '99'").uniqueResult(0); + if (!ObjectUtil.isEmpty(task_jo)) { + throw new PdaRequestException("该载具存在未完成的任务!"); + } + JSONObject start_point = point_wql.query("point_code = '" + point.get("point_code") + "'").uniqueResult(0); + if (!start_point.getString("lock_type").equals("00")) { + throw new PdaRequestException("该点位已被锁定!"); + } + } + //插入主表 + String bill_type = "000103"; // 原材料其他入库 + JSONObject jo_now = WQL.getWO("QPADST_IN_SERVICE").addParam("flag", "11").addParam("storagevehicle_code", storagevehicle_code).process().uniqueResult(0); + if(jo_now!=null){ + throw new PdaRequestException("该载具"+storagevehicle_code+"已存在未完成的出入库单!"); + } + JSONObject mst_jo = new JSONObject(); + String bill_code = CodeUtil.getNewCode("IO_CODE"); + mst_jo.put("iostorinv_id", iostorinv_id); + mst_jo.put("bill_code", bill_code); + mst_jo.put("buss_type", bill_type.substring(0, 4)); + mst_jo.put("io_type", "0"); + mst_jo.put("bill_type", bill_type); + mst_jo.put("biz_date", DateUtil.today()); + mst_jo.put("stor_id", "1473161852946092032"); + mst_jo.put("stor_code", "01"); + mst_jo.put("stor_name", "原材料库"); + mst_jo.put("total_qty", total_qty); + mst_jo.put("detail_count", detail_count); + mst_jo.put("remark", ""); + mst_jo.put("bill_status", "10"); + mst_jo.put("create_mode", "02"); + mst_jo.put("input_optid", currentUserId + ""); + mst_jo.put("input_optname", nickName); + mst_jo.put("input_time", now); + mst_jo.put("update_optid", currentUserId + ""); + mst_jo.put("update_optname", nickName); + mst_jo.put("update_time", now); + mst_jo.put("is_delete", "0"); + mst_jo.put("is_upload", "0"); + JwtUserDto currentUser = (JwtUserDto) SecurityUtils.getCurrentUser(); + Long deptId = currentUser.getDeptId(); + mst_jo.put("sysdeptid", deptId + ""); + mst_jo.put("syscompanyid", deptId + ""); + io_mst.insert(mst_jo); + + //批量查询桶: + List bucketuniqueCollenct = new ArrayList<>(); + for (HashMap row : rows) { + bucketuniqueCollenct.add(String.valueOf(row.get("bucketunique"))); + } + Map buckqMap = bucket_wql.query("bucketunique in ('" + bucketuniqueCollenct.stream().collect(Collectors.joining("','")) + "')") + .getResultJSONArray(0).stream().collect(HashMap::new, (map, buckq) -> { + JSONObject jo = (JSONObject) buckq; + map.put("key_"+jo.getString("bucketunique")+jo.getString("material_id") + jo.getString("pcsn"), jo); + }, HashMap::putAll); + + for (int i = 0; i < rows.size(); i++) { + String iostorinvdtl_id = ""; + String iostorinvdis_id = ""; + HashMap row = rows.get(i); + + if (flag.equals("5") && row.containsKey("is_new") && row.get("is_new").equals("0")) { + continue; + } + JSONObject bucket_jo = buckqMap.get("key_" + row.get("bucketunique") + row.get("material_id") + row.get("pcsn")); + + check:{ //校验桶状态 + if (ObjectUtil.isEmpty(bucket_jo)) { + throw new PdaRequestException("桶号:" + row.get("bucketunique") + "查不到对应物料批次记录!"); + } + + if (!ObjectUtil.isEmpty(bucket_jo) && !bucket_jo.getString("status").equals("01")) { + //如果为软废采购入库,判断是否为新加,不是新加的不需要判断是否组盘 + if (!flag.equals("5") && row.containsKey("is_new") && row.get("is_new").equals("0")) { + throw new PdaRequestException("桶" + bucket_jo.getString("bucketunique") + "已经组盘!"); + } + } + + if (flag.equals("1")) { + if (StrUtil.isNotEmpty(material_id) && StrUtil.isNotEmpty(pcsn)) { + if (!row.get("material_id").equals(material_id) || !pcsn.equals(row.get("pcsn"))) { + throw new PdaRequestException("存在不同物料、批次的明细!"); + } + } + } + //工序返工入库校验、零头粉入库 + if (flag.equals("3") || flag.equals("6")) { + //物料为PG粉 + boolean is_pgf = materialbaseService.isAlongMaterType(MaterOptTypeEnum.PGF.getCode(), bucket_jo.getString("material_id"), null); + //桶内物料必须为PG粉; + if (!is_pgf) { + throw new PdaRequestException("桶内物料不为PG粉!"); + } + } + if (flag.equals("5") || flag.equals("7")) { + //物料为软废 + boolean is_rf = materialbaseService.isAlongMaterType(MaterOptTypeEnum.RF.getCode(), bucket_jo.getString("material_id"), null); + //桶内物料必须为软废; + if (!is_rf) { + throw new PdaRequestException("桶内物料不为软废!"); + } + } + } + //查询该桶记录是否存在 + if (ObjectUtil.isEmpty(bucket_jo) || !"01,02,03".contains(bucket_jo.getString("status"))) { + //插入一条桶记录 + row.put("create_id", currentUserId + ""); + row.put("create_name", nickName); + row.put("create_time", now); + row.put("ivt_level", ivt_level1); + row.put("flag", flag); + this.insertBucket(row); + } + //立库返工入库校验 + if (flag.equals("4")) { + //物料为PG粉 + boolean is_pgf = materialbaseService.isAlongMaterType(MaterOptTypeEnum.PGF.getCode(), bucket_jo.getString("material_id"), null); + //桶内物料必须为PG粉; + if (!is_pgf) { + throw new PdaRequestException("桶内物料不为PG粉!"); + } + } + + //如果为立库返工入库,修改立库出库信息表 + if (flag.equals("4")) { + HashMap out_map = new HashMap<>(); + out_map.put("status", "1"); + WQLObject.getWQLObject("PDM_LK_OutPalletMateril").update(out_map, "bucketunique = '" + row.get("bucketunique") + "' AND status = '0'"); + } + + //更新桶记录表桶组盘信息 + HashMap bucket_map = new HashMap<>(); + bucket_map.put("status", "02"); + bucket_map.put("makeup_optid", currentUserId + ""); + bucket_map.put("makeup_optname", nickName); + bucket_map.put("makeup_time", now); + bucket_map.put("ivt_level", ivt_level1); + bucket_map.put("storagevehicle_id", vehicle.get("storagevehicle_id")); + bucket_map.put("storagevehicle_code", vehicle.get("storagevehicle_code")); + //如果是工序返工入库,修改桶品质类型为不良品 + if (flag.equals("3")) { + bucket_map.put("quality_scode", "02"); + } + bucket_wql.update(bucket_map, "bucketunique = '" + row.get("bucketunique") + "' AND status = '01'"); + + JSONObject bucket_now = bucket_wql.query("bucketunique = '" + row.get("bucketunique") + "' AND status = '02'").uniqueResult(0); + + if (flag.equals("7")) { + //判断软废是否可用 + if (!bucket_now.getString("is_active").equals("1")) { + throw new PdaRequestException(bucket_now.getString("bucketunique") + "桶,软废不可用!"); + } + } + + if (flag.equals("3")) { + //插入桶物料变动记录表,减待检 + JSONObject change_jo = new JSONObject(); + change_jo.put("change_id", IdUtil.getSnowflake(1, 1).nextId()); + change_jo.put("bucket_code", bucket_now.get("bucketunique")); + change_jo.put("material_id", bucket_now.get("material_id")); + change_jo.put("pcsn", bucket_now.get("pcsn")); + change_jo.put("ivt_level", bucket_now.get("ivt_level")); + change_jo.put("is_active", bucket_now.get("is_active")); + change_jo.put("quality_scode", "00"); + change_jo.put("qty_unit_id", bucket_now.get("qty_unit_id")); + change_jo.put("qty_unit_name", bucket_now.get("qty_unit_name")); + change_jo.put("change_type_scode", "02"); + change_jo.put("change_time", now); + change_jo.put("rec_person", currentUserId); + change_jo.put("change_qty", bucket_now.get("storage_qty")); + change_jo.put("result_qty", "0"); + change.insert(change_jo); + + //插入桶物料变动记录表,加不良 + JSONObject change_jo2 = new JSONObject(); + change_jo2.put("change_id", IdUtil.getSnowflake(1, 1).nextId()); + change_jo2.put("bucket_code", bucket_now.get("bucketunique")); + change_jo2.put("material_id", bucket_now.get("material_id")); + change_jo2.put("pcsn", bucket_now.get("pcsn")); + change_jo2.put("ivt_level", bucket_now.get("ivt_level")); + change_jo2.put("is_active", bucket_now.get("is_active")); + change_jo2.put("quality_scode", "02"); + change_jo2.put("qty_unit_id", bucket_now.get("qty_unit_id")); + change_jo2.put("qty_unit_name", bucket_now.get("qty_unit_name")); + change_jo2.put("change_type_scode", "01"); + change_jo2.put("change_time", now); + change_jo2.put("rec_person", currentUserId); + change_jo2.put("change_qty", bucket_now.get("storage_qty")); + change_jo2.put("result_qty", bucket_now.get("storage_qty")); + change.insert(change_jo2); + } + //判断当前物料、批次、库存等级、品质类型、是否可用的入库明细是否存在 + String bucket_material_id = bucket_now.getString("material_id"); + String bucket_pcsn = bucket_now.getString("pcsn"); + String quality_scode = bucket_now.getString("quality_scode"); + String ivt_level = bucket_now.getString("ivt_level"); + String is_active = bucket_now.getString("is_active"); + + bucket_now.put("storagevehicle_id", vehicle.get("storagevehicle_id")); + bucket_now.put("storagevehicle_code", vehicle.get("storagevehicle_code")); + bucket_now.put("storagevehicle_type", vehicle.get("storagevehicle_type")); + + String dtl_where = "iostorinv_id = '" + iostorinv_id + "' AND material_id = '" + bucket_material_id + "' AND pcsn = '" + bucket_pcsn + "'" + + "AND quality_scode = '" + quality_scode + "' AND ivt_level = '" + ivt_level + "' AND is_active = '" + is_active + "'"; + JSONObject dtl_jo = io_dtl.query(dtl_where).uniqueResult(0); + + //如果为空新增,否则更新 + if (ObjectUtil.isEmpty(dtl_jo)) { + iostorinvdtl_id = IdUtil.getSnowflake(1, 1).nextId() + ""; + bucket_now.put("iostorinvdtl_id", iostorinvdtl_id); + bucket_now.put("iostorinv_id", iostorinv_id); + JSONArray dtl_rows = io_dtl.query("iostorinv_id = '" + iostorinv_id + "'").getResultJSONArray(0); + bucket_now.put("seq_no", (dtl_rows.size() + 1) + ""); + bucket_now.put("bill_status", "30"); + if (flag.equals("1")) { + //新料入库校验 + //校验到货通知单单据 + HashMap bill = (HashMap) row.get("bill"); + String source_bill_code = (String) bill.get("source_bill_code"); + String source_billdtl_id = (String) bill.get("source_billdtl_id"); + if (!source_billdtl_id.equals(source_bill.get("source_billdtl_id"))) { + throw new PdaRequestException("关联单据不同!"); + } + JSONObject receive_mst_jo = receive_mst.query("receive_code = '" + source_bill_code + "'").uniqueResult(0); + JSONObject receive_dtl_jo = receive_dtl.query("receivedtl_id = '" + source_billdtl_id + "'").uniqueResult(0); + if (!bill.get("material_id").equals(row.get("material_id")) || !bill.get("pcsn").equals(row.get("pcsn"))) { + throw new PdaRequestException("单据物料批次和桶物料批次不同!"); + } + if (ObjectUtil.isEmpty(receive_mst_jo) || ObjectUtil.isEmpty(receive_dtl_jo)) { + throw new PdaRequestException("传入的收货单信息有误!"); + } + if (receive_mst_jo.getString("status").equals("99") || receive_mst_jo.getString("is_delete").equals("1")) { + throw new PdaRequestException("该到货通知单:" + source_bill_code + "已完成或删除"); + } + if (receive_dtl_jo.getString("status").equals("99")) { + throw new PdaRequestException("收货单明细已完成!"); + } + double unin = receive_dtl_jo.getDouble("receive_qty")-receive_dtl_jo.getDouble("instor_qty"); + if (unin <= 0) { + throw new PdaRequestException("收货明细未入库数为0!"); + } + if(bucket_now.getDouble("storage_qty") > unin){ + throw new PdaRequestException("当前组盘入库数"+bucket_now.getDouble("storage_qty")+"大于收货明细未入库数"+unin+"!"); + } + bucket_now.put("source_billdtl_id", bill.get("source_billdtl_id")); + bucket_now.put("source_bill_type", bill.get("source_bill_type")); + bucket_now.put("source_bill_code", bill.get("source_bill_code")); + bucket_now.put("source_bill_table", bill.get("source_bill_table")); + bucket_now.put("base_billdtl_id", bill.get("base_billdtl_id")); + bucket_now.put("base_bill_type", bill.get("base_bill_type")); + bucket_now.put("base_bill_code", bill.get("base_bill_code")); + bucket_now.put("base_bill_table", bill.get("base_bill_table")); + } + if (flag.equals("5")) { + bucket_now.put("source_billdtl_id", row.get("source_billdtl_id")); + bucket_now.put("source_bill_type", row.get("source_bill_type")); + bucket_now.put("source_bill_code", row.get("source_bill_code")); + bucket_now.put("source_bill_table", row.get("source_bill_table")); + bucket_now.put("base_billdtl_id", row.get("base_billdtl_id")); + bucket_now.put("base_bill_type", row.get("base_bill_type")); + bucket_now.put("base_bill_code", row.get("base_bill_code")); + bucket_now.put("base_bill_table", row.get("base_bill_table")); + if (StrUtil.isNotEmpty((String) row.get("source_billdtl_id"))) { + //查询该单据是否存在 + JSONObject pro_jo = WQLObject.getWQLObject("PCS_IF_PurchaseOrderProc").query("id = '" + row.get("source_billdtl_id") + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(pro_jo)){ + throw new PdaRequestException("采购订单数据发生变化,请重新选择选择明细生成入库单!"); + } + HashMap proc_map = new HashMap<>(); + proc_map.put("proc_status", "02"); + proc_map.put("update_optid", currentUserId + ""); + proc_map.put("update_optname", nickName); + proc_map.put("update_time", now); + WQLObject.getWQLObject("PCS_IF_PurchaseOrderProc").update(proc_map, "id = '" + row.get("source_billdtl_id") + "'"); + } + } + bucket_now.put("unassign_qty", bucket_now.getString("storage_qty")); + bucket_now.put("plan_qty", bucket_now.getString("storage_qty")); + io_dtl.insert(bucket_now); + detail_count++; + } else { + iostorinvdtl_id = dtl_jo.getString("iostorinvdtl_id"); + dtl_jo.put("unassign_qty", bucket_now.getDoubleValue("storage_qty")); + double unassign_qty = dtl_jo.getDoubleValue("unassign_qty"); + dtl_jo.put("plan_qty", NumberUtil.add(unassign_qty, dtl_jo.getDoubleValue("assign_qty"))); + io_dtl.update(dtl_jo); + } + + //判断当前载具、物料、批次、库存等级、品质类型、是否可用的入库分配是否存在 + JSONObject dis_jo = io_dis.query(dtl_where + "AND storagevehicle_code = '" + storagevehicle_code + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(dis_jo)) { + iostorinvdis_id = IdUtil.getSnowflake(1, 1).nextId() + ""; + bucket_now.put("iostorinvdis_id", iostorinvdis_id); + bucket_now.put("iostorinv_id", iostorinv_id); + bucket_now.put("iostorinvdtl_id", iostorinvdtl_id); + JSONArray dis_rows = io_dis.query(dtl_where + "AND storagevehicle_code = '" + storagevehicle_code + "'").getResultJSONArray(0); + bucket_now.put("seq_no", dis_rows.size() + 1); + //如果是工序返工入库或立库返工入库 + if (flag.equals("3") || flag.equals("4") || flag.equals("7")) { + bucket_now.put("point_id", point.get("point_id")); + bucket_now.put("point_code", point.get("point_code")); + bucket_now.put("point_name", point.get("point_name")); + } + inbillService.insertDis(bucket_now); + } else { + iostorinvdis_id = dis_jo.getString("iostorinvdis_id"); + } + + //插入分配明细表 + bucket_now.put("iostorinvdis_id", iostorinvdis_id); + bucket_now.put("iostorinv_id", iostorinv_id); + bucket_now.put("iostorinvdtl_id", iostorinvdtl_id); + bucket_now.put("seq_no", i + 1); + inbillService.insertDisDtl(bucket_now); + total_qty = total_qty + bucket_now.getDoubleValue("storage_qty"); + } + + // 判断等级是否一致 + JSONArray jsonDtlArr = io_dtl.query("iostorinv_id = '" + iostorinv_id + "'").getResultJSONArray(0); + String ivt_level = jsonDtlArr.getJSONObject(0).getString("ivt_level"); + + boolean is_level = jsonDtlArr.stream() + .map(row -> (JSONObject) row) + .allMatch(row -> row.getString("ivt_level").equals(ivt_level)); + + if (!is_level) { + throw new PdaRequestException("库存等级不一致,请检查!"); + } + + HashMap mst_map = new HashMap<>(); + mst_map.put("total_qty", total_qty + ""); + mst_map.put("detail_count", detail_count + ""); + io_mst.update(mst_map, "iostorinv_id = '" + iostorinv_id + "'"); + + //如果是工序返工入库,分配货位,生成任务 + if (flag.equals("3") || flag.equals("4") || flag.equals("7")) { + HashMap whereJson = new HashMap(); + JSONArray tableMater = io_dis.query("iostorinv_id = '" + iostorinv_id + "' AND storagevehicle_code = '" + vehicle.get("storagevehicle_code") + "'").getResultJSONArray(0); + ArrayList> list = new ArrayList<>(); + for (int i = 0; i < tableMater.size(); i++) { + JSONObject jo = tableMater.getJSONObject(i); + HashMap row = new HashMap<>(); + row.put("point_code", jo.getString("point_code")); + row.put("storagevehicle_id", jo.getString("storagevehicle_id")); + row.put("storagevehicle_code", jo.getString("storagevehicle_code")); + row.put("storagevehicle_type", jo.getString("storagevehicle_type")); + row.put("material_id", jo.getString("material_id")); + row.put("iostorinv_id", jo.getString("iostorinv_id")); + JSONObject mater_jo = WQLObject.getWQLObject("md_me_materialbase").query("material_id = '" + jo.getString("material_id") + "'").uniqueResult(0); + row.put("material_code", mater_jo.getString("material_code")); + list.add(row); + } + whereJson.put("tableMater", list); + whereJson.put("checked", true); + whereJson.put("auto_issue", true); + rawAssistIStorService.divStruct(whereJson); + } + + JSONObject returnjo = new JSONObject(); + returnjo.put("code", "1"); + returnjo.put("desc", "组盘成功!"); + return returnjo; + } + @Override @Transactional(rollbackFor = Exception.class) public Map getBillDtl(Map jsonObject, HttpContext ctx) { HashMap map = new HashMap<>(); map.put("flag", "2"); map.put("pcsn", jsonObject.get("pcsn")); + map.put("receive_type", "81"); + JSONObject jo = WQL.getWO("QST_IVT_RAWASSISTISTOR").addParamMap(map).pageQuery(ctx, "input_time desc"); + JSONObject returnjo = new JSONObject(); + returnjo.put("code", "1"); + returnjo.put("desc", "查询成功!"); + returnjo.put("rows", jo.getJSONArray("content")); + returnjo.put("size", jo.getJSONArray("content").size()); + return returnjo; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Map getBillDtl2(Map jsonObject, HttpContext ctx) { + HashMap map = new HashMap<>(); + map.put("flag", "2"); + map.put("pcsn", jsonObject.get("pcsn")); + map.put("receive_type", "82"); JSONObject jo = WQL.getWO("QST_IVT_RAWASSISTISTOR").addParamMap(map).pageQuery(ctx, "input_time desc"); JSONObject returnjo = new JSONObject(); returnjo.put("code", "1"); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pcs/rest/PcsIfOtherIosInProcController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pcs/rest/PcsIfOtherIosInProcController.java new file mode 100644 index 00000000..644b1908 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pcs/rest/PcsIfOtherIosInProcController.java @@ -0,0 +1,105 @@ + +package org.nl.wms.pcs.rest; + + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.annotation.Log; +import org.nl.wms.pcs.Enum.ProcStatusEnum; +import org.nl.wms.pcs.service.PcsIfOtherIosInProcService; +import org.nl.wms.pcs.service.dto.PcsIfOtherIosInProcDto; +import org.nl.wms.pcs.service.dto.PcsIfPurchaseorderprocDto; +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 2021-12-15 + **/ +@RestController +@RequiredArgsConstructor +@Api(tags = "其他采购订单导入管理") +@RequestMapping("/api/otherIosInProc") +@Slf4j +public class PcsIfOtherIosInProcController { + + private final PcsIfOtherIosInProcService pcsIfOtherIosInProcService; + + @GetMapping + @Log("查询采购订单导入") + @ApiOperation("查询采购订单导入") + //@PreAuthorize("@el.check('pcsIfPurchaseorderproc:list')") + public ResponseEntity query(@RequestParam Map whereJson, Pageable page) { + return new ResponseEntity<>(pcsIfOtherIosInProcService.queryAll(whereJson, page), HttpStatus.OK); + } + + @PostMapping + @Log("新增采购订单导入") + @ApiOperation("新增采购订单导入") + //@PreAuthorize("@el.check('pcsIfPurchaseorderproc:add')") + public ResponseEntity create(@Validated @RequestBody PcsIfPurchaseorderprocDto dto) { + pcsIfOtherIosInProcService.create(dto); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改采购订单导入") + @ApiOperation("修改采购订单导入") + //@PreAuthorize("@el.check('pcsIfPurchaseorderproc:edit')") + public ResponseEntity update(@Validated @RequestBody PcsIfPurchaseorderprocDto dto) { + pcsIfOtherIosInProcService.update(dto); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除采购订单导入") + @ApiOperation("删除采购订单导入") + //@PreAuthorize("@el.check('pcsIfPurchaseorderproc:del')") + @DeleteMapping + public ResponseEntity delete(@RequestBody Long[] ids) { + pcsIfOtherIosInProcService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + @Log("获取处理状态") + @ApiOperation("获取处理状态") + //@PreAuthorize("@el.check('pcsIfPurchaseorderproc:del')") + @GetMapping("/getProcStatus") + public ResponseEntity getProcStatus() { + JSONArray jsonArr = new JSONArray(); + ProcStatusEnum[] values = ProcStatusEnum.values(); + for (ProcStatusEnum value : values) { + JSONObject json = new JSONObject(); + json.put("code", value.getCode()); + json.put("name", value.getName()); + jsonArr.add(json); + } + return new ResponseEntity<>(jsonArr, HttpStatus.OK); + } + + @Log("导入视图数据") + @ApiOperation("导入视图数据") + //@PreAuthorize("@el.check('pcsIfPurchaseorderproc:del')") + @PutMapping("/importData") + public ResponseEntity importData(@RequestBody Map whereJson) { + pcsIfOtherIosInProcService.importData(whereJson); + return new ResponseEntity<>(HttpStatus.OK); + } + + @Log("强制完成") + @ApiOperation("强制完成") + //@PreAuthorize("@el.check('pcsIfPurchaseorderproc:del')") + @PutMapping("/finish") + public ResponseEntity finish(@RequestBody PcsIfOtherIosInProcDto dto) { + pcsIfOtherIosInProcService.finish(dto); + return new ResponseEntity<>(HttpStatus.OK); + } +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pcs/service/PcsIfOtherIosInProcService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pcs/service/PcsIfOtherIosInProcService.java new file mode 100644 index 00000000..6253f7cf --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pcs/service/PcsIfOtherIosInProcService.java @@ -0,0 +1,96 @@ + +package org.nl.wms.pcs.service; + +import com.alibaba.fastjson.JSONObject; +import org.nl.wms.pcs.service.dto.PcsIfOtherIosInProcDto; +import org.nl.wms.pcs.service.dto.PcsIfPurchaseorderprocDto; +import org.springframework.data.domain.Pageable; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.List; +import java.util.Map; + +/** + * @author Liuxy + * @description 服务接口 + * @date 2021-12-15 + **/ +public interface PcsIfOtherIosInProcService { + + /** + * 查询数据分页 + * + * @param whereJson 条件 + * @param page 分页参数 + * @return Map + */ + Map queryAll(Map whereJson, Pageable page); + + /** + * 查询所有数据不分页 + * + * @param whereJson 条件参数 + * @return List + */ + List queryAll(Map whereJson); + + /** + * 根据ID查询 + * + * @param id ID + * @return PcsIfPurchaseorderproc + */ + PcsIfPurchaseorderprocDto findById(Long id); + + /** + * 根据编码查询 + * + * @param code code + * @return PcsIfPurchaseorderproc + */ + PcsIfPurchaseorderprocDto findByCode(String code); + + /** + * 创建 + * + * @param dto / + */ + void create(PcsIfPurchaseorderprocDto dto); + + /** + * 编辑 + * + * @param dto / + */ + void update(PcsIfPurchaseorderprocDto dto); + + /** + * 多选删除 + * + * @param ids / + */ + void deleteAll(Long[] ids); + + /** + * 导入视图数据 + * + * @param whereJson + */ + void importData(Map whereJson); + + /** + * 强制完成 + * + * @param dto / + */ + void finish(PcsIfOtherIosInProcDto dto); + + /** + * 合同台账 + * + * @param ledgerQueryDownloadQuery 、 + * @param response 、 + */ + void download(List ledgerQueryDownloadQuery, HttpServletResponse response) throws IOException; +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pcs/service/dto/PcsIfOtherIosInProcDto.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pcs/service/dto/PcsIfOtherIosInProcDto.java new file mode 100644 index 00000000..8e29014a --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pcs/service/dto/PcsIfOtherIosInProcDto.java @@ -0,0 +1,113 @@ +package org.nl.wms.pcs.service.dto; + +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 Liuxy + * @description / + * @date 2021-12-15 + **/ +@Data +public class PcsIfOtherIosInProcDto implements Serializable { + + /** id */ + /** + * 防止精度丢失 + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + /** + * 订单编号 + */ + private String vbillcode; + + /** + * 订单日期 + */ + private String dbilldate; + + /** + * 是否删除 + */ + private String dr; + + /** + * 标题备注 + */ + private String vnote; + + /** + * 物料id + */ + private String cmaterialoid; + + /** + * 批次 + */ + private String vbatchcode; + + /** + * 物料编码 + */ + private String item_no; + + /** + * 数量 + */ + private BigDecimal nnum; + + /** + * 行号 + */ + private String crowno; + + /** + * 行备注 + */ + private String vnotebody; + + /** + * 委外供应商 + */ + private String vdef2; + + /** + * 组织 + */ + private String pk_org; + + /** + * 住址版本 + */ + private String pk_org_v; + + /** + * 库房id + */ + private String cwarehouseid; + + /** + * 处理状态 + */ + private String proc_status; + + private Long input_optid; + + private String input_optname; + + private String input_time; + + private Long update_optid; + + private String update_optname; + + private String update_time; + + +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pcs/service/dto/ReceivemstQueryDto.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pcs/service/dto/ReceivemstQueryDto.java index e75d4c7a..66f1cdfd 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pcs/service/dto/ReceivemstQueryDto.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pcs/service/dto/ReceivemstQueryDto.java @@ -8,6 +8,7 @@ public class ReceivemstQueryDto { private String end_time; private String vbillcode; private String receive_code; + private String receive_type; private String material_code; private String supp_code; private String pcsn; diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pcs/service/impl/PcsIfOtherIosInProcServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pcs/service/impl/PcsIfOtherIosInProcServiceImpl.java new file mode 100644 index 00000000..b33fbf4e --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pcs/service/impl/PcsIfOtherIosInProcServiceImpl.java @@ -0,0 +1,238 @@ + +package org.nl.wms.pcs.service.impl; + + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.map.MapUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.NumberUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.exception.BadRequestException; +import org.nl.ext.erp.service.WmsToErpService; +import org.nl.utils.FileUtil; +import org.nl.utils.SecurityUtils; +import org.nl.wms.basedata.master.constant.MaterOptTypeEnum; +import org.nl.wms.basedata.master.service.ClassstandardService; +import org.nl.wms.pcs.Enum.ProcStatusEnum; +import org.nl.wms.pcs.service.PcsIfOtherIosInProcService; +import org.nl.wms.pcs.service.dto.PcsIfOtherIosInProcDto; +import org.nl.wms.pcs.service.dto.PcsIfPurchaseorderprocDto; +import org.nl.wql.WQL; +import org.nl.wql.core.bean.WQLObject; +import org.nl.wql.util.WqlUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.concurrent.locks.ReentrantLock; +import java.util.stream.Collectors; + +/** + * @author Liuxy + * @description 服务实现 + * @date 2021-12-15 + **/ +@Service +@RequiredArgsConstructor +@Slf4j +public class PcsIfOtherIosInProcServiceImpl implements PcsIfOtherIosInProcService { + @Autowired + private ClassstandardService classstandardService; + @Autowired + private WmsToErpService wmsToErpService; + + final ReentrantLock lock = new ReentrantLock(); + + @Override + public Map queryAll(Map whereJson, Pageable page) { + HashMap map = new HashMap<>(whereJson); + map.put("flag", "1"); + String material_type_id = (String) whereJson.get("material_type_id"); + if (StrUtil.isNotEmpty(material_type_id)) { + String classIds = classstandardService.getChildIdStr(material_type_id); + map.put("classIds", classIds); + } + String type_id = MaterOptTypeEnum.RF.getClass_idStr(); + map.put("type_id", type_id); + JSONObject json = WQL.getWO("QPCS_IF_OTHERIOSINPROC01").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "order_code_1 DESC,order_code_2 ASC"); + return json; + } + + @Override + public List queryAll(Map whereJson) { + WQLObject wo = WQLObject.getWQLObject("pcs_if_purchaseorderproc"); + JSONArray arr = wo.query().getResultJSONArray(0); + List list = arr.toJavaList(PcsIfPurchaseorderprocDto.class); + return list; + } + + @Override + public PcsIfPurchaseorderprocDto findById(Long id) { + WQLObject wo = WQLObject.getWQLObject("pcs_if_purchaseorderproc"); + JSONObject json = wo.query("id =" + id + "").uniqueResult(0); + final PcsIfPurchaseorderprocDto obj = json.toJavaObject(PcsIfPurchaseorderprocDto.class); + return obj; + } + + @Override + public PcsIfPurchaseorderprocDto findByCode(String code) { + WQLObject wo = WQLObject.getWQLObject("pcs_if_purchaseorderproc"); + JSONObject json = wo.query("code ='" + code + "'").uniqueResult(0); + final PcsIfPurchaseorderprocDto obj = json.toJavaObject(PcsIfPurchaseorderprocDto.class); + return obj; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void create(PcsIfPurchaseorderprocDto dto) { + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getNickName(); + String now = DateUtil.now(); + + dto.setId(IdUtil.getSnowflake(1, 1).nextId()); + dto.setUpdate_optid(currentUserId); + dto.setUpdate_optname(nickName); + dto.setUpdate_time(now); + + WQLObject wo = WQLObject.getWQLObject("pcs_if_purchaseorderproc"); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + wo.insert(json); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(PcsIfPurchaseorderprocDto dto) { + PcsIfPurchaseorderprocDto entity = this.findById(dto.getId()); + if (entity == null) throw new BadRequestException("被删除或无权限,操作失败!"); + + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getNickName(); + + String now = DateUtil.now(); + dto.setUpdate_time(now); + dto.setUpdate_optid(currentUserId); + dto.setUpdate_optname(nickName); + + WQLObject wo = WQLObject.getWQLObject("pcs_if_purchaseorderproc"); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + wo.update(json); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteAll(Long[] ids) { + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getNickName(); + String now = DateUtil.now(); + + WQLObject wo = WQLObject.getWQLObject("pcs_if_purchaseorderproc"); + for (Long id : ids) { + JSONObject param = new JSONObject(); + param.put("id", String.valueOf(id)); + param.put("is_delete", "1"); + param.put("update_optid", currentUserId); + param.put("update_optname", nickName); + param.put("update_time", now); + wo.update(param); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void importData(Map whereJson) { + boolean b = lock.tryLock(); + try { + if (b) { + ArrayList arr = (ArrayList) whereJson.get("createTime"); + HashMap map = new HashMap<>(); + if (arr != null && arr.size() != 0) { + if (StrUtil.isNotEmpty(arr.get(0))) { + map.put("begin_time", arr.get(0)); + } + if (StrUtil.isNotEmpty(arr.get(1))) { + map.put("end_time", arr.get(1)); + } + } + wmsToErpService.getOtherIosInfo(map); + } else { + throw new BadRequestException("正在执行导入数据任务,请稍后再试"); + } + } finally { + if (b) { + lock.unlock(); + } + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void finish(PcsIfOtherIosInProcDto dto) { + WQLObject orderTab = WQLObject.getWQLObject("pcs_if_otheriosinproc"); + JSONObject json = orderTab.query("id = '" + dto.getId() + "' and proc_status in (01,02) and dr = '0'").uniqueResult(0); + if (ObjectUtil.isEmpty(json)) { + throw new BadRequestException("被删除或无权限,操作失败!"); + } + json.put("proc_status", ProcStatusEnum.FULFILL.getCode()); + json.put("update_optid", SecurityUtils.getCurrentUserId()); + json.put("update_optname", SecurityUtils.getNickName()); + json.put("update_time", DateUtil.now()); + orderTab.update(json); + } + + @Override + public void download(List ledgerQueryDownloadQuery, HttpServletResponse response) throws IOException { + List> list = new ArrayList<>(); + for (int i = 0; i < ledgerQueryDownloadQuery.size(); i++) { + JSONObject jo = ledgerQueryDownloadQuery.get(i); + Map dtl_map = new LinkedHashMap<>(); + dtl_map.put("签订时间", jo.getString("subscribedate")); + dtl_map.put("合同编码", jo.getString("contract_no")); + dtl_map.put("处理状态", jo.getString("proc_status")); + dtl_map.put("供应商", jo.getString("supp_name")); + dtl_map.put("物料编码", jo.getString("material_code")); + dtl_map.put("物料名称", jo.getString("material_name")); + dtl_map.put("单价含税", NumberUtil.round(jo.getDoubleValue("price_tax"), 3)); + dtl_map.put("合同重量", NumberUtil.round(jo.getDoubleValue("qty_ht"), 3)); + dtl_map.put("合同金额", NumberUtil.round(jo.getDoubleValue("norigtaxmny"), 3)); + dtl_map.put("合同未到货重量", NumberUtil.round(jo.getDoubleValue("qty_zt"), 3)); + dtl_map.put("账龄", jo.getString("honour_days")); + dtl_map.put("合计重量", NumberUtil.round(jo.getDoubleValue("allqty"), 3)); + dtl_map.put("合计金额", NumberUtil.round(jo.getDoubleValue("all_valmoney"), 3)); + dtl_map.put("内容", jo.getString("remark")); + list.add(dtl_map); + } + FileUtil.downloadExcel(list, response); + + } + + public static long getDaySize(String start_datetime, String end_datetime) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date date = new Date(); + Date date2 = new Date(); + long beforeTime = 0; + try { + date2 = sdf.parse(end_datetime + " 00:00:00"); + date = sdf.parse(start_datetime + " 00:00:00"); + long num = date2.getTime() - date.getTime(); + beforeTime = (num / 1000) / 60 / 60 / 24; + if (beforeTime < 0) { + beforeTime = 0; + } + } catch (Exception e) { + e.printStackTrace(); + } + return beforeTime; + } + +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pcs/service/impl/ReceivemstServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pcs/service/impl/ReceivemstServiceImpl.java index 34ee1726..b3cd856c 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pcs/service/impl/ReceivemstServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pcs/service/impl/ReceivemstServiceImpl.java @@ -67,6 +67,7 @@ public class ReceivemstServiceImpl implements ReceivemstService { String vbillcode = dto.getVbillcode(); String receive_code = dto.getReceive_code(); String material_code = dto.getMaterial_code(); + String receive_type = dto.getReceive_type(); String supp_code = dto.getSupp_code(); String pcsn = dto.getPcsn(); String[] statusArr = dto.getStatus(); @@ -96,11 +97,12 @@ public class ReceivemstServiceImpl implements ReceivemstService { map.put("supp_code", supp_code); map.put("purchase_organize", purchase_organize); map.put("use_dept_id", use_dept_id); + map.put("receive_type", receive_type); if (ObjectUtil.isNotEmpty(statusArr)) map.put("status", status); if (ObjectUtil.isNotEmpty(pcsn)) map.put("pcsn", "%"+pcsn+"%"); if (ObjectUtil.isNotEmpty(material_code)) map.put("material_code", "%"+material_code+"%"); // map.put("dept_id", jsonUser.getString("dept_id")); // 因开发需要 暂时取消 - JSONObject json = WQL.getWO("QPCS_RC_RECEIVEMST01").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "order_code_1 DESC,order_code_2 ASC,mst.receive_code ASC"); + JSONObject json = WQL.getWO("QPCS_RC_RECEIVEMST01").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "order_code_1 DESC,order_code_2 ASC,receive_code ASC"); return json; } @@ -143,6 +145,7 @@ public class ReceivemstServiceImpl implements ReceivemstService { WQLObject mstTab = WQLObject.getWQLObject("pcs_rc_receivemst"); WQLObject dtlTab = WQLObject.getWQLObject("pcs_rc_receivedtl"); WQLObject orderTab = WQLObject.getWQLObject("PCS_IF_PurchaseOrderProc"); + WQLObject otherOrderTab = WQLObject.getWQLObject("pcs_if_otheriosinproc"); //主表 JSONObject jsonMst = new JSONObject(); jsonMst.put("receive_id", IdUtil.getSnowflake(1, 1).nextId()); @@ -181,21 +184,33 @@ public class ReceivemstServiceImpl implements ReceivemstService { json.put("receive_id", jsonMst.getString("receive_id")); json.put("receive_code", jsonMst.getString("receive_code")); json.put("seq_no", i + 1); - json.put("source_bill_table", "pcs_if_purchaseorderproc"); + //回显采购订单/其他到货处理表的状态 + if ("82".equals(whereJson.get("receive_type"))) { + // 其他到货 + json.put("source_bill_table", "pcs_if_otheriosinproc"); + JSONObject jsonOrder = otherOrderTab.query("id = '" + json.getString("source_billdtl_id") + "'").uniqueResult(0); + jsonOrder.put("proc_status", ProcStatusEnum.BUYING_CENTER.getCode()); + jsonOrder.put("update_optid", SecurityUtils.getCurrentUserId()); + jsonOrder.put("update_optname", SecurityUtils.getNickName()); + jsonOrder.put("update_time", DateUtil.now()); + otherOrderTab.update(jsonOrder); + } else { + json.put("source_bill_table", "pcs_if_purchaseorderproc"); + JSONObject jsonOrder = orderTab.query("id = '" + json.getString("source_billdtl_id") + "'").uniqueResult(0); + jsonOrder.put("proc_status", ProcStatusEnum.BUYING_CENTER.getCode()); + jsonOrder.put("update_optid", SecurityUtils.getCurrentUserId()); + jsonOrder.put("update_optname", SecurityUtils.getNickName()); + jsonOrder.put("update_time", DateUtil.now()); + orderTab.update(jsonOrder); + } dtlTab.insert(json); - //回显采购订单处理表的状态 - JSONObject jsonOrder = orderTab.query("id = '" + json.getString("source_billdtl_id") + "'").uniqueResult(0); - jsonOrder.put("proc_status", ProcStatusEnum.BUYING_CENTER.getCode()); - jsonOrder.put("update_optid", SecurityUtils.getCurrentUserId()); - jsonOrder.put("update_optname", SecurityUtils.getNickName()); - jsonOrder.put("update_time", DateUtil.now()); - orderTab.update(jsonOrder); - jsonMst.put("source_id", json.getString("supp_id")); jsonMst.put("source_name", json.getString("supp_name")); } - if (StrUtil.isEmpty(jsonMst.getString("source_id"))) { - throw new BadRequestException("此到货单源单据 供应商ID关联不到供应商记录,请联系相关人员维护!"); + if ("81".equals(whereJson.get("receive_type"))) { + if (StrUtil.isEmpty(jsonMst.getString("source_id"))) { + throw new BadRequestException("此到货单源单据 供应商ID关联不到供应商记录,请联系相关人员维护!"); + } } mstTab.insert(jsonMst); } @@ -331,8 +346,12 @@ public class ReceivemstServiceImpl implements ReceivemstService { if (material_code.contains("\\")) material_code = material_code.replace("\\", "\\\\\\"); map.put("material_code", material_code); } - JSONObject json = WQL.getWO("QPCS_RC_RECEIVEMST02").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "input_time DESC"); + // 判断类型是否为:其他到货 + if ("82".equals(MapUtil.getStr(whereJson, "receive_type"))) { + map.put("flag","11"); + } + JSONObject json = WQL.getWO("QPCS_RC_RECEIVEMST02").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "input_time DESC"); return json; } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pcs/wql/QPCS_IF_OTHERIOSINPROC01.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pcs/wql/QPCS_IF_OTHERIOSINPROC01.wql new file mode 100644 index 00000000..8601bf57 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pcs/wql/QPCS_IF_OTHERIOSINPROC01.wql @@ -0,0 +1,117 @@ +[交易说明] + 交易名: 其他采购导入分页查询 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + 输入.begin_time TYPEAS s_string + 输入.end_time TYPEAS s_string + 输入.vbillcode TYPEAS s_string + 输入.proc_status TYPEAS s_string + 输入.material_type_id TYPEAS s_string + 输入.material_code TYPEAS s_string + 输入.supp_code TYPEAS s_string + 输入.vbatchcode TYPEAS s_string + 输入.classIds TYPEAS f_string + 输入.type_id TYPEAS f_string + + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + + IF 输入.flag = "1" + PAGEQUERY + SELECT + oder.*, + supp.supp_name, + supp.supp_code, + mater.material_code, + mater.material_name, + dtl.receive_qty, + dtl.instor_qty, + SUBSTR(oder.vbillcode,1,6) AS order_code_1, + SUBSTR(oder.vbillcode,8,10) AS order_code_2, + ( oder.nnum - dtl.receive_qty ) AS surplus_qty + FROM + pcs_if_otheriosinproc oder + LEFT JOIN MD_CS_SUPPLIERBASE supp ON oder.vdef2 = supp.ext_id + LEFT JOIN MD_ME_MaterialBase mater ON oder.cmaterialoid = mater.ext_id + LEFT JOIN + ( + SELECT + sum(a.receive_qty) AS receive_qty, + sum(a.instor_qty) AS instor_qty, + max(a.source_billdtl_id) AS source_billdtl_id, + max(a.receive_id) AS receive_id + FROM + PCS_RC_ReceiveDtl a + LEFT JOIN + pcs_if_otheriosinproc p ON a.source_billdtl_id = p.id AND a.source_bill_code = p.vbillcode + GROUP BY + a.source_billdtl_id + ) AS dtl ON dtl.source_billdtl_id = oder.id + LEFT JOIN PCS_RC_ReceiveMst mst ON mst.receive_id = dtl.receive_id AND mst.is_delete = '0' + WHERE + oder.dr = '0' + OPTION 输入.begin_time <> "" + oder.input_time >= 输入.begin_time + ENDOPTION + OPTION 输入.end_time <> "" + oder.input_time <= 输入.end_time + ENDOPTION + OPTION 输入.type_id <> "" + mater.material_type_id not in 输入.type_id + ENDOPTION + OPTION 输入.vbillcode <> "" + oder.vbillcode = 输入.vbillcode + ENDOPTION + OPTION 输入.proc_status <> "" + oder.proc_status = 输入.proc_status + ENDOPTION + OPTION 输入.material_code <> "" + (mater.material_code like "%" 输入.material_code "%" or + mater.material_name like "%" 输入.material_code "%") + ENDOPTION + OPTION 输入.vbatchcode <> "" + oder.vbatchcode like "%" 输入.vbatchcode "%" + ENDOPTION + OPTION 输入.classIds <> "" + mater.material_type_id in 输入.classIds + ENDOPTION + OPTION 输入.supp_code <> "" + (supp.supp_code like "%" 输入.supp_code "%" or + supp.supp_name like "%" 输入.supp_code "%") + ENDOPTION + + ENDSELECT + ENDPAGEQUERY + ENDIF \ No newline at end of file diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pcs/wql/QPCS_RC_RECEIVEMST01.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pcs/wql/QPCS_RC_RECEIVEMST01.wql index 69e61b87..c320e2bf 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pcs/wql/QPCS_RC_RECEIVEMST01.wql +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pcs/wql/QPCS_RC_RECEIVEMST01.wql @@ -14,6 +14,7 @@ ## 表字段对应输入参数 ################################################# 输入.flag TYPEAS s_string + 输入.receive_type TYPEAS s_string 输入.begin_time TYPEAS s_string 输入.end_time TYPEAS s_string 输入.vbillcode TYPEAS s_string @@ -52,31 +53,45 @@ IF 输入.flag = "1" PAGEQUERY SELECT - dtl.*, - supp.supp_name, - mater.material_code, - mater.material_name, - mst.receive_date, - mst.input_optname, - mst.source_type, - mst.create_mode, - mst.receive_type, - mst.stor_id, - mst.stor_name, - mst.remark, - mst.dtl_num, - mst.total_qty, - proc.vbillcode, - ext.standard_weight, - (dtl.receive_qty - dtl.instor_qty) AS surplus_qty, - SUBSTR(proc.vbillcode,1,6) AS order_code_1, - SUBSTR(proc.vbillcode,8,10) AS order_code_2, - sheetMst.inspection_id AS is_no + MAX( dtl.receivedtl_id ) AS receivedtl_id, + MAX( dtl.receive_id ) AS receive_id, + MAX( dtl.receive_code ) AS receive_code, + MAX( dtl.seq_no ) AS seq_no, + MAX( dtl.source_billdtl_id ) AS source_billdtl_id, + MAX( dtl.source_bill_type ) AS source_bill_type, + MAX( dtl.source_bill_code ) AS source_bill_code, + MAX( dtl.source_bill_table ) AS source_bill_table, + MAX( dtl.material_id ) AS material_id, + MAX( dtl.pcsn ) AS pcsn, + MAX( dtl.qty_unit_id ) AS qty_unit_id, + MAX( dtl.qty_unit_name ) AS qty_unit_name, + MAX( dtl.receive_qty ) AS receive_qty, + MAX( dtl.instor_qty ) AS instor_qty, + MAX( dtl.STATUS ) AS STATUS, + MAX( supp.supp_name ) AS supp_name, + MAX( mater.material_code ) AS material_code, + MAX( mater.material_name ) AS material_name, + MAX( mst.receive_date ) AS receive_date, + MAX( mst.input_optname ) AS input_optname, + MAX( mst.source_type ) AS source_type, + MAX( mst.create_mode ) AS create_mode, + MAX( mst.receive_type ) AS receive_type, + MAX( mst.stor_id ) AS stor_id, + MAX( mst.stor_name ) AS stor_name, + MAX( mst.remark ) AS remark, + MAX( mst.dtl_num ) AS dtl_num, + MAX( mst.total_qty ) AS total_qty, + MAX( proc.vbillcode ) AS vbillcode, + MAX( ext.standard_weight ) AS standard_weight, + MAX( sheetMst.inspection_id ) AS is_no, + MAX(dtl.receive_qty) - MAX(dtl.instor_qty) AS surplus_qty, + SUBSTR(MAX(proc.vbillcode), 1, 6) AS order_code_1, + SUBSTR(MAX(proc.vbillcode), 8, 10) AS order_code_2 FROM PCS_RC_ReceiveDtl dtl LEFT JOIN pcs_rc_receivemst mst ON mst.receive_id = dtl.receive_id LEFT JOIN MD_ME_MaterialBase mater ON mater.material_id = dtl.material_id - LEFT JOIN PCS_IF_PurchaseOrderProc proc ON proc.id = dtl.source_billdtl_id + INNER JOIN PCS_IF_PurchaseOrderProc proc ON proc.id = dtl.source_billdtl_id LEFT JOIN MD_CS_SUPPLIERBASE supp ON proc.vend_id = supp.ext_id LEFT JOIN MD_ME_StockMaterialExt ext ON mater.material_id = ext.material_id LEFT JOIN QL_TEST_InspectionSheetDtl sheetDtl ON dtl.material_id = sheetDtl.material_id AND dtl.pcsn = sheetDtl.pcsn @@ -84,6 +99,10 @@ WHERE mst.is_delete = '0' + OPTION 输入.receive_type <> "" + mst.receive_type = 输入.receive_type + ENDOPTION + OPTION 输入.dept_id <> "" mst.sysdeptid = 输入.dept_id ENDOPTION @@ -129,6 +148,105 @@ OPTION 输入.use_dept_id <> "" proc.use_dept_id = 输入.use_dept_id ENDOPTION + group by dtl.receive_code + UNION + SELECT + MAX( dtl.receivedtl_id ) AS receivedtl_id, + MAX( dtl.receive_id ) AS receive_id, + MAX( dtl.receive_code ) AS receive_code, + MAX( dtl.seq_no ) AS seq_no, + MAX( dtl.source_billdtl_id ) AS source_billdtl_id, + MAX( dtl.source_bill_type ) AS source_bill_type, + MAX( dtl.source_bill_code ) AS source_bill_code, + MAX( dtl.source_bill_table ) AS source_bill_table, + MAX( dtl.material_id ) AS material_id, + MAX( dtl.pcsn ) AS pcsn, + MAX( dtl.qty_unit_id ) AS qty_unit_id, + MAX( dtl.qty_unit_name ) AS qty_unit_name, + MAX( dtl.receive_qty ) AS receive_qty, + MAX( dtl.instor_qty ) AS instor_qty, + MAX( dtl.STATUS ) AS STATUS, + MAX( supp.supp_name ) AS supp_name, + MAX( mater.material_code ) AS material_code, + MAX( mater.material_name ) AS material_name, + MAX( mst.receive_date ) AS receive_date, + MAX( mst.input_optname ) AS input_optname, + MAX( mst.source_type ) AS source_type, + MAX( mst.create_mode ) AS create_mode, + MAX( mst.receive_type ) AS receive_type, + MAX( mst.stor_id ) AS stor_id, + MAX( mst.stor_name ) AS stor_name, + MAX( mst.remark ) AS remark, + MAX( mst.dtl_num ) AS dtl_num, + MAX( mst.total_qty ) AS total_qty, + MAX( proc.vbillcode ) AS vbillcode, + MAX( ext.standard_weight ) AS standard_weight, + MAX( sheetMst.inspection_id ) AS is_no, + MAX(dtl.receive_qty) - MAX(dtl.instor_qty) AS surplus_qty, + SUBSTR(MAX(proc.vbillcode), 1, 6) AS order_code_1, + SUBSTR(MAX(proc.vbillcode), 8, 10) AS order_code_2 + FROM + PCS_RC_ReceiveDtl dtl + LEFT JOIN pcs_rc_receivemst mst ON mst.receive_id = dtl.receive_id + LEFT JOIN MD_ME_MaterialBase mater ON mater.material_id = dtl.material_id + INNER JOIN pcs_if_otheriosinproc proc ON proc.id = dtl.source_billdtl_id + LEFT JOIN MD_CS_SUPPLIERBASE supp ON proc.vdef2 = supp.ext_id + LEFT JOIN MD_ME_StockMaterialExt ext ON mater.material_id = ext.material_id + LEFT JOIN QL_TEST_InspectionSheetDtl sheetDtl ON dtl.material_id = sheetDtl.material_id AND dtl.pcsn = sheetDtl.pcsn + LEFT JOIN QL_TEST_InspectionSheetMst sheetMst ON sheetMst.inspection_id = sheetDtl.inspection_id and sheetMst.is_delete = '0' + WHERE + mst.is_delete = '0' + + OPTION 输入.receive_type <> "" + mst.receive_type = 输入.receive_type + ENDOPTION + + OPTION 输入.dept_id <> "" + mst.sysdeptid = 输入.dept_id + ENDOPTION + + OPTION 输入.begin_time <> "" + mst.receive_date >= 输入.begin_time + ENDOPTION + + OPTION 输入.end_time <> "" + mst.receive_date <= 输入.end_time + ENDOPTION + + OPTION 输入.vbillcode <> "" + proc.vbillcode = 输入.vbillcode + ENDOPTION + + OPTION 输入.receive_code <> "" + dtl.receive_code = 输入.receive_code + ENDOPTION + + OPTION 输入.material_code <> "" + ( mater.material_code like "%" 输入.material_code "%" or + mater.material_name like "%" 输入.material_code "%") + ENDOPTION + + OPTION 输入.pcsn <> "" + dtl.pcsn like 输入.pcsn + ENDOPTION + + OPTION 输入.supp_code <> "" + ( supp.supp_code like "%" 输入.supp_code "%" or + supp.supp_name like "%" 输入.supp_code "%") + ENDOPTION + + OPTION 输入.status <> "" + dtl.status in 输入.status + ENDOPTION + + OPTION 输入.purchase_organize <> "" + proc.pk_org = 输入.purchase_organize + ENDOPTION + + OPTION 输入.use_dept_id <> "" + proc.pk_org_v = 输入.use_dept_id + ENDOPTION + group by dtl.receive_code ENDSELECT ENDPAGEQUERY diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pcs/wql/QPCS_RC_RECEIVEMST02.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pcs/wql/QPCS_RC_RECEIVEMST02.wql index 22d199e4..25a32bb3 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pcs/wql/QPCS_RC_RECEIVEMST02.wql +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pcs/wql/QPCS_RC_RECEIVEMST02.wql @@ -116,6 +116,76 @@ ENDPAGEQUERY ENDIF + IF 输入.flag = "11" + PAGEQUERY + SELECT + oder.id, + oder.id AS source_billdtl_id, + oder.vbillcode, + mater.material_id, + '1' AS qty_unit_id, + oder.input_time, + oder.crowno, + oder.nnum AS qty, + oder.proc_status, + oder.input_optname, + oder.update_optname, + oder.update_time, + '' AS contract_no, + '' AS price, + '' AS price_tax, + supp.supp_id, + supp.supp_name, + supp.supp_code, + oder.vbatchcode AS old_pcsn, + oder.vbatchcode AS pcsn, + mater.material_code, + mater.material_name, + dtl.receive_qty AS sum_qty, + dtl.instor_qty, + '千克\公斤' AS qty_unit_name + FROM + pcs_if_otheriosinproc oder + LEFT JOIN MD_CS_SUPPLIERBASE supp ON oder.vdef2 = supp.ext_id + LEFT JOIN MD_ME_MaterialBase mater ON oder.cmaterialoid = mater.ext_id + LEFT JOIN ( + SELECT + sum(a.receive_qty) AS receive_qty, + sum(a.instor_qty) AS instor_qty, + max(a.source_billdtl_id) AS source_billdtl_id, + max(a.receive_id) AS receive_id + FROM + PCS_RC_ReceiveDtl a + LEFT JOIN pcs_if_otheriosinproc p ON a.source_billdtl_id = p.id + AND a.source_bill_code = p.vbillcode + GROUP BY + a.source_billdtl_id + ) AS dtl ON dtl.source_billdtl_id = oder.id + LEFT JOIN PCS_RC_ReceiveMst mst ON mst.receive_id = dtl.receive_id + WHERE + oder.proc_status <> '09' + AND oder.dr = '0' + OPTION 输入.begin_time <> "" + oder.input_time >= 输入.begin_time + ENDOPTION + OPTION 输入.end_time <> "" + oder.input_time <= 输入.end_time + ENDOPTION + OPTION 输入.classIds <> "" + mater.material_type_id in 输入.classIds + ENDOPTION + OPTION 输入.receive_code <> "" + oder.vbillcode = 输入.receive_code + ENDOPTION + OPTION 输入.material_code <> "" + (mater.material_code like "%" 输入.material_code "%" or + mater.material_name like "%" 输入.material_code "%") + ENDOPTION + + ENDSELECT + ENDPAGEQUERY + ENDIF + IF 输入.flag = "2" PAGEQUERY SELECT @@ -131,10 +201,32 @@ FROM PCS_RC_ReceiveDtl dtl LEFT JOIN PCS_RC_ReceiveMst mst ON mst.receive_id = dtl.receive_id - LEFT JOIN PCS_IF_PurchaseOrderProc der ON dtl.source_billdtl_id = der.id + INNER JOIN PCS_IF_PurchaseOrderProc der ON dtl.source_billdtl_id = der.id LEFT JOIN MD_CS_SUPPLIERBASE supp ON der.VEND_ID = supp.ext_id LEFT JOIN md_me_materialbase mater ON dtl.material_id = mater.material_id LEFT JOIN md_pb_measureunit unit ON mater.base_unit_id = unit.measure_unit_id + WHERE + dtl.receive_code = 输入.receive_code + AND dtl.receive_id = 输入.receive_id + AND der.dr = '0' + UNION + SELECT + dtl.*, + supp.supp_id, + supp.supp_name, + der.vbillcode AS VBILLCODE, + der.nnum AS QTY, + der.id, + mater.material_code, + mater.material_name, + unit.unit_name AS qty_unit_name + FROM + PCS_RC_ReceiveDtl dtl + LEFT JOIN PCS_RC_ReceiveMst mst ON mst.receive_id = dtl.receive_id + INNER JOIN pcs_if_otheriosinproc der ON dtl.source_billdtl_id = der.id + LEFT JOIN MD_CS_SUPPLIERBASE supp ON der.vdef2 = supp.ext_id + LEFT JOIN md_me_materialbase mater ON dtl.material_id = mater.material_id + LEFT JOIN md_pb_measureunit unit ON mater.base_unit_id = unit.measure_unit_id WHERE dtl.receive_code = 输入.receive_code AND dtl.receive_id = 输入.receive_id diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pcs/wql/pcs.xls b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pcs/wql/pcs.xls index 78b47d5fc30809ed1069358f044991a9ddb26094..eea13cbd33664914ec5d9b83504c35d5eab9cac0 100644 GIT binary patch literal 264192 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 literal 239616 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�f!23ZI+pjKVMi28yOUiYRNLpu~O7y z|3VENqz3G$5e=|oO3ADZ4Gk>~wV|P*p*8SSVM9x1ZL|evDhyKQn;Pnv8ahf1b)cap zc1$Y`{E@^B*o~!A?4z}p>Oh0@8vAIQlVwbbmB5A|SsiNEM*`=uW0!I`3l)ux8}riQLk16MWUuy;Xuo~xSi z#u_UXEE+jdA+A)YD}@y?<6=_-N3<+MH>sh4)Uei+*+6Qz#7a@arB;d>>}%9ur<@u% z9;SxwQUg~}Nm7T%!hh9U4|E4P4!g;|!ei5|`=X zjjOE`%dp!@(M#7@DSF9HQNtcwqXyO?%g|Gnp$RlJHm)`EHIW*wvr^RXFDu0|TyLdV z20KL!dvT2#hzOQJY2a#d6XOOmAD0-L8aG<0VA0ID$x4N|QlWUh?akJ;Fww%e1u1GE zzF3A{vJB0nhFeX}W>Uj#R*D*Kw^Gz#r>Nl$>l!uOiPU=-*K`RMh{Dd+rzQhA;z`F} zH~jHc;(9Fd<7FUB(pWti$U%{M@g@!>Kv!OtNx%+hEG10>axkM_)Xho2kx%@;GXWSR zMg@%u(i_b5XW2KJ=?TDsPp5WsI;E8BE%?ZG^;Wj@f0PEDSuX6&hpsJnb z1YjM7aswZ|aLR|TI5!V2QsP+rrMhD1vR$9f}!C0~Dt zyYN4^A`oML1iaPi7x7iuxZC8U7b+Xxx8kIpDz1s1D#ksaQ6Ifk#kki>1tWEzl?p-X zek&D<)IKW}hSURADjcZ?tyBb34_T>5q#j1&B-)|GP#=*j(*sG;)@`rrk)`hzjD|jf8&Vh{bLs-q8zdEL`+s)w&uHeFRtZEV?t$+Oz0?ibqWzMwGv-cSXl6`rp`erNgNq{uYl} zsUV~tw^G4Kq1QG8ZwOLPS}FX7yLieyAnQkS6v)r4+OQsBNcMCRNHf4l+WJH)UYD*cM z%T_WtkG)B}V#d1Pji-qg8`N$ zPRd{x7>ZrNe7Y`W1WV6p-&Hhu8>JJ?oLLUTos*lVlF8FV@^EgLJcdz8zEvGWnLN!T z4`+7+d2stG?Mje5oSzNk;S4KnZz*{=!x|o-ixG@GiL!j0BUR<&{HWJ1MmF*$NqL;@ z4AjX;N1kNK!}-cU9!5U$q(~mlI0o`C5|XE_Z#z30gAD2h?8I8$xe%8P}3P0<>P=1!>Znra}m2|foXIda|d{_;(r~Zl`|SfTH9@#{yD^o%i4(r^ja)wY+_CXF}~M!LMD zX&lygX>#Q6;gh$_9-6$B@z5k{jfql+9wf6X7akhBW-m?NcYFBQrF!jS7wXN+F4Ie6 z7wM(3OZ3v%1$t@h>bx{|ZC;w35%Tz+-ICY$?0&rEV0YuCv3v2-*qwN3>^8hKb`xIv z*e!Tz>;}9vhJ7!MVcw}j57>{2H*jIU2mzoBakP~8zcGj{f1k@9D3-SaZ0`Bi?U#&* z;vi^53efC8 zh%FKyny6rJUW5Z=3L`-x7>|iyEGJ^v<6kH)LW;NVJlA!hNymzVoHyPtel_sydZaFN zz019Su6sZsi=!(dOKpq{mdN@TNur07M#sb_ND)08B~CTzA)pVo=%Gj{{xIA&a(qBk z;m3f=QFY!$XoV_{&xtCv8J5$AMdDMWi4sm79uuD-rKS`$s(9CNOti7+8dV{B!wE>!w$3+;~D^zg;`54{`Rh&Rpv5J$&cC6wWu8LKmE>!Uj zw@{R$>Rj*h+~rfK;v4}{r8d2DE~`jYxJ`n5K*4NV5mzBGV#q!bA@jnP!^w5Ns>eqxEpas_RX9 z7`7;JT*V%f`%E-FLOg&+QgOUh71T)3?RRB)=fIgQ+M$j^aFJ@d_zG#-!G)?t;%lTR zmkU+O4lYtnx6mD7*}8?nvLgqV%&#~3ok*@!V(a1DGQD}sv=@orkfu&9YtIqCTd80iU+4U~x)y?{ zrh5n;`Cq%G?B4wuXq;pgp@J{}OF2339@ z5K?kuQ2y`mIBZSVcEq6k$__@(7-`2GpUBB|3hGn`dbk9?2pd_HPVSDKBNuq-^QxB4 zs#2%+c~z_IRb4vS5Aq?;?r2TlaUBGA3kH1=62x`M@^t}s{5ii;YF&UmuDve64H^a3 zx&Sw6*y{p3nq{vG@MxC3E>Ht#wATfAG|OHWr~yRU>jE_}ZnD<}YM@2h>jE`^QhQyX z21X6`xHuJ&0ZI%QNAv49?XrXu>$A$8AsK+0JjX;>jFIXXRizJ zfuHueKuw_6UKgkd^s03MKGM^^f2|4RmXAWuuc)Y3oVfB&WQlb4o!n?vB=ovKEg;KY z7vOPEb#GG(sIuqUY5`U1-li5%rAI}-8nwz%bsoegZ>v%9iX&8_O05fUPnf+fz$3o) zx&V*(Dpc`!ue~n7oL65 zok|@GRXoyd$ErFOs`%UNHmdk2=<*rda~nf}rBkTl{xzaXtqXA5v%N0Bqx|-|03YtA zVpXg}m0lN!wNMr7LRD-zs?OUUkUJoWDzz@ajq>)o03Y9AuM6-&@oH|oE>LC9?$rgV zu9verb%82-U7#*drRmOffx5o4KHPOlJJh-WH{;vu0({7Wy)M9qJSaQ(fCqbBfDd?3 z`s!JBaMq`uw8L-4kGndlGfs{vxw+q77vN(b>~#S?&|c}RFLmlU`udj6`YxUIOVr6- zqtw|*>f~VodtHDJg0R;G8bGI77ia*T_PRg==v3udeXdiAu~)R0=!2~>qk?J% z?GG9gG{StZlh09|FGd9Md8$lpkQ9F|eON_!cCg0-t6o|oA6jD{S`!~yQy*G0A6j!C zT7sk{W0qEk)p!6DZEhiH=_XB`9%w0P?$ZOUByFO}H%jJB^r5x(p(QzJ`cwe-B6&|O zBukpMPuY?pX>MEEN}Ai|R3BP9A6k1KS_dCmM;{vJ$A#y_LuVga7av+zA6hpbT6Z5> z4-GY6P8Xb*quosaJOzL8n^XYJ|CDdv%LH*mS+)t=8h%W@(37-D)iDz}9g&e&C~I zrsL2m0E3m5#+Dt8U3N6K>}YJ2UGZx>8oTUh>}v<(1np2OUVPw;y~@T1&e*GLO)NW_ zNIUe3PZP_ICa^=#C)LD(wvtxa7>B4+t!(iTH1;YRA3{Yg=&}*-(5qI%nxg#nDqBWAm93d& zM>ER~j<=dgJG?7iY-`O;oo(gVr@7RrSJ|3NoyFi_UGfK5R9W~7qTg97o6Rkq&0RX1 zm#CBRo8?rGx=Vo012_h%@Rk6b2XMey=}dsm;}VAn(0KskAWaX&UJaH%0Xn}o_hI~M zBtYj6SQ9=V-)H6jzhZ5+{CzHaK;4UT1VB`&#~Zc)s!re_wL(=3pb9_BXQHZwg{l@n z)tA;T^%g+#ml9PifT~BWwel7~l|mbT{_X&dN^^bqw9x{s*m)x2TpweWmro&$<4Ph; zJ?63{kai45;}z0c0%^x^kX*&7mO$E95>YLIv#LOM8-__b01`CqeH|COrZi)gX)eu95TFL9DWOrllZW**nux5U=c=X(<^0+B?(uTT1rMv=qd9duLjTYiC-DYiC-DYiC-D zYiC+Y`OdWSVBJfNZaDwRo>uKlYYX%i$%plF11$ynBX>EaCwKJ_P zkZZ5Yw*_*`cczsVL(au(3R#>*C$dC3v6KpAEye@t)u=61BC8fs90R8!E~?eFREerw zWKwjEs#F)MQp-_w9>gba%TTD|It)>zcBZwHsH$zEs+~kt9TQdUEL62~p{kt~tJ=9x z)vg>>=PjzZl1EgjooVeQs$xx4wU?->Yoe;Xg{t;0RJFHI)n1}X?LPR`XkU)1^A=TH z3nr@6&a@5^ReWAL`@;?rRrO6&b+Ay?!G)?07OFb9P}QLvRp%|LxSN2eQajT+N>nv4 zQPokRs-cOhjuxsqx=_{8LRCi>syddV>byl2=W2;6wa>7VL{*%Ls!kGB@g}M|S*Ysd zLRBXVRh?X@>Qs)Z^A=Uy(L_|Kour*5sv4Q7>MT*!*hE!l3ss#Zszx9e?*ThosOl_H z#oaZ0YFX!URGqh|;+{C7s*#*o=ps?o#6(pWiK?b1s=8RH>LO9K)Jukzk`pX+Hgv%p=IM3veN-c_QinTe{d5>?GjRCTpb)m5TOpCjpNp{lD3Rb9(b zb>7A*?#m^r)IQp75>*K%s=7&3wJ=fD%|cZ-i7LH%-pxW)Hy5h9m80ssMHP2;6IE)b zba#oWmL{sYOH{QoQPtf-Rd-jc>TaQ`y9-s_%TaaSqKan&h$^)gzK29rqKT>=5>>5D zRQ0e>)x#C5dRVCH;X+l9a#WqSsN(4oqDq}?NRy~aGEtQ#QH7s@k@tFO7OK)Ds`NTw znuV$~7pl_AQFUITia!b!hiT9m=4m?nJl%+(X?Ux%bsIzl&nY~88c%=n%vw5-DLm(} zdiv0M`Otd%(E9k$`ufl=@S*kdq4k%viD)5snLiadz=t-_hc?KEHdxa5oI)X zVd+Bel1O(&$8;+?rn{nJdUQOQNcsiK<=_Rqd@5V^s$$#l3=hG}jBrQqN52_AJull%<)yG0s9~ZLvl=p<^EwXq=M`WpU&V41a zx|&$(E0NXBj8}cFc-7a1s=gMg`npin*9TSQCr!_F52#*{a{@$_I@5fCL{)baRToH9 z^)OL&0Z_G6-XmV%Le&KpsxEM$>H?r@F`iY=^UD|F|MK(8=Q^TTK831&CaTo=<$e-X zX(p=rNmQkqsOo2-svl5gKXtR8g{pooRP~dn`neoc=lD5zcUw`Y;=Ckdl{$&uU!tm~ ziK_k*RlQ79^|w&fU!qDsf1$sHs{RgC)fD|Ds$P(&($88@r{6j6NuBB>`T*#(pA$3y zI_>8K4S-JjIY9%U*M3gW0O(cE2^s*s_H%*;K(BhX&H&eQf(GD(<@JuYvW4@lv_+jz zA1H0n&j}hRZTSmVdB-wP+QRv~fzl5BoS=c09Rn>pcoKi0w8QT?L7dN}&MtD_(;%r+ zKPPCA)LCrm9AxPnBz5Y&1cNM{gIqcX`Re59cg`1=eDa-F-1l?ksdLW*>YOuI366^1 zXx02(mLWi2`RVs_ude@ji4-chPGp~c&j2dy)9)FGN%raY48$b+^m_*4l70F;198bd z{hoo?WS@S|Ky0#4zh}5kzh}5kzh@xE+Na+$T&LeNT&LeNT&LeNT&LeN%1^(a2QgiZ zVz{Eo9#x%w9}4u^=iP?_z0MS8i1g|Ap+K*F`h6(St9BC)1#<1v??Zvy^4-M$JffT% zoC;Z77bmjR>GxqkmVNqtm_(L7{XPtFQJsDtCQ+r=NrqXd8sGy1jDt-Dr+d@^g3su<` zs*nkf_q9-$#_A>byl2cexW)>h$|ai7I{ieWXN{KK(w@Le)r# zDt-EWq=l-HE>w*yN7Z?YDxQ-ds?_QCQ4&@9^!q4@Dt-EWl!dBM5>@*2`zQ-lqg<#O zRgS9j7F9fHLsY5L@1rHE^y&A}5>@*2`)CVQqa~{JiuGsxxxlEmVzlp=xY7s?J+f@w_NerB1((lc>_C-^WQ*>C^AyEL4q?sM70z<1AE- zbD?TnIjYWERPn?yQKe1|kC&*@r-sK%ROwU0<1JK;ccE&$g{tu`RE;l3)p?65o>?cV z)T!YK5>@)t@C1n}eQJ1ug{lb>Rr=KM1PfIYT&S8*j;iw(RqV%zDs^f&SE5Rv8qSrd z(x--VC93qP;apd|$_292so`7~vT`M|%1;e@_lum{Y5vlBAMqrP;mwf0u+Cpv*T1%| ze_Q=OJ^e*J1%}UnnFw?W&of{q`Oqf&(DHm}Q+#Ook~R@*N_d&iaVhYjv84#l@4grL z(D*C7UcPCP=6;ULbO+yRL;cqJ3?JG|AKEMjP1`(M($Zx)RvQ!LuM$oKjdrWk+Y@CA z*Qd89$`-CqZ%?%Pjft*)W1`i%C%Rhq#PZgC-u4@8fkc%$y*){yN}t}IBvGYLZ%=ad z8|hmL#gw>Fp^JRr>Vy6p5;IjKz4)bc%(lDL|EddV7k6swpm1O_8W7KfPUg zEu3pt6{>hQLR6{K+xZez`t)|bM3p|hoo}HkU!qE%-p;pBmG3}RO`OzYtnxd(&AT1y zRHwHKq|QFTE>A`mNS%F6Bo|mZ3uJuMyP*m!odr^-+GSo7xl7VXef(3Wv4+iXE&*Hn$)RJsZWzS^(pmfmd!feUYWlQdFw&dwnOP&r?+5O;jt0hmjS~C01>9Qpg z`P0#&eij2DXTPY5R3svq{k$CY+y~B`(2gF`jv26Hj;LtbF+-xel9h6{?isMz)By?i2Tmee(Sq&MWgNpPaLyEosu0nbMXhQ~OM5OJ$@e zcc#_SX1ZGUOv{d$mK|)}GtHJ3sFQO-)R``I&XPK-m^x=kozbSwSS!`bgHwIv!U}sp?i+m(5X)7&UWbh)tC*P z(sA~Uaw@-(G zLBc4;E4Yt9`+*c_6k*ZgiKy4ZpIvQ;urMJi2Gz6pxgOj!T!=po7-Dp2kQmS^2v0bG z5IprD2=-Nx-(&DUPWd6S{CWG2Zw;9|ERE|ghG;42t>ph}BxN;t^s8wQ%}+Ki!j)%3 zXg;IW#gcoi{J$Bv3*_rWT64$u1WU?SX)PSz_rfKSu*#6{ATcUvR8XpXy`82%|3CJ= z1wO8#-hXzpNj9%GeTTNt)3jwb(589xky1)GuaZI^p$#-3(oLH!2~Crbq>v)mEfk2L z5c1?B%Z#C~Eayul2z-Ua$85{m#red(LLJ4?u-Bn@{%q z&ToG+^P8FP{N_F55?}P5j(<~&kfM9q=h7nbiLe`=OO5=V1fRpn97$C2$*>!Y$%5f+sT|DqO@0azPnJ*tJ2%gD8#g)I39)# zQ+-^pbCFYhT(F*zQ+-ft;q7JkOx(F(IXlEF)|(f<{n&a-!8ty!T5tAKeO!)HeOSNU zFaE=l%)lEG8aACvt;_6^nFiER@`WA~&!OO-7yB1;5_r38tr)f!6) z5?O2T#vV6YmZ~S3AW_9WgyNg1N`O6#oE4QYimH>qK1G)#Wv|!}B&yV@J|2mxwHj3( ziK{JRTg^6o3h>on%@d~pU)v<^Qh=|I%b6F>&!zxhpAerE58%H+ z{=J~*ggK(iaI)Dx_9PlG3T*Nd;Vb(Ksg5vHb(oPk z;TLt79Oq}4>ggXvh7=eXcg`(P4|Uo^I`pU$HChkOgVl*mT90(A{gDnm>cnoXM>_OS?UHm^o;iBY zR&Ba0&!e@(iPj@Ja(q;)ma|htl{#%AL!x`LMiu8+8$_)}RfdJ`42f=YS7e4&iZdj- zi7KKy1E~6xM0W;ijBkq&{2{tCfbNIIBjP*qZ%~&q&WKSDbw0ru=+P*)Xg$V2k4AC1 z)?*CxP;11-K#xY;nW(}W13gT>xu%Ted<^tB$5m(f<;9wodacVC=+Y-1#XtXkq;=s; z9CcB<+Q&kdW^sjf&$;Hv8aK>}+eR$LLZ8Tp#aQU0`jBHCrERP%ZKHk2Bct;~`&E@T z&gT+YYG-?FkCS0G=rFlvq8X#V%I|R!%`7wHB$Ca3>o^O^;~YpHCy_i_Z=7gY zJ#u^$lDXo5s8ai$#{*S$Vw*dV!U>kWn&7Zk6D(9saG+|!sJ%LAQN@){M3vfaI}xaA z6jy3gO_Zo=(Wshe)w~lOHSa{L=AG!Mc_+rLd1=iUrrL=)Ng}ybhdD`x*=D`jZR8|} zjhtkmd6EOolSXaiNsDH#&m*$bZp_IN&D%AWCQD>prO`auLi1z?nkQRmo-EOV?sHzj!Xj^rPg{o5|s?0IlQ!G@SB2i_IYMmlc#Xj;W7}ffw_z3*r zOvou1Ng7>m^1;W?vBy9mjVs%UG_?nJDv;J9uGL7J3Z%7)>on4)S~c-hAnnuQbhx7Z znhK<;on%viw9mkvsr64&fwbkWk6M0t(PG^x(Ka4#QXu&~@tFL3MUV7wMLl&n#Dhfy`N%Y0&4h)~w7l=+h;~ZKpw>E~yXooCbY9r}CBE?mh^UDV#(=~9;)bm-HiF1xKayDrlmx=gopneNbKx~0o>l)~?e8?`Re zN9e*^p1FfyySNH}{N9eg&x<`Dm>Sn^RYvJ|ngVL&KlhDn7B@+>c-*G}mGO3i)QZvl zAjfVCKd6!l6*GW}$bOI+Kt*If$PC!3$Suz^V8bK(L1w^KMfQWtfUSz`2blqT71<9m z1NJJiA7ln>R%AcO4A`v5evlbxSwwDmp5fRJGQ+VSWQOCG=NYiOk^LYuM)!k!VC?%l zFFWd-$l4`5Cvvj;ad}2$qx`}*XWb20VKwV+zye3s*c!0F zqx+iPxvlwNx>S9%nHpJYU(-y9EOW=)Oo=RW$J|Ug8esN|W}<$Ntml|%A#0`sSu;nG zbrRII(fC)$VqHj^rS>*uOJtcl=CUQS%pG&t5?QoY*%DRej=5|LRoMSMa@nhUS9$LW?Hr$dh~SnI}5xAZvO(u3>nPPgK&dQ*{g zcRn4aS|jh1VcxF8^vN*q&|&(lFnx|NeO8!0D@?}SXT_c85jBfX!ym@oC*yAF@v0t) zWxt7WS8L||&||Ck1>Tu*mjp@&Bw2lV?L+ExN2Xd;HIE#QzM0+bzRALx#)v zGyl&(xOXGodu@LzuIzI%T(z?LOd0OybVxjn>T2&+hSnFtrVDd3XvJ<|&JOh>q9 z#toPKT867uQqM)W?cxhMq`3%phxj7i==WTt@ij6|a}nm1D8nW{QQV{X_CC~Hg!z@I z(@&$%GaP+C(NaLw9vm4Vs??hJc@kA$(x{pzQT1hws(BWw<~dL`4@g$1ng=ASo;myd z^CYU^wM5)JShT0bUGR&us`Fq)o)OQA0etgs|LETdo&pMO9CIVu)SC5NpzTUw&fn(( zZISu=T%b+uY08yoGw1Jffi^V`lxv}lHZK=w`~l*ec8hQ{c3f@D zxnYjvj?N9+k$>{hY8H^=_a716vgYx)^I&tXjr;c>C*jz{$!0SYDma64o!|^H`%C#i z#Ye@9)|(q|gVtLDB)NM*NqX?xkF2*u{PvRdmV~#Lt+!+0Ewxi3sQ_)MowD!Ged7ga zOWg}O``^iCB~HHhDr9lSn#fXfYK0P6=4@@DM3y;QTZk5V1X+a+WEEP-Ds&*La1>c5 zfsKkTI|^A`_dsN+Ikg26S>|l*0*NehwswI;mN{Fyz=5m<7P1yNkhNeGStl*BxO#@j zQuAsHC9=%f+JzEX=4|aki7d9A7D`l^v$YE?R4sI%YT+oVPFhrP{S{HA=G7JfRo7ed zD~o`t8^l+18*33zwcA>CzsO;)76DoRF56g(EM&3mwFt=S(R{DiC%!8Cr+;!SLeJoO z+48y`&+E}E82vl3Q$W>@T-isosTtM95^V?ZPFuBDqV3msBXSl?v?)GY^QH}345aPW z@=4-rR%?E-MB2VlRGm~MNui2sLy0OiKVBqJ^&5?>3ljzZ?S_)L%B)(?7C5W3Xd$rVI zua*K?_sRCvQXuO-xk8DETMA@-UGu#_*nRMeE2WmACI7tbPpux}?h5LnRxO<^5&m@@ z`q>iU_gimv+j+J_m$NODpDj_YPWc#iojr>3lM3Hzq)nlmdvu5_wJvR$MAkPnmX=9m zeG_j)>@v%CE|aJ-dl1VkR4sF$YS}2NPFhrPmlsi`Rvn%rQT2dE)j5tD`5X&X=QwKQ zb1YPyW1)&DJV&C6_53-Q8+}gn!dI>hI|p`ibml2~4E;oYSN3bUMw(iQxEx5kUOcFg zwj4;iL3~TwujN)>b-6^ExxRHdkfz4kmIG<3ugaB(%Yn2W_^w7%mIH13#6ucw%SXrC zPO^Ti+Fd;v)nx;APIK=xcTac7UDdolxgCEOxf`*Mnmeeu`&vmgN=eFp9DA*~&zifd z1B6x7ZrS1(ypk9^?uCeUTV~@8>7B~uHlDcyd4-K<%AFg7R}q7^G6wHF$x}D_4(Z!* zH=t}p-vV15gLiQZ-X$@3ABw@dG>XUa8h|dWbJS_d0ci=ott~-7T7rkQB?wrSAmFeB z0m~8u9F`zpS%SyK|F{Cu5{!Qn>uH^RHE%MjkZ#W zw(o1Sm0D;kb)c=(LR+Z=ZKV#hl}fZduF+OHinfyyZEUX+ZR-5(GKsb)G}_7}+WIxx z$}F^%InY*Sp{>k98^;IAB-&VumPw@T(MT%;(teJeV*~i+-{{`46Fmh~Ey`XHk)}>v zFPBJrQX{QgBJC-Sv~mk+uC_KZf`3JYy39B5l%p>2hQHqLLakZ9XCYQs({%dKn}M`(yDb=Lm55>?M? zRGlkPHK0*-u7#>|9jH3jLe;qzs%XQ`wQLwiHqMncY_yg<(Q8I~{1n1C-baL~bN4GG z!hWC;Rv{6#Pa~|tLRf_ZVHFm_DjW!_a3HK=6k#Wo{UXv7!Z>gZoa-%sQe zQ2EZa2q$tZN8=Wq0xI9R-X!{$(f1QM1-RbpbkQ?Mh=6Mo)^+jk3jAN>-h{tK+@~?@ zGXKtTj~9=iw*guF%bO7Jyw#hDe-Qdpi+;zcIBh3^N1I}W6b>&1<^CMsQhtF;yb`qF z7;zf@1P*M?!yliQd#B)E|BQ!QxDMl!fN8YU2v3<#$bjcG7FrBdihc7Zj{@JP05j<0h&jr|&d>xLSUVy{&3h-Ql|59wI zxl~l*^0Ou!yVoLWaCoZ$|LbwUYY3O1T?&aN@V4Q*G3uAqklHL=w&K?% z@z)@^H3+F*>eK2-(y1|0s|X<$I?~8Yk$H%jq9ZA2{$@|DeCWxP$~&giij^j7kv3bT z<{`wMDcyt^Tq^AReB{lg$k}RWRgN^tm2^46jOAlFmN0Hc8Z))%G8ftz@Nbj20^H3q zCsrZEO$d#-vBQy0kKyp!k*F$!ACZ)>Q^%H01yT!pI&FXkjle+@j?5*J)EnjIj`+tfz`!31Yx_fwKs7A>y77TgCVm;lCtKTrY%nA(S-Yd=*OZ#ds>4RVJ}pBl%4zo3wG4iYi$O znn6X%auL!Y4;*4366ah9_?5Do0w@OAE=8 z+X#vlxxr>uTo^1gEo6br{l&=lQltazN)i5u*?CBr#h{24)^dv=NvpFEn8`!_u@o%^ zZwVyIBx+cbI8))BqlPtWIk2K)WyUFjmE(!65L3#D1|j<8Hx$RPsXOxLaicXd9wHOn zE-@MZS)ixlIUWC}x!J%ue3(x8{kN63e%J*n)`t@6gLaXmlQ3}WVIwH&<5HS9zT00( z#zlH;VTAD4hIF2YlrBQbFP7gdp9_)4hY#ntopOf{AK)Gmei+eVG`0>O&H_B@0EJeu z0RU*h+3lO~Y{HY?($GbFyVxDy&Edn}d|d`06Gs%HDR=m=U5h2s+rk*$E^%nP1n!>K zUgc5SkzN%@uh^W6)^MrAs{(lSpD!q_Dq?%JNP4v}hF8lRUM+%Ge`rx&1tVUK7bb*F zLzFK)Tol8@`DlBOlstF+6dV0LSYA3(c{*VG@t?C#65*WJ|hTG@R& z%MbkRwl7R0k7j1^*k}6|Uh|*lf9aO-fBf0gKdm?U%L{(zyY=nj^80_5`m^buzif}m z|K?2-e-nCh#>y}IPHVeh`ByJ9`BV2M&iK>Uo?ZRLPn`dyZ&Y5_Yw{oXQ|LF5Zhxq(@7$2MBkvPmF!_8|Lg%o=@<&`(i6qzkva5Q%@PsqP zVVIW2nr)#(PkH<1P(%34ph)msR8susH-jS4v!T8*f6< z`JrzGg@;ZSePfoU7Jm~|DtVPHO;?0Aw>|zu5JtbXt+uHlbVrc%+AUk^H-{!|52A8d zy?#Yg%eL0iv3Ln1c@q-Fy3m&L+WNMeJdpLQuM36R3V$;-C{pClF0rxvs+xxFHEp4+ z{|JhSp3FTj>k8o0; zoc!r8a3V}61!urXx~HnHzI8)W%hpXzO#K^_RsHZ~`gM7zt*oZ4rfNrX=v2rid1^Pcfj+C8!PepzzRg)46fRGFFq7F; zOU@79V&2rZHf{aytAZkvNw%q}q^TWIud8XiJk(ng6ceoE+PJc@zOBBdq5hiC!p-!f zzOgpc{(IzNh84z2vMRO`1uacif9ypPjoY{V?{|Y3xhUS;R)1BZ$H6MTwA-cEwt@s!~R==AHPLJ3v=+ADAu>_Xb3&s48_Hk zZStk8rK!2B>FUN+^{s79+mKwM1Oe5SHZ^SD*7$!&loY|Ar0RdZKq?YyXlR}K36d89 zQlYobhx(qne>nm%3lw55+7T3Ewe;GS8WbRif9Bp1;tQ4dulk87 z<$2kr0?7XP!V$7XO7`M*=C+buy#t~LXN?eDqD1R^i6QOny0Z1%pB*7ts3cbaF&Ji{z#05({m2S#|YSa~s!M=*@~I&fifceUge3EN z+G;j6gkTImh73>fY^iSu)o#R(UxbBod#&q13MPcsq-g}15kHbB|q z*@VJ5m_jN9>eom)kEeD0l??~xOX|vo{13xMfp=v?!DS{@xY48*1VJTuU~Yeg8X-Lr zi`KT5Gw+fPQBo=fscb8AOPoqFBr`6XB~Y0HS@`FyVZOn@)~=(?8Tc67i*-#`x899n z;1N~GmB8cAvkpJ`DO6@_0lWhS*-d>+FBAHk?Y5uSM%Y2erc$9&W%C`XkS;GN^R96eltH;xw- zz(onZIiyf3f9D8N5k`dQR|z=fc;hG$=P61dRgQo9MR`(my+~60=ExF9&x`TvVn~(X zx9fDyPV<^l=xtgGdY0ohfU| znNRa~`@1Q-!eruU`WuLfH}imE!QIs{;}_h0NgV#Aarl?T+XA(@xdsh^)cg< zKJHp~rW~GB@i60V32Nd<=@i@Fu)FRb;_q&E|GV@zHeNd1S@^+>=Q~LUUG!v%Mbh`< z?&f#tZ|wB#bPv2se^YIl9MShqw~_Sj(!p-;BmRET-Tp59g>&l@@wdP|_%8j$p)}Sf z;_o%?ZbamG@!&^`#>9?UchU1t!^ZPde?yd=&~~)~?v!12+HJSZ?(+A*?)x0}!L&bt z-S@}ge=`ohHxB<>arobk!+#_Wzb_8|yK(r=`Xmys$KuF89*5r_lb=5BqwWp>{&@3q zSYv?hZd6$)zmJxmSpe1hBR}6?`4-&m%s2LrnV^B)vGXmk`}vsp8QdM!e$oDUaW}a$#~gpYb?Llj@YftizV*S~ z`=fjg#>97E_xr2d2BOOC(ev{b_t4nm&(AuI0p{n;$B~~MaQFVm&zDZn{Jh=WKkoSR zvk0R-%u9aO+4B=^8GhomhbYhd4DNo#k)CFK5#0T19R7X>KhpnnwwogS*W$?kG!Fmg zari@V_)dEl(cjswiSV86pa}oXnEnTLKk48{%H>;e_`i(FPapSbclU(j&)=-^k^H?t zWvTrB^l1J%(m9fk|Em1$a)&1!fBp_@Ot3tzAI)E^g)ql^-f!ji^A_HiP0TNTY*{AB zXx@H}3G%P736GZF_gDV9!+$^A#c_7z5%a1OG{**lc=AIYKk7|jJBbi;@bBK`9LF8d z?&udk%9Y(+mUKtHAAR4+kl<*y`6+^3H{CF7lQwM&-|4r>w?9ok=%eD3W0$bg<}b?C z>-Iq!)1za3{vAh@+~pBrFP8S{kEVIbs>#o@(G{AWjb~8ODtsy^!tv=dAj@H&l3nST z<`tq(y7h9$jp(=012$StO@z52M@3oeQu6zyjFXSnlo%p^m)DD$SI*{vPABbUl?xg@ z8*Jo}bS5VDM4qOpL#3vfq19TRbWqV=^nyhl>2M0gW#&*H`roc)NOx+tq`AB{;SVKbfAHnr2venx<%xqGebCMa!@% z6pcmANOMio&!Co}Kg~9ocF>+(URmhE^Wtwz> zZ@TT3GG0t*0oyjZ-$oDE=s_F3U(&X+1APqmGZceQ{{>3~WSHh&MJI5Pgr78YTZ2c1 zrYD2$(lmO4qF2ddxePF=`5;X^yJ!anm5hsVJg8}wFF7#{{~1;$hS(Vv={!Xfy$*jW z$=~Ib{?uuCOGc+*Sjk|SKlIczF~A{w`d@*^ejDFlMj`H$&(pNT3~9(?dR{bZK5ba1 zO{T|2_i1_RKcH!lF)>4b4r;fQmy`24{S6FHQy=C_fHZXAN7_U1{h&F74H-`^9?dqo z+eQ!CXz5v$-J{z)2BQ55+UQOj-A_8oE%W`5mLV;uVw9dNgPGBMyUY>j0Nip|*Y2lT zcB-TJb{Wz#?;vBAqh`tjGfeY#(563~+8@ey+2nhayod6=Hu(W9Pn-|h(lPZmAU`WT>1eTvABN)xgI_%hvAlA+yJgErkZ+hp36jE9e~O{P;aQqasm zd_kLj_L2__kl&|huPn2gPx_#Z&tX`~Gk>!{n>rZeN9hlag@5|*hm09+K>I^}g`#D+ zLCt5l?KXa=<}=(L&}O*3%MewR0aI2qD3ZPy`9 zQ=XtR{m-PJO`jvt^d}4Q*}4tmr(2}$8F=JLe^kB%ZFIYh?$k8xYLBE-A~rLu-1aLz zt**`suZMPizs;Xv8=aYfAGKS*rYRpF4c%DmgPLaC>omO^bi1Oxvq58>9p$|&M}9@8 z(QUv+S7@64SK9c^Ho9HYYakOQZEr6jof+1k;$zDc+B}-R1au{aMVbCpc=RforPabD z(-|AYrOa7)a0rd^=it$<=|@2KX}Sn>Glu3Ua|IqfnqC2#!!zI$6{f9Dy9#uW{9WEO zy4@cw6D3d8GcgPh<&T%yV<-sMfb437#$C(80mI-J5< z*vyLv4YzsV_iB04Lz*U*GSQ8OpVEK7qEo*MR*|N!2R*FmPl66l=2r@#YNngiA(P!Q zyAHd&Nz^%ue66!z(Nex+qC*W%B{p(mvU>*J3*Nq@Xb1?SIN*D z>5o~z^eKN_Oxu1b<8`rk4BF^}Hd>BtgjIVxi{l)2TLC_kBTw>`Kb1DR&PIndJqGe! znx-M^vC+LYx=+*8tzXg(8|9+g{p6!9M0!ZmEaV3@y&Lqfrir~UL1))rx1)N<2L|X* zzl|QS(StU6zoHXmxSG%WJ*eqy&_y$ppXcBa)HG$fHBFgAnkJsJ417U{0z4`-%|}?% z_k!-$G;MgrOngE9JUqghrvHPQJ{`2dKp?|Mg{B!+v!)qVx26ry`!#(H=wX{o`z$cv z&t-V@YI-i{OeQM$%+r8OV27=6(T-Irz6+!S&q3{$X;`OdY0sM#ofH5+tod%x{hD6_ zdceldoC5~x0_u=OI?Cpp1(sjQcx70MmSw+L$;*CsyW-2btW)tv)MbN8M%HCRTAsQE znAlo}3et8RoU{kOn(5$Sy;iN^&Z7f1gUfjrzBZ4@|Vdyp#34l4{4g|nMuVVLpzYA z=w#-5k)ovyuTZqqtyL4bUB$rf83i9@O;N;16q>Zi`r$;E#bvP}8gn!kT6}^eH-J4d?;Q zm-%=m7`wbFG9MK!>+W{asCW3${e4+qgcYAo%{(G$%E&sRL;0iHBuYM#r@Pb`S2y@( z9nqs?BL3LJwb5qX(X0HIbw{6ct8D&&jUKYm!%uJOivgGxr(VJ%NT1BLi9 z?J#L)`^p23l@~0E)mmQKNhNPDFS1SEtz=}Id_d9Z)o{CC^BHa)GisMNgK1c#XqoYy zik5wcF4Fe80BJ?H-HIR4&7P0PLL{4~={{qHqNS~_ z)_m$#r|2Z&yjj!C>t01m{rgGV_0;xxU?gA44{Lu`z!~&FoihrOg~rZtWNlbi5yY(`F7S8IcM8 zLC~gc93~%SihS(hfu72yW!h-JjSgsfJVdKCJrQ)Xq-||oZ6`ZyZhLHWzm49nY1+v{ zq_v&QT%u^&$t+FNPWm-XJK3x0EYSNEEz9yDP1Da|8$XK~rOUga=`~>aNh6PFTiO*r zk@abZ=F6}&y$<~Sn!W^d-co$QZ51A!igx53%j`idLuXmce8>}@)tY_;beE=?1eME_ z%oTWaXqxyLR5P)kBI-FM&LEzA;>BKPwb1$2ux){4Pby_EI-# zV8FnmN6|?jO*=33A5i>=4)%PEVUq_(%FDWGKlwX^= zTFFH8fuFPCtet%La~dAqN=A;2^ees`8yQlxwAF_+-wk=}7o=M`HsaMZ^Q%bF()L!6 zw(F*Cb>&FDln-lvro&l>rni9ZQSvxm3pSYr1@WrjL({Bg1~i=u8hak4jI`UNO}njV zWw(_~0>x!rZ*M!ne~YinNWXHc?6z{7Xp>QP8+^-dD;dil({3MBe3#9wwBd&&U)gYJ z7_>dlVk9)3r)ie23QaTbf|4F-!^1YW-8Q<};KsX;A6`*2Xv%C>8oVGY~(S#=XlcU-HJ>ux)%b${wBebGmbSfu zv@?&S4wYKoi=Ts$)MMI)qNQyN zYntiMLHa1Ry-Ul}wht)zM3APvm9~9I$w=GoU5g(vj!m3oDO%e0W<_UIg5PfA4=7sN z_CeB!qk+eMMJItY!;<L4112N4^k;b&B>9OI@1Jv>l4!b~5+} zl}sWZ;sX4m{d^A|m5NsFThj5;(5?@3V0|Gctn7RzE#scW#BnjQoGu%cyLyz6DSku=oxMdnDpln;;(+s^u;Ldn?k zD~ah}7tKfhHiAE(__7`;qVWKq^+;ILxuE+r&HOq@TGu0a7fM>zBh93p>Cfm|_Q9fc zJ<_h+%6cTM+}g1u>yb|I&3dFu$8-H1#~B>4~6+6`jO5 zW^TY2xylQ-*{IcGuRJ7E;leAL@X)C%EKN-K8_9xvBdO*3&q(6rgEyrW?E(T+l zcMSC`Qncg;HO;!Lj&xX>Nz2d2!P>877J%+zp>dAKre6xypyD%0EVm3R??d>4z2y(p zr0xF4r)517)NW}{+HG`~qUGAcKFyalgmgHCX2UEC=@tzgCgWv5$!9RFhO|Ev@-h;; zyyKZu?qZl8-GyIG7a}DI%PU!hBSRPXz^kEqwhff1By=116`?U+L^GH zq5g*yE%SX?(JpE1E{l|RFKDw|XM%?Ra=AbjX>*N)jSgs9roW92+UPnP-E5=VZFJa1 zci8Ao8{K82yEV=7(xd4t(ET=<{iIP&!*~p7ntBE|;tPD1$2vvJG8@)>rd6j+rpqSN zYm@2MeEKtB;}4N`mMOIkP|HvU5yU@qAcno9o$|6==aG-}r+kH`S*|NJJr#7frq2Q0 zuV|USIGK5bpKJqo$p=>bcoZpGmgS)4Gw$7rmSwre#vjx)%kqBG_VR`Cz@LIuu}SjN z@NJb-mTUiJ$+y>!=`COd6<;QaZoj27P4<(o*Z1O#V}?c3YnD4%e!b))E-V*@rcVPM zP_!(+LCt5p>PXvlw$r-&HY<5qemk^3EML8fp1|_kule*dD}=9IURiz(May#Cu4q|) z!-|&Ww?oq`zdf3!{|B`^%kQwJna=(#_|oG8U5b|Z+pTC>etSTh^>r`#XiMGpLtYdlL^>ls%&ax@Xa;KK@ z;^!Vs&j#H)QeKwj{YplbZ zL&~iz*O>$nu+4O+RJ5GNuD0>Rn&zWJ(~pB5)-=m+-&TA@)yp)ghZNrn($azHP}zVl zgv%e=N!!a>d|H<4uy)I`+-0Nt6fMj3e$8jRhDgWrQmn(y%6Ns14r*HFi;WK3=nfm*X`{PrbhnM}vC+LY zy3a=UYno+zK+`PaLpGUV(z?FJ{V0;Ao?%V1Y<4JGmho=QXBzg}Wcq9}gEpBV&8I&H zZG3Sh1F`j;bvxWkKJ=juhNg*a|44aR#w(SKEaP>WUIY1NO|!o4*Yr7{hZHUI-C$+t z)IpYUKl#9LE*{m2mgTxb^BMO6MUSO!gEsy!X?wYVKP=KXBtDui>+WX7A5nK#wn_OU zIyLKPdflP;Odg9*9dP#zb(ZDSPdY~3ou_1E-Cdz+miIcF+YZf_<&m^KE_Pa%@h&AV z%XqK$CmqiAD_Yjw2Q{C52Cl-FuDdG~E$i-XMaweYqi9*ido|56KB#H>pLw|LnovKGO5jFCO0e%%Odcz4Xwt zU;FOU?T|fy|JkDNFOUC>GEcnOKQ#Em@BWZ9sqZ}ez5PFV^^q6o5`y^L>E)J3>i@Qf zyV&^TvLQYVJnzSEKC#aIs7MgCn+k*>&T}V>qmY>zrbGvoquMy5&aT{JVhHJGv$t5zmnt9kJ9n< z3qmjIR~=8k9XR^^!C2TzW2b3PxgP~i9hgH%5_RP;`|^eJ^^w0%+k+1{p1eE z`++l`Sm8c^WzFM+Dtq64`Qg_Vz4Xu%_w9R3my>F@sXwk-a~mS)o+&orzt+w2!4L6A z{v7aKVkYh)FvJ#jNuUmI{2UN&jK~@*w;0X?&XNBh&p+r1Z8>Ywadze1%Ov+JOya=SOjw zA8xU(G$Kp?CtD}m7v$_XQZDAu4+Fuj|R-do&$(TKb|Lrf7r`So{SeBuwUKD_T)!#WAyc=cf=F7r{zw*VE& z-x6CqIm#O0y%3q~d!*S|G`G{UwqW4ECxE~yR^{E%`d-%1N zzSs9Z&%eF*31zocJlYWNEaavHfQ}#aXp`|%deL9?egJw-66z#<9Jz1!6>iQn@^hFR zvOJB~<>|4PU)gWgEcXK!K5>Z*YmBU)Sl>MNmsegJ9HhJZg$KW1Dt}KCEIA7X2W83O zuS#E^xD0u9DayGEX?2OMoXind!G6rdoi;4@N#f7=opSEDat8cj+|HEs5YzrxP;Y8&Q zddeDAxvPum&I5NhX?OkFok!HR)UpSJ&z+wBxbAMz?mFP^P7jZDrCz!2lE5bkE%}l0 z*ZyXTAN=n_KNx)SmH%Pe@8#b;{ubTw*jBo0VEyEZ*jrV@I@7f{aJ#ObBJv4>cGzsu zM9Y6#%d>tSLQJU7emt43TA!cy?X~M8_lh60K3&JD&*yFWRBC;=yZ%m(f!tR56>0rE zqVLD8SJ=JNGbsIg z6!!4K_2mZZ1g8J}A_J}99%z|{_62iuru4bi#n4r|qz>b32QWV672of9@V6=-*=`A2 z{8#_{*#AZNT^9c*KYe&_gx{D866vGqwB+_dW4r#Sei0wx?Qt zH_Pu1e5;S@53GUxcL_gi%>6p0%^rjys*wj~yUJN#(8{t`!nEc0kz|vQFQ;1aN0vMl z7UERYMf{i{#B<>jy;5TpelOzT7I!~>qpXip(WX`H*>B1E%_r`|bG$J4nOnJTTcyY2GFCqE7~EV7i*2FY~vC8gPY~v6)v^`OnBPwzM>DGg^1F)^FODi-){} zr`5Q+E(D!VN! z1NJ(IR)}_uwrH#{90_9Be55@d>C&`^Y!9xH{yZsdo7rBdMSEZ%o&G;2?UvcESK+~8 z^CLr{+M1)y1T0H#PAg3$JgkOr-&d{&Zo0U%GbHg{#;2Bs!jvd_&|I8!F1z zl}q!5swCR`oN+dcGbZ1%@{jtTC(5hKOO4j%jkQ!TO4$*<9YI;cV4f;%(}Yb~84GF~ zDQhG3z%}<;j~d)gcXTxv*0*H}Ok-Hbkb=jm6LEGBt+#&#zS(x99bni@BW1^E2a>^$ zT~3JaHC8E9?jIFc3A<)(m9gf+RjVX^=_mc+$zJjNQP?&_e+;_@|H{f&6koWiDq`E> z`(^4*J3;%#_PnxhsS$sCrVTifKdSWF{bT;{L@W9mknMLb>IO%9&r;Rr%a-HES&*Z< zOsz)*iL{nXW!85djF1`*kI)XVYBH669LI>Aem?Pt^hdQ)A92qX`(QQMqOCkX(pqLX z$r#nLnuX2=Vm8xBwT&Zo=6-3DXbsqkmhneV47Hxl)7VyxV++a!V;Aw4F@7AH(jOQz z_(NPo+S{>X7qNV@{zDI(;WKtQhCMYSA*$a!_c3)H9xUi zFa}zBE7!znIBhH|t}1pmon?5%B2IjCSet7a8VpQAh1x@#x3`7-s(I^d7*g+fNARb7 zO&OX{QH?7dUq9T%PEe$0nX_%j_CO#W{uqcI^Jf~_0q48bg))2k90Oq4W@)}3-w`yh zhGf4r(l)cxl(&x+5Rc6X3YT?wMsTUxVH}sM1fSzEoY%P1(=GehM5f&*_UnsMh=Z}P zcFysJN{jCtZ>Y2Q&hZ9Ln9`r<@dlm%cK|jv-nar!f@AwRdR&30!X3bwVbS9XLz2(& z2985S#ubLaf7_FpiYUtY9X}|>kEgux$y43<f(l+S>L(9i=B?K{7`l@3GTn&v*(_p`@z<1l6ZJ85gzRy^IrLv zEXvADR~4@-ca%@NomO(_KfxSUm9D*TO%;iyN0FZbdEFPisCXUCw(h(i#a*H(DTm>Y zA*J+K4}axny=r7jh1jEqPHQ6?%9b}qC)aJ1H*lA)*NtO!ANQK#)#ZlScdtBuqimU~ zcK&n$yKfZ3{K>ZWMkQ+K;Q*$(lEWxdPV6*LdQLO-WPjdFIQHk+osSVaGe0nLr#>q2 z&O$@JcvV&TI^B=AX^I|Gaaoz+ir(9V@7cSFO^Qx@%lT zz+%G6mQ%5@;?xf*Xzsf!w=SAE=En|AEk#tK8Fiyp&O z-Wvqb$Xr(%MQVun<0W0w1j1s7{Ydv%<0f*ZUx#MM@Jvg0LYW9!J-m8jj{JtRTbM}d1_fIpB?`8+p?^EN3N9*qrkMwo6c)^_j zlyHTJ&!GQ}-)+1?%xBOgtt&cr_d;9U|{ZyW0Nq>}XM=HsxpC4_HRC`5*WAC?C zNPmyN-^x=wRenw|| zJ8{wRjD!Q*!X8@;%dGryiTRG-M*5`k4K=&^Am0!(BU+Am!u*{nlo(Vy<~XSygbg1$ zR^ZtBdL~ws99k`mS6n@g6t7smGGExYiHtv+eL%B6YIk)%`dsE5bv!=Hw7oyddW9#+ znq1Rg%CT2r@6{f^@4EcMe_8(Zvss2`;yTjrtp=a{-by_0^mL%Nr`8dgy7|!uXFt%u z_;{>-Z;{1!_Io*=uH>El-a5^X?)QczKYqWrOa4Bx-^)|CWA%G^a<-ahclLXSz{l*o z{N`4Zw>^G*tB%s4DC(4 zp||MC?`Ulz{a22ZMLzNTQxcf$9uY6vKc;cIuupPFhZnKS?AOJe+#cb3#N7;=yO@*O zG2IgBO26~q{=J&irsYz-*vahe#+c8hM5Mof{8v(und}(aDm_n;da@rgViG%sn@Ie! zr8^x(Rf%#E%h8Q-YURR_ijkP0O}#W$u9@j4M@Hej`ozYGnzWAX3;l80W2Pa?sC_=T zZw%#P^=oDeGi*NNgl{lD4CP2IBy&WG^%76QSLyC-m&Eg5%_JUM2&|6|W<=s+@Bgs> zLOZ0iefRyKFv5x74>I>{Q17FK73l^2E9UL`P&+X{j;H_g&zZMFzk0*UstT*`;yZ>} zH`Nw*_KZ-@;F1`W^FOGW75>o9bog%~`S^N9LiQ|ZHC20v?GNHGsGrqVctksi(75abl(#{d%k(Mo9f2c_M%lIGPJRYwvQSqHCXrIhaY&(L1M0|3v zC@tDnM(X7pVfw*mJb&aAo3!GQ+9p}(*|ib%g}uMQ`c!`6O{v9kZN^jfXOE%360aY2 zzg$lf_=nA(*;Cd|vs~GGC#rk|FaySNQY6<6nE4;+HyGfv-;jmp0hBGho>#8%zS9$s zZEBWtyWi|b?8h&$`VogLzOx_Um3Ex-ZO(p#q50AMh$6|Kgz=mQf2&sOs(GwR$&cT^ z;O#N7=G9a^GICz6OUjR&SL+4;ZO?%G9+Ka~_*S1t|KdbmugkXYzj~c+q9gy!`8n0T zh^+GEdpdgWYK8A0${*($9m_Q0tnc;wgVy(YaO!N#)eG7*$wxfX7v06N&8{o_F@Ep$ z`d<1>e~)i{uSdMQ^}QbP?$-BuKA`J+J@0URFLu#5ajo%0D8=a-y{q-T9`RnR?flkdby;=v8LL&E=9E`r$?>Vg>$ZB(_TdSeX-Z>66eR#U-P;s z7puR9dY>QJHer2w^d1@8!+kPb+Ek2l@^hT)ciW|VrB8H!D}MjT+^uzNy|G9SiK)c+ zuhRY4FAARK%vQgFKgK$KZ%fT1zSH%)oe1as*-v`+>k^5BUK~xLaQyE5ll>p~M}MpF zJb>2K(bhTUL5}YHQeLk6{_SHgbMMoGeLuO!%y;4x^Gu~{F?)d(0W#-(0xe^i_p#Sh zb2VX_C8>IX5&!HhRdbwzcHx7vo^lw+k{nyVY-E4WJ}=cP{W06&swES9r4L)(YK15B zw_S&S^!1eIVLj!$SR!dyxsE|L1Gg$OPubJt-aQpJ=3AYJx15m1O@HFGa7NcpM%D}; z_xeeDNwU*%`hREX{vV#v^&Zzt^0o!p|HBjefH7(qd)}xAzr^bA^;>*re{a9VclP%V zX?}En&nx$rWn%yAcV2zs&F{SW;BTGlG7b5A{C;1N-k%n|o{~3q#+p~Ell+nWzA*T2 zd%EN|Z}>zX5Z~%^a`gLNl65|9^uNCUH`lAm646wr%9xa_T&Cp`!q-Uaqstj z9B=V@FZ*$a3e5KVJL|{wO82q*ajG?Vt{<#GIRA`(A??jSqhHvLbDd6veqpSc zGp^XP_m|k-@5nQ8c6|HlV)<{*ow47S2Y>0mAJ1dyFAB)f-SB)>udEkO4?glD*WwHw zeCa;6)ld!9ZfdS+X{+aERb$f*qpqg4&R<`fW3dC)b3j1ZX(X@8yU3n=Sbr+^hvF>dXG~Jhvu4iIKFvQ-YBZ(QIEDC@|<_se^GI`4Qp!#4B>Y#(uxa|4kfu#rKI<<@%T& zDgR%P{crpqq8m4VV>zYW?ZEGD7hA3_d{dWKZRc!023el9soIh8Y8;<<%ZiTyn&WsQ z&t>{4{CP{R3vtRs?3;FJov#$}DfanFj{-UZZVD?x5jm0o-NW|Q1TqbKJtj`Nd4lwiPmoj`mudAa60v4JW~-*^L)Bk(keb( zQhq2ZUE+_l)4pRR6F#)}OoxQH@roTP%h@{V14bB}XCR@FHCaa_sS}a5w}x6aVs38Z z=B9@2+ZxRik<{Bp`@u*@(?-=yZ1FydQx4SfQ90@7@P)BD(tgUHBApHKQ>2$#S8CL6 zaV{)v;}NmZF{dlW+gc-p(G_{H7I#zDG_-|U)R|6(6*}g*aNLM$IUPBbiO!!(|5Xaa zpCR*!H>I4iGdzEX=g-ADerJ=wj2*6oQ~gEr7nZ2TjrKid_WfiwASE?S;`)qM!5HKGVB5O7Szl^LIkFEg{+PedE_&^|FdQ?)k^;feD* zQA@KNF^?iHS$`LekKNv=wD`{UMjiNc7uL@%{p{7x0sS1(&td({oS@wK^)sNK)p*8g zZ!}B($o57D_(xjf|0vE(fRT;6u-|E69z}ZCq+>QloG#ercqi?RI>Su+V{2~|N%{Eg zjV%1`cF}UV@clt+Z^YW0VzxGzPVc_GF?<^RdH=RIs-=F%-rn#_`G0nMV--t>n$a*D z@<%;^(b?d5r!9?%W=ms}-3MAe)yl{+ce1o?iaNoOGLbdNIO#hlC(7#jV7CQ6@4P)S zOQnmMHrj5CY?DOvaPDz=C#@6{&+kP$#oUKswnfa9L~6bM@w8Jqv?UYK%AK6Z+1OJ0KF48ae)3c3uZ0(dzDIdR`(v06fxb2jG z{J2QvWYex6d0d32+ne(!s$CO*jAOR=gPZ3Rnj>H%+f(t~I?J#Ry&W|^(gQr(#z*vd z`LU$6{gd+l?DoouIzEz*iJ|vqd<3Hg+nQ?Yx9m8Eaj3|61KZKZ)9x7a4<8@NLQU~O z8XsZ5S?T+a86WY&f7Y+q0;Iz^TD#-q8Xw_22-9Z>PqsVudh=SlALgkh~>w>yUM zORRQBChWH2JKG(8@Y(JN=x4QlHtT1Hes=3;pMDPN=Ry6%RGkqXR+sj;bJYjh-}HC+WjE#sA20l4|(R`k3c8t8k9iUil!8lek3SI7UjCF5LgmXC9txukfBKwpR>1 zdDAcV|MMw?>(IlZxUH?Fe$)0g5i%|+*@&A~KrAz|FKi8omK9Ac+w!wBvQtyTB{i+? zaNb8mVNqV*!n~qLmbii)oLNMVV{FE3hB zRyeOz6qFatTToD1Am)`6EGn3{s6ebJDl8~2UA(|svgo>u+H)J4HtnuyaNWATxn{Gg z$yia-&>Bj=rL-l08+K|oHB6dO8Ey&5nHiB(wz5{dQq{6Oqoh38-rUq0a*Y|6S0zH* znj0`bSC$!SslV#Z@uk~a4c=9B&8=l+^UheMzjo6zZDCh(V6IUcPI}JMo0E}h2vNMEzQgy4 za}#TyOY2B$ZQ8mf{plN$>vttBGxACkN?ih%u4dzS`Ru3qcki9U>r4u93GpcTe&jA+na=m~zvSTeHej2P(w$Y~vs{6rVRa zf7RqY8M_xG6G3`R6B<%NtjBJ?mM+i;n7_O~{z#Di;l|S-i&h{~AI& zXMJ>*=R>d0y63FdXC3ao{n=SJr!Aj7b5=;;JMo5`*}uq^H_5%8efa0uH|%&K`-yDV z)>~I>NxLii^~CHq#9i5Udv4F(aaVS@>F{0IZ+`Z!?7Ol%vqSiK&-9%k{5&)9mh6KK zM*W=IjKk-DXzoV?ufO39wY?z{dw%gi!U6I0*Vk{~gxik9woOeXP3;96!=-gKjhBb~ z-Mgn}q}C*NC+tb|J@mFPFVvm>#2?Oms3v*NUpKC73}bm~O+)=PZzkNZZo}q!d3ES- zs;2F6-MDJy>#pv`mZqyeby`B>_HAdmGE(oVEB;j7GGme9J8=28g?W|k7xz6@lYWO+ z%+5$%c=43^o|&HJONs-RUlrPbYo51mYHHe=E7V zFs?*AIftT zPn)sl;u~i-C%<~?ovGQ|LRq-?_U`N_T-h7SR-AvA>-QPi>q>XIe4ksMkbS{juEKHI z6}P+oR_!g^;4R(ogQNjh^Cvr9;fz!tubYjMS%-^E-2KUF9wVD`N+=BwSnsfG7cy5?=Oi3 zSLOaa@fT@@zf0qvQU2@1!rvwOdVjQj><@%_`)gQV|GIK);j@{Y2%}{7pIrsHU;kg% z&91^vxP0!1LY?>28vZ-{xX<+hZ|P$dxWV}FgRxLk7xfr@U62mQa9A)*7q8>6&g$Zmn7%p2Gq5knMre9 z{i*8SPUFzo=NQ>F{?4RDj|?W>wW}*QvnjDDu|BaNXLI7=!2HC-w{BdX_*(e`srRNX zPyFwVPwkkWI6twi`&%!~e{C%2jjQk3M$Y`irgN^I`Ge1m9Ufc!+@{3*oZpR|h`G%$4*L_v^??8zqn-Vq@+m;mM3~AQT(r0ZcUw3IA6czCjNcV8Hov#nkVK>yg&>s zn&rCfj|CTqY}cVY46WA`{iRSCzD>Watb1|Fk3(Ne{#)}M`8OqB6CSE=`TCjRz-qA# zr@NJGZ)+1xjro6jSZpk9sNcNRpCe#SKz&PEn3jANPLagi9VgRc*$*z z>&n*qUSByaXT{%A9;4CydqSXcZB+JNoZE?qUR>A+~Rs> zZlSuAO`v*{cQS{|vkltEaLPOq(3L`1F3!(C)3>VNKL0OLa@Y5NqOPr`W!Kca>~T2>tA;|2m$%go zt-T2|@=txmeQRQAQ}d4W@w?AXezWJl#;4vdZ!Z?@tguk=2;QNGDq+*1HdGQ7?mgcU zmp!{JA$7c~mRE6R8>y#1v$UY}a&A1$CW2?z;XdhTo6t7)3p-D2=F~6{QjNw6%U^vAlJ6QA60(J(Tm-TZT8=xVO0flEX>< z`tIN4g@1^ryy_&h!Mv)Ooe8D^7D=pSs4CgBxvD*Vp=QPJ1H#+v#UsV&rA{f9D!L7-KyN zp1tFF3!^ZvVLT^it!J&LZOV@_7kZcZ`_uXugyx6YJn2|Lr= zjd}Cb5&38PeXi^$UDxM!C;D=3H!>eFHjmrV)Kc%B5_)WR&3D{Y-CJ;L;uzoSX?xRh zGkG?Ck`Z1zVWPYg@er?3n4gv4Id$SX*SO!0#jz-VJRPS+2IZZHFYRq=XuEFDX}M2~ z`Q7A%fkQ2E*I>W8Y;bH!ZTfeXdcQj%FX8mUOD4_qH=S~L zv*(J8ed3Mg@%8iF_ay9o=Y$wcomA`RdI}Gis84f7**{UtBxa z_<7-JTbCvedVZHU_i*C;>zZa=cR2CN7xKSv+>kLY2Gq5E zi*GS9Ytb&w{_-;8@-DO&2gMsR{Mk?5BeLfjt4eEHLsvhrbL`EBu37lX*p#}q6l3Y& zYjK3E3h+SrQ>OJ8(r^SYKm}O+j;wh4LC}u{~q} zo&M}JF>%)ZMc#&-?2J^m;S#DT_!Uo9S`tiw_^i(toLG?K`jjv6k}dV2)P{K_g=sU{ zjPDPje-X-0Do;uocgsSwQ^f`p%W$?b!@Fx;?kkmnX`Oy$LwM%RiQzBd$d^pss2A?V zwG6_%Q7^2o)Dvm=u`LvS3^(ct^GZEo-l-?dOZ8AYsypGv?egGKJy!y5YG__n?wjlS zy!SG($k-L0tS-~LVNAjepA_lp7QH@PqZeKh@MoNovuiw>kMg$IO$&v2H{GkXyXJj7 z&*;fBO1_$w|HoJI9`x1JiigvxD}Aozhs9OlmEqHTANp0!?y67i>3>=n%raQ)zlX$@ z$~#vkAO79XK6?1--KYGu^uu?H)047F62jt5F>~6Uoj397@Wr8M(FcJi5V^J{U2!!$_wfD-8nPujJ3x3V|{;pWz35EjlB~GH>`Aj#q$;MALpi?Y5eA@ zk9mC0oiQ~1sgEZnj;(KP-YN?3T6yZOl?!Umo|O?i3zpH{CcZG&xDXigg#5cwa$q4V z!{@`U!bE<3S-(&2x_D~J9M`Es*JIa3I46(_yWYHJ`!=Jy;*;esCC}YBkbIy2TN#I^ zzcIb=H`9$l^XLK7l`!vN%O--CQR?&^J|m#jM=wxZ{kIBZyVb@;k2B* zg4L%kANvOGd0Bc&`DC9l-#yEX<1d7HMVJ?NgoTQD&5SUw2itY7OWg}r;yT1z!Cp`N z)HUU4GfzvnvS5L>p?SP^H|X09D;hB5eP8RAmx?CcZ%EIr64&lY;c0}2c-dFwgw**j zrW@D0ewCz`TnO_bue1D5CFSh&?DSmaDPPmf`?_N~mlJ)L+FFszbu?qFvW5co$K6 zs3BlH^dQ>~LiJi(<{mbtxj*7_)!gx7##0%=ZLUBT8VKXpmY$BrLBG0^yEpYyF4w>L z4MR2#GP+#X+&!)&fz5+4d%IjMcZ~ZI8wS&#`fI0WuV?V%><92tc3!HTgHEU^9;=}HuZH;jhx3}nuBpXSf1KGpVYcDlGhstrrD6EL z?7!>$yUwpZ|L!S9@zAqlcP8viaAlvm7FB-B&y9`A^IvZM`1jW3%$zxS>fe_&{baeP z$kUr?i0(^%xwZA*JiS}*e*E#Ri4*%LU2(WScX#fmX3fm(_Jmy(lV(m@p6S}K*^^L` z^x$BgXLbGawf=LHcY2NN7VoA_ud2#Cm^v>|*gT`xpFh`l)^kU~yur|2#pA=?8&WS2 zy%)@zclToSh+n9>)P3dmcAmQP)S^?zK3_Lw+-Jm_$-Kttt``&U`okT6*fOIx;o-ek zE=>Mp+Rmh2_y2G2O#qs>*1!KVlRXd!tBMFi5E5id!Xhq6AOyt?6x3?9BtTRY0SRtZ zOITc5t)f-C7jUVqUDRr8d)r%r+TB*WSliyVptalWB3NAk%wyy*Z!m)rnZOBCD3OWTkbIa!Nl#}Oh38FGG?94bP$G1mWXvW6udREoWHlA_ z#0zsJqmz;_mC`40pokMVaiThI@L5~qOvrYfb1GYyZW5+Mid$Jo=)}dehkgq`;Zeh6 zZo@be$4_xIWX}pYW}YGU)7guZnPd{T>1H}%5%EkbzAPb8tMeT!YRF_reYQ)O(Q0D6 zQgH((yWSL&SLE$wN^*_kI{CS%PVG{vUf-cO2BRmcl}_c;eR%UTt+H*aTDNcY;m&NH zs8WfybD|t(GaY_fTxc1ynV&nEP;UaQNDQxOKbnxIn^pFqH^)7|jLXj`YjKv5MuWMb zu7yy^n>+iyg|xE4tGD+noT9TL7va1dR@qtUPaG$m*Um^JtnZs)b$(3U0QXGeef;a;lnY3DcKA++&iwwdy02O=_xLx(ff4BywQWXqbwJu zrnYS79vB52wF-1?19W9_sPmlzsNi;12y*+T=t7P=J;b=f+oJHpBysM^fz|YF-AN4% z7>TH8SQF>i18cHdn8FrDr>S&7wv^j7MFEQV?wkPeGxcd=m21#kl{Twb+*U{K7iG0} zM7$8e%+!UazAQ;i-KlGr#%M|d_e8bjn(YB+#V?Wu#x-zCbJ`arBvCpF3Kz zI^tHBq9eRLJnh5&BS$@7{@F+J&If0o$uyK_4;Fu3go(<8c}K-Mt@Ej9ZnC{nGJG7i#pB3q(wHPQnYt*TSBWuM~;pqDG^Z4m%D-%})5iXt ztzw_dW5=_JYwKJ5{^{aoyK0r~h2G9643RTy{Lvy&`OleQg(7aR?_S@ie&?cg^y?O@ z+hlFB1F}u(4z`1Rjm=2(^Ly<$x^WoNCS2c3Pj!ENyYr3)qR(t*qVBRqEe@>RB_+>i zFu_aTo!TZjAW5I!E&o;?U7sJF6V@h;$r$ZBRPoFJd)n7z=rENsoG>2~YxrF|t&^wO zE7q2(Ji3c95b833_R8WohI%DhNVa#e(bZnie39z<0rlR^H*1+pKVP*(U99mN57qUx zj{|cVdPWhFxuCnYM)RsG`Ke#1>KZ^*R~o9ew=u<^PWqJ7>S?8xs;=ux8LOB&W1+gN zwE9X_myNS(Y2B4qUBjWfw5QoO?)*w#=Froct5w_%?bXc;qOuG{y>T#_1xi_Zh}}Z}^X?LTw9}wXtS00tU5Umx=2^%-DA)i)Qr^%AHrPpuP z`TMq!3GwN-&WI<+>TZ%wX9}WWu?vH&lD0teT<7AX06%z&zuA7~d0Q-}43yf;tX0VoojPe3-b$x`O3(4lK)I7-{YL4Q_GiR za=Ibt7(SbyVBRHEN}Wvo9W8vF)HI~R*+M+iw)tjW&&m$(a?Pbv9!zp|l~miE8Pzu` zE|`Taf-5OoQz{|URgX%lw!JNwpS+D*8yQ9T3M%TS8z#<*(+p*DptD3d#50wFi=Qfv ztLwivU{pfoz>Xme*)8Oo0EEjOZ5_28^B>osL-GVdtK6*P(SrtZ5S_b>=U^wkD z;+ZX84uw$4(rV1=8taS}f7(>h!Y~mtb$ok6+|yh}z?=`F1CBmu^W%1UceD(Wt4try zId)jg-7o4GdFZ3B>^@A5t~uqIA5t52KMML_RTS%=TkxnNqnbU!7La_^@rcTXIBwL? z@1#xxF+K0QOsc_GYwqc*mqaN_q|WTw;qz)&TNBf|S4oYlZ(EV2>QcU@UCFo@X1Uxw z0=-kv6WZzm7nB5aMA4A$4X0k!FOr*vXsv@a&LP~;?j~`Nijz$;e?rvEx2yNde?7r+ zGvw`qGUOSzp4Vl_yHAJh3OX$f34f6|6fsNylUPIom^-~TuHaVb%N(Iq^IK9YBP%1J zAI`lInj}3jFxWiB-`p-UhJXpgP}Vva)jO_~N`Yf0Hcx9(9!A(9Mz5 zh>QC~G&YDk$96a0+CBK~DSn|HL7m>)?rS97`*s!tj0#n&I{J0=W3IjX(78{1k4l`C zw-D~QYQM5Ecy}@B2!1t~)3!4)$D6}#jBh}A=*C^nT^MjrIX8w){}sZNzmBA(&vCvXqH!2NXKg$2txr7ERI+H*HLA?;iD*e5J&YTePY%k?RwebuWqnUDV# zM?$u*&@!z{k9!~S&b(t-l_I-r-vLvItv|={Ud%6EKlilH*)7agpC*QSF!@S~x>qHo zWm5;Oq>4p9u_MkHLncHsfUHP7fpgP2>(~g{s52cw+XVpQSMYhw8jYzOeZgmb(#i0 zlVHM-5JP-}Y#ua1%EX506Ut_m>SXELa_aA-8etKc8h>j^JULl+3sa~?m67^_MPpXq zg?DX%t$IGmTW6_sWp9gQg3Nx}Bbk{@G=X1}PAa4+Gc7aEB~y})4tiOxImSg7uX}!Z zEH^H2wAI(bn!*nkiy7+NbO~R^kW?{i;{BW4^Yf^(@Qr;e*c_&NCD3nd&ul$vswmza z2lpir6a`o2bPpcDuw7J9s1wJQjP?Q#WIJ!taw3!iyXej!ReOFwOfNKT-T;gapmXJ8qewUdXc&KI+8*a1-H5+u-eXX z)h~!qQ-DiNs43{+q3WcHqHvi@P!t`(E`5Jge#o|lDCh|n$Il1*e%zU%ey6FT_#g** zg78jE=!v(+Te$ZA=K>P;4$O${m!^w7iKxB2!;8$Y5s9EF+OO5gH4Bz;fz(a8kJdxz%9LCq^Dws}qWLtSQLchsO_(GE!gIWOs$-laCPH)sQQw6og>bY_OEj~ZSU>ZoeH zwIi$}3>u~~TahHKijv;JYnYhZ$%CkdJlLera(i$7`#uFXHZ`<#SYGoe%ZW z=4~85IZ8HvP&0cA^{!zWW=nc*MMY(H7Bf{(oon!|ap{X{W~Wi#+P&lR*JLq8#n$bd zC2mG~Yi8`tPx=iRQP^LbzE@e!$cqEB$=?0rxro;NbSPN03V!Fj4ZLnT{s`xLPFnSv zA!-M&o?zw`^S-pMMKyL^!-mAWYQ;54byj%Os59+&Q@25MJophGPIPWV7uy}%s+_|} zxH>IWPpX&%?y0S&Y^t8J zd#WJlVd8P0$x#6zkJ+;)XXg}j?(6y)I>~vaX661Paa98}Yqbp1NMuOvO_=tALQHVN zAy9+&9X?!Mf>XB(Dkjv}<`|JjT{S*^Rt!&d*#c2b3-4Ex8?Tqnh3^bC6S=X*M%;~V zsJhVliDa{_+9Zs%MS>4G-Gimd%N63N>q|)(t+f!|W39f+o5!`eaOk)xc? zQa2p;kB5dggvOAP)la5xH;oP#xqO_ow+iYk{ZVOgMXmBjodx5T2!4qcp>bAG_3Xk7 zag)`w!j6?7jY}C>0Pu6ad?_Z(qKDU6z>wvTf-g>o7le5-RSn5W}Ei#WZlWl zvNls@WT?fDuO2Jk2*_7ur(f< zNJKX9stB4W4Q*=g#}Qd%SV18xs3K@0VsVe)|8tKj5;PGjs3K@0BUBNpe`Qcc+5LNz zQSJ}Dl+lnutv$+UV$6A}j7}dZgHAqb3U#twR2y~f{MfJco~Rw&?wZaWQ6lzpr^fZU zY}ImGeD_gaBXyj8={YZ}--9I_3!M}+|C<34S8VR=772&S(Il_o^ZNNZrcLKm-%lBD zejIA1c3#KA6J9BAcwHaUQd)6mX_qvDWJ-;y4`h~;@`Via)|1vJX-BSuD-BGkp0?9; zB~>Zr*u81n+N;SrXsxe^AJkT}qIUTd^)|))gR{Ppa1J?l!UrvDziC#7X0aynHlrER z7TQ+-3w&&{)24me<0Xl!Be?HVvjd^B{BE+zU-bWxt9?{)L19%Y<9?wEt26#Y&X(Ft z*)nOPhHFg`RMwypDR(+xqjV!)FIv}`yna@2m(pMNem~cQmSjej;`WBI+}G3Hm7MOF zy+N%(LGsQREg7uo=7!j21*z(TO&MENRE2fVSAQt;OY4xe?KrffLlzPC48v5Ne0Eo$BCRs~0X(Q@67M+|&x6enqXH9!1I!-71wwj2;=(l9%JPUo1% zdOYTEnFtb)@O=*8lOcSc14uv&P$ft}xxKucpif~^3=z5w(PmMW2zK;Z=mW7Df>4y~ z5*kWH!K@M;QZz?7k_oZNh-Y(r=LAkoJEO?Qa+dOFhqO-84rje0no~m>YRDM0KQ>W^ zzGxW7Nn}i*!9DOh8g-~{=CX;~elZh4N2f26Lr2S$wEe5G(84Nd`l zP`)(`V>Ak_VLE7V(ZHC0`dKD&RC$je(Xm{!a)vAHjp0u3jp(Q_%_~XK&*jjV+~&Mv8Xf-x z^-D#;BDR?EhH8ff&!;V5M9ev>`JP9#39MXgN54AJJ5b{U%BF@&U@yx<{ZcfIw^1dn zE=G?&#up7xWDck02TvP=(bL+8a9q309`T}#ey8)2%uyh+I-R~ktJI;7rR|Zgvxaun z35oGr_WGo6+2pU;I@UHo>o@P2Jhm*4U2H3_W54hxypvAoSS#pt-{+LkB9paIM8`s_ zIr#8svBR3WgK3E{FeF`*&Fc)Q{l-bw4ZPauLN5%CFfYtJT_Y+dg37Q}TX~hS2X)%w zD*K$Win+=XAI*sLCA;=G?~`RYTAk*)mv?f@BD2!D{SuMar_)|k+PmLYvbirPcT0{c z#~f&sM7|_pUrgxqE1isfhH*6}Oqt=cQpnT422Oqv-cIj=es;i`EX!>%SaZ+`sjPXVVX`BrZN) zQ>DubJb#08OyK&--1Mk>`JQoKR1MHuYOA~qxwZS02gKc(UIx+`k|D{E=p`E)8ynB> z5-%kCLX-6ajRCdl?xybVnii_1(wSA?N$$TXh51cNJR@{%ED9McDhry0?l8%x&F4A> z7Tq=Zu6!@!*5DI9r^Vg1;oZ$$%}t{3npcKf6w5aT)@{B7X_(T6j_ssPVB_6Sx#O*SKIgRQk)<~6=Wt=(p|LD815DB73#Imr?yzM zFS%*S>%&J$Qb$AtX*0q%E%K>rXjS?96b5o--m|%?6$Mu6NPN1+`at5K#rGW$tHnt! ztyFWXMAO2LW3`VCWYwT-YKp#vd{A8OC$p87PG*|*&HCDnPky|wLAJ>eUYO_dD@^G= z8+j}&-}}3bN4>q+4h%tuh7qdxp!Zx)zekP4bu95`n)tdJG@z5ZHPOyfd`nNSlAm<@ zykZ{Dn+HI7 zgHL@qI8C7r(pL4?n1Y&oe$Z-TeyDm>mYBbl$x!^5tl)HpfJDXKPj`Q6_y0Lo;j7@r z&dX8$@J}Q2lp-)CpX$BDK`Ze!IHdvw1P+C0P% zSl+bbB`>kyBgrf!rF<`(rBD%kpFcbL`BcZqruTbKqiOKxs}{V_stbqIqC(5*9`bRG zZEVj2BF&@ZMb#1s~~HF{Bor5#E4~(Ri9ws#x-(>tK2LynOTE#tL7q$SGAG+&f;AG zij~+B?&Jelg9V4ct_vp)ez1uOGoz)QEtfW=MOpRo<7_LeF%4v&@1TIBMMHm zCilo_uLimFLFa*$HwD>m4?4W%#-Pz&jX~vu9dNRJ-b_M&zy#A{7YVh)V~>k{ zM78YVnp&XXZiBwdUF{_huGt#UQdPP(><{q=gKk?zYiDM>W@f!1m90yg|Qs*b&I|cosAHE zoguol#mm#VA0YTzZhn5skwL9NgT)^lCZq+Dud^jX7o)2kecusf?$}7Sb4ZagOR2we zr_naVFm8G)8m)^IZ6A)1jNDgjREB z*ejcpBBb}noMvofm;7-^yw*3HQ=hxeD2Y4Q`kqzMkuI5?6eW9OkU71hJ)oFa12rWL zj6JLM%nITewnxmBMC|1I^%1@i1#KvD-ZutAXOYuAP@w64w!(BssF3`k(>4daqO|%H zi&~QOOVThx@vq{KhqtmZ+^YpFDku8us&AB8mw#Ja$*ndXnED#qJmZW{hKc+`eNIp-}%!5!nOHbl3s9_h6@ z!4NpymyYFknEf$vxV@$_(atSV3{={dp3k^uQc;^YWpLC$ak0we<9oE?G)W=rSSkq# zUj=|9^m+LKrYTr0rd}%oQOHX|BD8UE<6HQqbdxe>?&Rjv5~pSLw9#x+QAN?d$ob7h zQ3^+u)cBGtaRhg+JoFW1<{-US(&>?h`@4wmIJP;jc|p?x_|(!mRt-Prw0Kn)Zt^nx zQZ8dftqW!-gq91B9j9foQUs&kex0s4@}9`03Vo2aslTS%8njQ}Bwp{Mm+viDrO5LC zKK+Q|govA=*dL#vC~|h6&CgIIE8ciCMYfP+3|iOr^CRprg|_ytO7=up7Gomtah8{J z)*<$#E`D%3og+OXr~4b0#4Z`RH_Xf?9({e>6L&sYchBzEqxT2d>@IIZr|vr|p@MOF z$X>}_$wQLvwo`{r?LD>c!N+D#Sbav7JHYoba@VQ0Q|jxe#YM{P!smAxx3qqBH1sWB zABoSoQx5LObEnYN;O*D;cE0xwbM92$_BCCM>2A8Gk}2;#cPhWLIHXeC9(wN7H|)7n z=NB>?PvVGkr^vB$r@F*#+9BsooqFipsYe3Noyr!yNp5_Uct-UlFpW8gWH>k7qsC%@ z-x1z#@m^%&7CSu+gsSx%FS_Iv)Kn*g%2F;}3?n@R{)j1#9>0#sK^;2@jF=NT5W^*L z)?OjfLgEbdix+7;CcT$(>h<;kQ|+P+vZ-r=#j#W_HHZ-_I8*3l>6S|*^dh;$-gaCZ zx^}cvP8M?W$cp+B$ff!yQDB)~hD49wqj+apNX}#(n1oaPx4pPb~ zG$Sl(oNN{iCQjNG?EEl}gGv(ToT?y^RIiS zAF3*GoNk+Za+{Nj=VqwmT`4gU&uJV~muTbTUA#qYe`PBZ_ncT!&yal(SFZiBliJp} zj)diIHH)27cLwUkv%hPPH;y~N9r0)4+tIJhS_r?FZg8+=Ma=mVFRTj8s!4W+Rhy%{ zUye}i^0M4loaS=^-RirjSL>0K)6y4WKa_vKO*#_{S=HXumNwe9$ZIu9Ob(#@uP}HZsM3Q=B5DmSQ#0tD8rh0&#sh@ePjI= z+YZ&Os#Vw&DT6a&d(FG^AcDS3Ta}u4gT;$`Rm}DuIWLylV(FRllTOFOzt*dl&1M5HgjST; zeW&P`XDCt>U4hyS8b}eCWU$DduWEi&)|^L8GQlFtNL1vl+%kTyKW~w7=ek2Pmna*kEuyKgKBm+ksaxkVpeowh-?(K%gowazq%c!mSIP8`jh=z?_{EF z-Uh)wbBm#WpffuaLoaG3E9{+xWwXmvMEbdgvoh&S;wSk<)h_Y4Wdj}~6V(r^l&497 zntq?+M_V1Gi~WKK+8kkR+0?UOY)#NiI&cps&UEbC%-0Mz&dtp8vG}Cig{oo60j5jT z$HMx+f6Z5n=ArKyYGnP)h+b>xVuU(j-V)Kiel`U}nW2_hu%K?Bv6iW3lIWl0qFSbk z$z=9>-zuM%$drXAGJdv7??d~!YvJh)`+1H;8rPI?6s?iGm8E4J)`72+6KbWwG)tp7 zjviQ*{n5ttW5mJ&*jQb(ifD4)crtU)m(kt3*^<=SHy6G0f$ZR`87DJNc85%<5#2ht z-&+lm#j#y+ru61D?6lVs@3X(w!7i;SmDFaOJW@g=^V~2>Ha~Iaq_V<5%P?a|70e0WSo>G zpCqF@hgc3^5<$TLmc#okCRAX^VJfqF>S-nM@U33dzoqB%4dU){zV!DN7e~9t#Cknw zsnC~lFrbf$l)1AdQ9JdL0<@DFHJ!YRSd=B%OUAkd%y!9+7%T5k@ylo89BB|ADfL_H zCD&NWLmhT6o73AT4T8pXlnNS+>RxGNn|#kIg;(sVm^%A|XN{IwOI#|Z-^b1*i_bCV zEjlj9r8ANlntB;pB~fGr^+IZTwHRiKE^0AUQy;C9fmK92!zU9sVk=-)r#syOM;~i; z4y#wewPSNlsbPy>4iLNq0T|=>h(>Esz&cXnp;s%yP*Qu^5}$`MGJD00n6l8Pd<|nh zoGreN$|cv^r;lb+u|!Rn)i0r;m%s~fL6p=BbxbO8RwyX*=uJg^^ktw#3?pW~yj58==#9@+|&7?S) zjqAkDhdLf`9fF~>Yf*hu6@n^KP{`dZ)Y);hQ=lg5){`v!7 zjvODYEo_v<$Fc*Rgg1^D7xX@F9F5ZLSRQmUm$rM^l=KU3s?FotxbY2SpP`v~WulNZOy4p4~yCjh|`@X>Pve_^A5veAhiDyhjVCp}@*Wd7avFhwf*B>qKtiX!CM0~3y7;H-=C1u> z-G>Dqc;QoS78}`6avp&gFoc+nAY82xVGvV7)?HhWht;cI6mm6Tq{R0Q_N0s+BnLnH zN|hT9O~1p$;Ja}o;KIk_bosv>@`)n-s|pdR*Y*A8zGVK;UfVtEzl96&`-VOH>G3#@ zKhLGYKF5|GxC4X*BA_|oJF3AysRC*DON|33Ue$5X)hFCPl! zCJ&rP@=ME#9k56T0dZ+ytd^W3kn|H5&I=Q+?bR?sZ|iCx1NgJnMZ!&;AQx-~6~Z9Z&habcjp1;1ocx;@v?_c`+S`TKM{@jch;2|e2{7hW9i^5^YaUOdP34L#|2wtLov&~tuI zKKwo(J;z;b=sEw@#=qKl|ElwP&U3l&YOm+d#=F||Jn{bE{3wOIeCiW=o}(xH{qyvk zpN5|I;DR3LiSIdYkNo;wdE?&$yf1us-j~{-3euiQNFyeUqw7qcb+*sCsL#5%&$^_~ zy0q6i#=iQKOKx_$W_h;7l43MuTH=Q$rx@asvn)CB!;({n#;4|FnUk}V^_FBy%1V5` zoLyP6Xo0<=CcSWOnZwhTLz6R;b5^R97%0hZF1I-xs4ckLw0k8(-GDVo7bVbh3H-j)E9@I~ zg?+{=>`S?5A8p=A*G$dI%&)GThfgDr3uEl%Rpv@Gj4!RBxu?gbsrG6IItZZhS!Js! zL%*~nW4b13Sd!6bM8+V3dBW&)O=ec+u&kV%6nzphrWZ74^Rv=5IY~JN%h2R(Bl24S zdq$garmUo4#vJ5Ysy>yHHVivd%4^3|I_QV^HE37E1UxDmN z&o8=3uTM^0Il{8E#9p43pugxexIkJ)92lg^j_c}OX429BqvyX_rR;h57wyZoT3g#SmJd)L7_WNFM$#$q@oV{4cZJ zv!9UOxk3ubT=X|~5Da@nsxc}V2JOJV`H0<+A8;AAUILx!r*lVNFvoWRD#uRM){ldW15kc&rhC@a3MauxJO(-j= zu5?t+uHop&GY-y}pyz*KmQO+~3ySTfrS?(|gGb=q;t&3I*dq%sI?I(;rdlQ!mV*+Xnr(IqAIq>l!iRpLA@oP(;DO`t&1V%qPb+@%OFI72 zf!%~Sc;T>)p@1O%#@Nf|%&no3XdHtfEj6Xr-tl(aEWgmb$-Q?KR#pjn_yd!YaK%^` zPCBiuv}SJ4VTPoXVZz=5jC@lwr7FMDAxtC7CkY4mOFzDT;$+90Cr%vYPeNPWr~rT@ z>N!brG97OSeSWT#g<>5UJaoir&EV39KKq80{js;o%x&L0l6M_l<7|shd6Y_wl8On+7C(<74=#8Vex{c^A=z^V3y5 zkoJwA6jGO*PsrW$gviJ5kb(G#hA%?syGb2fG7?0_+luYw5CAkEg}8(Hyg@uCedshF z%6v(t#ki=QyIaqsidc+`-g_ohTVzL^i{&cXxl zdyNRvYg{#gejF1<%}-}u8q>YkY3 zj?a1{WkSBGW$>i~eq3T<(P^BqIO(2&W1Mj!hUNX1XOK7aajCjh-E${>(nLeT2BP_0 z@LL{4xLV`(SF-(a4v7<+dd~5==heFGF@sUC2%)!4eWZC%CN_emXy}iSy0|&Lk6(m1 z^wkm46bU|3mgA47kB}aZu_E!<>5+KVQU3T>329&YSRrltc<8Ycpk>h8g^cHqe@Fhu zX@~M@(~>;OZl5%7a`Mf!SCwuce;mCR()80LS_H0qooW(+s8q2P5B`1J*RY-Xjd`Cj zo+~i;_++G7g+GDcH=~Ue5|y`pT5t2&o$JaPG9LfdZU+p&YpBH z9Q$S7Fgrb#KI1DN`};CI2Qui&`O~*tE$daT;^qwK^-f&6Tnc5HnkGV-o(#2Bz?aHD zJQm0Nm4z`MgnGn-hf>l{9m_T`Cs=ljg5(GKNymtw+1B4D5{n^qL-{(0iLZo6NC+t; zCRQnBmFcWf7Ry#MfpV$8g7yD3w`JWdG<~pRN3u$BFkyx{YDz21#r9F`00%6?QaZXV zeaTgUuok1PBcdTQM-#!!Pfq$=A5Y|Bv6(1YAI6{X#(ktQf#@Ukk>=qur_oN_==M6Z z0OOR^*cT)jXEGwYF`=fsI5Lmm%e%})_zJxfRUmW@))S_|!sX4LT~^X)$s^lmJ7L?F z)LZUx`boDqnL3LxJ0~rh=rI^>N>)xLi8tsCS@BufJ1r?rOJ=6ioa~fHjcYB=+vZf; z7H}j7V+1&6nk&@{7F1Sa!L`y1bp_)q7I(WS3L1#znIFi;a4cl9d*p zhEC0MlQXlD;xjEICp$hf)smFrGz>K-rzK}$bVq8BI%bZ)hD@KCSyhG34#YNdd?gy; zWqwKvNludli)v$MhRpy9s zvVFFtw5-O`Fn6-)*4e~j`g@td^>h+h;q=KKYfOHQ#L06{JZVTU9(nSm+v-#|&#bPj zteGilVqDuMTXHab392)GwS1$hZ;$Cd{$-EHBQr9rJP zsio2`>Yio3>PM&{`PUXE7y`Tt$G!$*;|+QagtRjEHo|x++_6you=I`3UZHy;@p~Z$=J-@aHzp#I#@XK@c44DYIx*X7dMv%t;jdyR+ zlit6~?yVQL3C9V4lSwMAN;ik!G}O~=XvaptFLWDSJnOXH7zOAy z6TeZo8~&$zJKaYYx=r|X@!uFF*me?l_M zefusq4m?DW$zEfGvq1StmKcM;*XXHgb-{%OsYf`m+{a7;*-&OMRjuqw)e1V6yRAHe zIm(aazB$Jx$7g-srRHk8O-(zwU@Uj^hT*@AB+}ecKk|Sumiy8wImU7i45d<^@FTfn zAb06vcJSt`MGh!o@3QN~*&_;v7Wr7$MxP$*F6iO@(aClVH;ib?Cl%Ux;xz_90Q|w z2$>0gS{kn$lCc&Er$XufTwuzGrcO@XRKkMaw0=%sK{0;QyYEl;I8h11La)dZpQ9Vx z@o6dd#81O-8joSd;MX>{Frt%JWtpg$sw8vZwV;!ASo!@l?+D>YGV9szz+SrFgzfZ9 zo-^VZ1nj@E5KsEwBE;23+SnwAVO_V4O1GX7;?)(9eT0GZ^VDJDQaPnBxhWrxDHB&9 zUR1nJWuU{?6FPo9ZDkSLtC?^EKFO^#E#ZB`b^TQLp(QCe+~^x_RD~m({^ar}?8m5k z=tGD^0&Bs4?MGT5{|5_wQ~ql|(hQ_U_EH&1w^P&QYUQMG4tmtT*M3a--y(Xh)_$bQ z>yPV?UswP4{l8Q({fpcF^WT5!(ev0>G!snp#pB;r`qm0d@64fFdarwaUupY);`^Wa z|K|IDtmD7$zo*Fl3&Q{W_y06r&i~WzzaSeta^rH6fs%S9zSx8+~Y?sZK9vTQa>`; zFZcM7D-lufBbQ_N275N05LCqayZy*z(kuIsw=qWE=cE2p*|e3}{-@&qdm?YaRZ{!$ zb(w+*91_FG31&sKp-W3SSq8Tf?VH*C|>ZzpN-AsVqlNDfb(meL$8I4C5df)Uny=OZL zXgrE&1@fR0f9c|h=eggJ$N>6$=t9p&)BOd1=y}EXL-R+CkUo!4g!I}>2&r$k5Fu@# zwIZZhSB{XDhb;(cN&EyM7H2X}Lbub^Ku|<7@odN7no8h&wv)xUK0BVY8P8kjb(YI_ z5v6Iuf0_w+Vrlo5YoITB~uX_o)j!Je`!AS?Jho=k6TKk z@Xv(iS1xjTDnj}^==(;WDIU{fWA?q8Ny`r{19YLkY5vbcj#MBe6H*sSRRVrtf?#(X znoqxW(|_lszjk}hM>=0OR{idLwEWVx>J#JdamMsp@@}&WhU@)L%I2vey4#a>VAQr>{daVfv(Yu+K_2|`vl1BJ1Hj)w2 zexLMxprwxL0Q73+kDq0^CV+_`599-? zTPFj0{z8OP0F@Kdz%^hxm;tT@Gr=ry9Vh};U<34RqsNybw1e4T4wwtdz&tP?lmjY1 zDnKQu0t*3^W)47QJ3Y^0giF9uunb%emV*^wCAb090w<^g^`HSX0($&vgloWBa3i=0 ztOM)8&0quA2%5kquo>I}wt%f*8@LtR25tv;fIGom;BG+EXhzrqTETX(1MCF5z`bBM zxDVV9_J9Y#gWw@RkKc=MAJ`8b0SCZA@F;i;90HGnC&1spli(@vcR-JCL+AqS;4nA> zj)G^vv*0=KJa_@T2wnomz{`Lhe;nZn@G5u>ybj&~C&8QG6nG1~4c-C&0PlkL06o3~ zVJA2Z&VUcVSwQ!Fgz#hV3Ha2#?K6a*gD=3B;2h`zUxBZ|H{e_F9rzxc2S0!x0X^sC zmdPkdl_)vX!mB`7&6gM)bd^gmB!=hQERNyi^skV&2y*z9K7a0IQ1(U%8_h_QYV^Ol zDEZz8o-6RQ(*N<<3f)oq>i$1I^5Pi&NFTSu%R71%7w^6N+BdO6K3QPZP}{l&(#M9s zw#y%K$vuI8;r?mLo0Y=piXg4Bps$M{%_c*tjm6cNaZN?|JB62QmrS;2qXw3bC-MHE|LH0z&3_3_B?DLc{D&iMs*rr2 zTwlV=clWNV3OvtWj@Vb5{s_dSvXd^C`W#Z&b9I051x8QaE3WR4i()Y-XVfaLLfNBr zls~)B_sb5}sq_msV>P2YqhqNvcoGFu4#@?Wt# zeQ%uMYSXtM?gDrDul&m?3kM?op67qH=@;P8=iTWG(&w*V1bj+8>HGhM(_BveUG1qt z{=)qS$aJBb;590p*{yiGu zkJIcO6z80}wk1Tz#TB z7vP_bxBYWb3z&^7pkHuNd-Q@A^wL+PL;h1yGT=|7{~_YiuJUw|!0x3!O?nM>z6SE= zt|#p;$lre=-7fd@=P%;_$A9Q!p!ETo9rQU;Tb7DOYR^)elG=3CwxTu`wK1rzP2V*t z^QqjUa-Zs5Dg&qtq;i11kNp5GleAoffPo+s3<6;w9B?24Xh0+w45C0Z&;lKZ0YgA6 zhy&DiPXLKP4-9~6E~-6}0hQuZk`4uFfJ!xLZ&RChBuEFNKn5^@Oppc4ARAaf4j2u_ zfLt&Zj05Ar1TYcgfqXCtOa=vj)+wiesbCto222Mtz_nl|m<6r_MZgMdpcs^ZQeX$O z0hIuAK^d3_=7Vyu091fVPz4r(YTy7hU=dghmVl*T8Mq!S2P?oza093XPEZHxK?7(6 ztH5fo2CM})f}6lPupZnDHh_(w32XwJ!7X45*b26RTfuGMc5nx{6Wj&v2KRtw&;nY) zcCZ8N1iQe!U^loA+zuD!0I!1A!0X@*a1y);PJy?;+u$AW z5AZH{54;aLKqoj2&VUcVS@0qF2z(4a0iS|@g3rL`;0y32I0w4GSKw>#4fqy(2fhdA z!4Kd^@DunM`~rRjzkzN5(;45xB#;bJKq?pt(!ek<9E<=XK{^-(GJpwWf-GPL*}wvFz-TZA%q-n1K0?fz$UO6+yb_Mtza9t72F1H2X}xw!Cl~Pa1Uq(Eua-_2Rpz{unW-g zup8lh;C`?NJOCa94}pilUa$}B2akXQ;2?MuJO&Pd$H5ceZ{SJr6!<%M8ngiyXa|SE j5pWbd18Dlsxx*I_z6f3d$H2?r6+q+s+6S!u$1VRKRsEp6 diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ql/service/impl/InspectionsheetmstServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ql/service/impl/InspectionsheetmstServiceImpl.java index bb807cca..62908b61 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ql/service/impl/InspectionsheetmstServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ql/service/impl/InspectionsheetmstServiceImpl.java @@ -478,6 +478,7 @@ public class InspectionsheetmstServiceImpl implements InspectionsheetmstService WQLObject reMstTab = WQLObject.getWQLObject("PCS_RC_ReceiveMst"); //到货通知单主表 WQLObject reDtlTab = WQLObject.getWQLObject("PCS_RC_ReceiveDtl"); //到货通知单明细表 WQLObject procTab = WQLObject.getWQLObject("PCS_IF_PurchaseOrderProc"); //采购订单接口处理表 + WQLObject otherInTab = WQLObject.getWQLObject("pcs_if_otheriosinproc"); WQLObject lostTab = WQLObject.getWQLObject("QL_TEST_InspectionWeightLost"); //重损计算表 WQLObject phyMstTab = WQLObject.getWQLObject("QL_TEST_PhysicalMst"); // 理化报告主表 WQLObject workTab = WQLObject.getWQLObject("QL_TEST_WorkProcedureMst"); // 工序质检单主表 @@ -686,15 +687,27 @@ public class InspectionsheetmstServiceImpl implements InspectionsheetmstService * 如果到货单主表状态为确认,则需要更新采购订单接口处理表 */ if (StrUtil.equals(jsonReMst.getString("status"), ReceiveStatusEnum.AFFIRM.getCode())) { - JSONObject jsonProc = procTab.query("id = '" + jsonReDtl.getString("source_billdtl_id") + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(jsonProc)) throw new BadRequestException("订单不存在"); - // 到货数量 = 订单数量,为完成,否则为采购中 - if ((jsonReDtl.getDoubleValue("instor_qty") >= jsonProc.getDoubleValue("qty")) && (StrUtil.equals(jsonReDtl.getString("status"), "99"))) { - jsonProc.put("proc_status", ProcStatusEnum.FULFILL.getCode()); + if ("82".equals(jsonReMst.getString("receive_type"))) { + JSONObject jsonProc = otherInTab.query("id = '" + jsonReDtl.getString("source_billdtl_id") + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonProc)) throw new BadRequestException("订单不存在"); + // 到货数量 = 订单数量,为完成,否则为采购中 + if ((jsonReDtl.getDoubleValue("instor_qty") >= jsonProc.getDoubleValue("nnum")) && (StrUtil.equals(jsonReDtl.getString("status"), "99"))) { + jsonProc.put("proc_status", ProcStatusEnum.FULFILL.getCode()); + } else { + jsonProc.put("proc_status", ProcStatusEnum.BUYING_CENTER.getCode()); + } + otherInTab.update(jsonProc); } else { - jsonProc.put("proc_status", ProcStatusEnum.BUYING_CENTER.getCode()); + JSONObject jsonProc = procTab.query("id = '" + jsonReDtl.getString("source_billdtl_id") + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonProc)) throw new BadRequestException("订单不存在"); + // 到货数量 = 订单数量,为完成,否则为采购中 + if ((jsonReDtl.getDoubleValue("instor_qty") >= jsonProc.getDoubleValue("qty")) && (StrUtil.equals(jsonReDtl.getString("status"), "99"))) { + jsonProc.put("proc_status", ProcStatusEnum.FULFILL.getCode()); + } else { + jsonProc.put("proc_status", ProcStatusEnum.BUYING_CENTER.getCode()); + } + procTab.update(jsonProc); } - procTab.update(jsonProc); } } } @@ -805,6 +818,7 @@ public class InspectionsheetmstServiceImpl implements InspectionsheetmstService WQLObject reMstTab = WQLObject.getWQLObject("PCS_RC_ReceiveMst"); //到货通知单主表 WQLObject reDtlTab = WQLObject.getWQLObject("PCS_RC_ReceiveDtl"); //到货通知单明细表 WQLObject procTab = WQLObject.getWQLObject("PCS_IF_PurchaseOrderProc"); //采购订单接口处理表 + WQLObject otherInTab = WQLObject.getWQLObject("pcs_if_otheriosinproc"); WQLObject daTab = WQLObject.getWQLObject("ST_IVT_IOStorDaily"); //仓库物料日表 /* @@ -869,14 +883,25 @@ public class InspectionsheetmstServiceImpl implements InspectionsheetmstService * 如果到货单主表状态为确认,则需要更新采购订单接口处理表 */ if (StrUtil.equals(jsonReMst.getString("status"), ReceiveStatusEnum.AFFIRM.getCode())) { - JSONObject jsonProc = procTab.query("id = '" + jsonReDtl.getString("source_billdtl_id") + "'").uniqueResult(0); - // 到货数量 = 订单数量,为完成,否则为采购中 - if ((jsonReDtl.getDoubleValue("instor_qty") >= jsonProc.getDoubleValue("qty")) && (StrUtil.equals(jsonReDtl.getString("status"), "99"))) { - jsonProc.put("proc_status", ProcStatusEnum.FULFILL.getCode()); + if ("82".equals(jsonReMst.getString("receive_type"))) { + JSONObject jsonProc = otherInTab.query("id = '" + jsonReDtl.getString("source_billdtl_id") + "'").uniqueResult(0); + // 到货数量 = 订单数量,为完成,否则为采购中 + if ((jsonReDtl.getDoubleValue("instor_qty") >= jsonProc.getDoubleValue("nnum")) && (StrUtil.equals(jsonReDtl.getString("status"), "99"))) { + jsonProc.put("proc_status", ProcStatusEnum.FULFILL.getCode()); + } else { + jsonProc.put("proc_status", ProcStatusEnum.BUYING_CENTER.getCode()); + } + otherInTab.update(jsonProc); } else { - jsonProc.put("proc_status", ProcStatusEnum.BUYING_CENTER.getCode()); + JSONObject jsonProc = procTab.query("id = '" + jsonReDtl.getString("source_billdtl_id") + "'").uniqueResult(0); + // 到货数量 = 订单数量,为完成,否则为采购中 + if ((jsonReDtl.getDoubleValue("instor_qty") >= jsonProc.getDoubleValue("qty")) && (StrUtil.equals(jsonReDtl.getString("status"), "99"))) { + jsonProc.put("proc_status", ProcStatusEnum.FULFILL.getCode()); + } else { + jsonProc.put("proc_status", ProcStatusEnum.BUYING_CENTER.getCode()); + } + procTab.update(jsonProc); } - procTab.update(jsonProc); } } } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ql/wql/QL_TEST_INSPECTIONSHEET002.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ql/wql/QL_TEST_INSPECTIONSHEET002.wql index aa0868fd..1200c67b 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ql/wql/QL_TEST_INSPECTIONSHEET002.wql +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ql/wql/QL_TEST_INSPECTIONSHEET002.wql @@ -79,7 +79,7 @@ AND dtl.quality_scode in ('00','01') AND dtl.material_id = 输入.material_id AND dtl.pcsn = 输入.pcsn - AND dtl.source_bill_type = '81' + AND dtl.source_bill_type in ('81','82') AND dtl.bill_status = '99' group by dtl.source_billdtl_id diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/core/config/bussConfig.json b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/core/config/bussConfig.json index de357741..78dcaa7e 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/core/config/bussConfig.json +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/core/config/bussConfig.json @@ -17,6 +17,11 @@ "code": "000102", "name": "产成品入库", "materType":"09" + }, + { + "code": "000103", + "name": "原材料其他入库", + "materType":"04" } ] }, diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/core/service/impl/InbillServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/core/service/impl/InbillServiceImpl.java index adbf9397..9d082d19 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/core/service/impl/InbillServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/core/service/impl/InbillServiceImpl.java @@ -234,6 +234,7 @@ public class InbillServiceImpl { WQLObject reMstTab = WQLObject.getWQLObject("PCS_RC_ReceiveMst"); //到货通知单主表 WQLObject reDtlTab = WQLObject.getWQLObject("PCS_RC_ReceiveDtl"); //到货通知单明细表 WQLObject procTab = WQLObject.getWQLObject("PCS_IF_PurchaseOrderProc"); //采购订单接口处理表 + WQLObject otherInTab = WQLObject.getWQLObject("pcs_if_otheriosinproc"); //其他采购入库接口处理表 WQLObject dtlTab = WQLObject.getWQLObject("QL_TEST_InspectionSheetDtl"); //质检单明细表 WQLObject ivtTab = WQLObject.getWQLObject("ST_IVT_StructIvt"); //库存表 WQLObject redTab = WQLObject.getWQLObject("MD_PB_BucketRecord"); //桶记录表 @@ -312,7 +313,7 @@ public class InbillServiceImpl { mst_jo.put("confirm_optid", currentUserId); mst_jo.put("confirm_optname", nickName); mst_jo.put("confirm_time", now); - if("000101".equals(bill_type)){ + if("000101".equals(bill_type) || "000103".equals(bill_type)){ //查询 dtl_rows = dtl_table.query("iostorinv_id = '" + iostorinv_id + "' AND bill_status = '99'").getResultJSONArray(0); @@ -411,6 +412,7 @@ public class InbillServiceImpl { .addParam("flag", "2") .addParam("material_id", jo.getString("material_id")) .addParam("pcsn", jo.getString("pcsn")) + .addParam("pcsn", jo.getString("pcsn")) .process().getResultJSONArray(0); if (ObjectUtil.isNotEmpty(ivtDtlArr)) { for (int j = 0; j < ivtDtlArr.size(); j++) { @@ -457,17 +459,32 @@ public class InbillServiceImpl { * 如果到货单主表状态为确认,则需要更新采购订单接口处理表 */ if (StrUtil.equals(jsonReMst.getString("status"), ReceiveStatusEnum.AFFIRM.getCode())) { - JSONObject jsonProc = procTab.query("id = '" + jsonReDtl.getString("source_billdtl_id") + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(jsonProc)) { - throw new BadRequestException("订单不存在"); - } - // 到货数量 = 订单数量,为完成,否则为采购中 - if ((jsonReDtl.getDoubleValue("instor_qty") >= jsonProc.getDoubleValue("qty")) && (StrUtil.equals(jsonReDtl.getString("status"), "99"))) { - jsonProc.put("proc_status", ProcStatusEnum.FULFILL.getCode()); + if ("82".equals(jsonReMst.getString("receive_type"))) { + // 其他入库 + JSONObject jsonProc = otherInTab.query("id = '" + jsonReDtl.getString("source_billdtl_id") + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonProc)) { + throw new BadRequestException("订单不存在"); + } + // 到货数量 = 订单数量,为完成,否则为采购中 + if ((jsonReDtl.getDoubleValue("instor_qty") >= jsonProc.getDoubleValue("nnum")) && (StrUtil.equals(jsonReDtl.getString("status"), "99"))) { + jsonProc.put("proc_status", ProcStatusEnum.FULFILL.getCode()); + } else { + jsonProc.put("proc_status", ProcStatusEnum.BUYING_CENTER.getCode()); + } + otherInTab.update(jsonProc); } else { - jsonProc.put("proc_status", ProcStatusEnum.BUYING_CENTER.getCode()); + JSONObject jsonProc = procTab.query("id = '" + jsonReDtl.getString("source_billdtl_id") + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonProc)) { + throw new BadRequestException("订单不存在"); + } + // 到货数量 = 订单数量,为完成,否则为采购中 + if ((jsonReDtl.getDoubleValue("instor_qty") >= jsonProc.getDoubleValue("qty")) && (StrUtil.equals(jsonReDtl.getString("status"), "99"))) { + jsonProc.put("proc_status", ProcStatusEnum.FULFILL.getCode()); + } else { + jsonProc.put("proc_status", ProcStatusEnum.BUYING_CENTER.getCode()); + } + procTab.update(jsonProc); } - procTab.update(jsonProc); } } } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/core/wql/QST_IVT_RAWASSISTISTOR.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/core/wql/QST_IVT_RAWASSISTISTOR.wql index e5cf9671..3414a184 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/core/wql/QST_IVT_RAWASSISTISTOR.wql +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/core/wql/QST_IVT_RAWASSISTISTOR.wql @@ -28,6 +28,7 @@ 输入.stor_id TYPEAS s_string 输入.sect_id TYPEAS s_string 输入.buss_type TYPEAS s_string + 输入.receive_type TYPEAS s_string 输入.bill_code TYPEAS s_string 输入.iostorinvdis_id TYPEAS s_string 输入.iostorinvdtl_id TYPEAS s_string @@ -151,6 +152,9 @@ OPTION 输入.bill_code <> "" rm.receive_code like 输入.bill_code ENDOPTION + OPTION 输入.receive_type <> "" + rm.receive_type = 输入.receive_type + ENDOPTION OPTION 输入.begin_time <> "" rm.receive_date >= 输入.begin_time ENDOPTION diff --git a/mes/qd/src/api/wms/pcs/otherorderproc.js b/mes/qd/src/api/wms/pcs/otherorderproc.js new file mode 100644 index 00000000..5ab758a2 --- /dev/null +++ b/mes/qd/src/api/wms/pcs/otherorderproc.js @@ -0,0 +1,58 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: 'api/otherIosInProc', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: 'api/otherIosInProc/', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: 'api/otherIosInProc', + method: 'put', + data + }) +} + +export function getProcStatus() { + return request({ + url: 'api/otherIosInProc/getProcStatus', + method: 'get' + }) +} + +export function importData(data) { + return request({ + url: 'api/otherIosInProc/importData', + method: 'put', + data: data + }) +} + +export function finish(data) { + return request({ + url: 'api/otherIosInProc/finish', + method: 'put', + data: data + }) +} + +export function saveRemark(data) { + return request({ + url: 'api/otherIosInProc/saveRemark', + method: 'post', + data: data + }) +} + +export default { add, edit, del, getProcStatus, importData, finish, saveRemark } diff --git a/mes/qd/src/views/wms/pcs/otherorderproc/importOrder.vue b/mes/qd/src/views/wms/pcs/otherorderproc/importOrder.vue new file mode 100644 index 00000000..4b737e55 --- /dev/null +++ b/mes/qd/src/views/wms/pcs/otherorderproc/importOrder.vue @@ -0,0 +1,82 @@ + + + + diff --git a/mes/qd/src/views/wms/pcs/otherorderproc/index.vue b/mes/qd/src/views/wms/pcs/otherorderproc/index.vue new file mode 100644 index 00000000..f87ca0c5 --- /dev/null +++ b/mes/qd/src/views/wms/pcs/otherorderproc/index.vue @@ -0,0 +1,269 @@ + + + + + diff --git a/mes/qd/src/views/wms/pcs/receivemst/AddShowDialog.vue b/mes/qd/src/views/wms/pcs/receivemst/AddShowDialog.vue index 6e57dc05..ecfb77f2 100644 --- a/mes/qd/src/views/wms/pcs/receivemst/AddShowDialog.vue +++ b/mes/qd/src/views/wms/pcs/receivemst/AddShowDialog.vue @@ -200,7 +200,7 @@ - + @@ -243,6 +243,7 @@ export default { statusList: [], storList: [], flagnow: false, + receive_type_param: null, rules: { receive_date: [ { required: true, message: '到货单日期不能为空', trigger: 'blur' } @@ -320,6 +321,7 @@ export default { this.$emit('update:dialogShow', false) }, insertEvent() { + this.receive_type_param = this.form.receive_type this.dtlShowDialog = true }, diff --git a/mes/qd/src/views/wms/pcs/receivemst/DtlShowDialog.vue b/mes/qd/src/views/wms/pcs/receivemst/DtlShowDialog.vue index ee943527..b5564575 100644 --- a/mes/qd/src/views/wms/pcs/receivemst/DtlShowDialog.vue +++ b/mes/qd/src/views/wms/pcs/receivemst/DtlShowDialog.vue @@ -7,6 +7,7 @@ :show-close="false" width="70%" @close="close" + @open="open" >
@@ -115,6 +116,10 @@ export default { dialogShow: { type: Boolean, default: false + }, + receiveType: { + type: String, + default: '' } }, data() { @@ -134,8 +139,14 @@ export default { crudOrderproc.getProcStatus().then(res => { this.procStatusList = res }) + this.crud.query.receive_type = this.receiveType + this.crud.toQuery() }, methods: { + open() { + this.crud.query.receive_type = this.receiveType + this.crud.toQuery() + }, handleClose(done) { this.$confirm('确认关闭?') .then(_ => { diff --git a/mes/qd/src/views/wms/pcs/receivemst/index.vue b/mes/qd/src/views/wms/pcs/receivemst/index.vue index 02f0fdb3..e170e6f1 100644 --- a/mes/qd/src/views/wms/pcs/receivemst/index.vue +++ b/mes/qd/src/views/wms/pcs/receivemst/index.vue @@ -106,6 +106,23 @@ /> + + + + + @@ -238,6 +255,7 @@ +