From f9fd7882f9402b19e763b503126e3f1e8a6e1af0 Mon Sep 17 00:00:00 2001 From: wenjy Date: Thu, 9 Jun 2022 17:22:03 +0800 Subject: [PATCH] =?UTF-8?q?add=20-=20mes=E7=94=9F=E4=BA=A7=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=EF=BC=9A=E7=8F=AD=E7=BB=84=E7=BB=9F=E8=AE=A1=E3=80=81?= =?UTF-8?q?=E5=B0=8F=E6=97=B6=E4=BA=A7=E9=87=8F=E3=80=81=E7=89=A9=E6=96=99?= =?UTF-8?q?=E4=BA=A7=E9=87=8F=E3=80=81=E5=BA=93=E5=AD=98=E7=BB=9F=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/AdsorptionTankController.java | 71 +++++++++++++ .../controller/AluminumTtankController.java | 73 ++++++++++++++ .../controller/FoamBoxController.java | 73 ++++++++++++++ .../controller/PreassembleController.java | 73 ++++++++++++++ .../controller/TankShellController.java | 70 +++++++++++++ .../MesHourProdutionStatistics.java | 33 ++++++ .../MesMaterialProductionStatistics.java | 33 ++++++ .../MesMaterialStoreStatistics.java | 38 +++++++ .../MesProduction/MesTeamStatistics.java | 40 ++++++++ .../MesHourProdutionStatisticsMapper.java | 13 +++ ...MesMaterialProductionStatisticsMapper.java | 13 +++ .../MesMaterialStoreStatisticsMapper.java | 14 +++ .../mapper/MesTeamStatisticsMapper.java | 14 +++ .../service/IMesProductionDataService.java | 53 ++++++++++ .../impl/MesProductionDataServiceImpl.java | 95 ++++++++++++++++++ .../controller/AdsorptionTankController.class | Bin 1787 -> 3846 bytes .../controller/AluminumTtankController.class | Bin 1780 -> 3911 bytes .../controller/FoamBoxController.class | Bin 1752 -> 3883 bytes .../controller/PreassembleController.class | Bin 1772 -> 3903 bytes .../controller/TankShellController.class | Bin 1762 -> 3893 bytes 20 files changed, 706 insertions(+) create mode 100644 productionboard/src/main/java/com/productionboard/entity/MesProduction/MesHourProdutionStatistics.java create mode 100644 productionboard/src/main/java/com/productionboard/entity/MesProduction/MesMaterialProductionStatistics.java create mode 100644 productionboard/src/main/java/com/productionboard/entity/MesProduction/MesMaterialStoreStatistics.java create mode 100644 productionboard/src/main/java/com/productionboard/entity/MesProduction/MesTeamStatistics.java create mode 100644 productionboard/src/main/java/com/productionboard/mapper/MesHourProdutionStatisticsMapper.java create mode 100644 productionboard/src/main/java/com/productionboard/mapper/MesMaterialProductionStatisticsMapper.java create mode 100644 productionboard/src/main/java/com/productionboard/mapper/MesMaterialStoreStatisticsMapper.java create mode 100644 productionboard/src/main/java/com/productionboard/mapper/MesTeamStatisticsMapper.java create mode 100644 productionboard/src/main/java/com/productionboard/service/IMesProductionDataService.java create mode 100644 productionboard/src/main/java/com/productionboard/service/impl/MesProductionDataServiceImpl.java diff --git a/productionboard/src/main/java/com/productionboard/controller/AdsorptionTankController.java b/productionboard/src/main/java/com/productionboard/controller/AdsorptionTankController.java index 19b2728..bc6cc2c 100644 --- a/productionboard/src/main/java/com/productionboard/controller/AdsorptionTankController.java +++ b/productionboard/src/main/java/com/productionboard/controller/AdsorptionTankController.java @@ -1,10 +1,20 @@ package com.productionboard.controller; +import com.alibaba.fastjson.JSONArray; +import com.productionboard.entity.MesProduction.MesHourProdutionStatistics; +import com.productionboard.entity.MesProduction.MesMaterialProductionStatistics; +import com.productionboard.entity.MesProduction.MesMaterialStoreStatistics; +import com.productionboard.entity.MesProduction.MesTeamStatistics; +import com.productionboard.service.IMesProductionDataService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; +import java.util.ArrayList; +import java.util.List; + /** * 吸附内胆看板 * @author WenJY @@ -14,6 +24,9 @@ import org.springframework.web.bind.annotation.ResponseBody; @RequestMapping("/adsorptionTank") public class AdsorptionTankController { + @Autowired + private IMesProductionDataService iMesProductionDataService; + private String prefix = "adsorptionTank/index"; @GetMapping() @@ -22,6 +35,64 @@ public class AdsorptionTankController { return prefix; } + /** + * 班组统计 + * @author WenJY + * @date 2022-06-09 16:38 + * @return java.lang.String + */ + @GetMapping("/getTeamStatisticsJson") + @ResponseBody + public String getTeamStatisticsJson(){ + List mesTeamStatisticsList = iMesProductionDataService.getMesTeamStatisticsList("1002"); + if(mesTeamStatisticsList.size()>0){ + return JSONArray.toJSONString(mesTeamStatisticsList.get(0)); + } + return JSONArray.toJSONString(new MesTeamStatistics()); + } + + /** + * 通过工位号获取MES小时产量 + * @author WenJY + * @date 2022-06-09 16:54 + * @return java.lang.String + */ + @GetMapping("/getHourProdutionJson") + @ResponseBody + public String getHourProdutionStatisticsJson(){ + List mesHourProdutionStatisticsList = iMesProductionDataService.getMesHourProdutionStatisticsList("1002"); + + return JSONArray.toJSONString(mesHourProdutionStatisticsList); + } + + /** + * 通过工位号获取MES物料产量 + * @author WenJY + * @date 2022-06-09 17:06 + * @return java.lang.String + */ + @GetMapping("/getMaterialProdutionJson") + @ResponseBody + public String getMaterialProdutionStatisticsJson(){ + + List mesMaterialProductionStatisticsList = iMesProductionDataService.getMesMaterialProductionStatisticsList("1002"); + + return JSONArray.toJSONString(mesMaterialProductionStatisticsList); + } + + /** + * 获取MES物料库存 + * @author WenJY + * @date 2022-06-09 17:18 + * @return java.lang.String + */ + @GetMapping("/getMaterialStoreJson") + @ResponseBody + public String getMesMaterialStoreStatisticsJson(){ + List mesMaterialStoreStatisticsList = iMesProductionDataService.getMesMaterialStoreStatisticsList("1002"); + return JSONArray.toJSONString(mesMaterialStoreStatisticsList); + } + /** * 根据型号统计产量 * diff --git a/productionboard/src/main/java/com/productionboard/controller/AluminumTtankController.java b/productionboard/src/main/java/com/productionboard/controller/AluminumTtankController.java index 359b6fc..37e523c 100644 --- a/productionboard/src/main/java/com/productionboard/controller/AluminumTtankController.java +++ b/productionboard/src/main/java/com/productionboard/controller/AluminumTtankController.java @@ -1,10 +1,20 @@ package com.productionboard.controller; +import com.alibaba.fastjson.JSONArray; +import com.productionboard.entity.MesProduction.MesHourProdutionStatistics; +import com.productionboard.entity.MesProduction.MesMaterialProductionStatistics; +import com.productionboard.entity.MesProduction.MesMaterialStoreStatistics; +import com.productionboard.entity.MesProduction.MesTeamStatistics; +import com.productionboard.service.IMesProductionDataService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; +import java.util.ArrayList; +import java.util.List; + /** * 铝内胆可视化看板 * @author WenJY @@ -14,6 +24,9 @@ import org.springframework.web.bind.annotation.ResponseBody; @RequestMapping("/aluminumTank") public class AluminumTtankController { + @Autowired + private IMesProductionDataService iMesProductionDataService; + private String prefix = "aluminumTank/index"; @GetMapping() @@ -22,6 +35,66 @@ public class AluminumTtankController { return prefix; } + /** + * 班组统计 + * @author WenJY + * @date 2022-06-09 16:38 + * @return java.lang.String + */ + @GetMapping("/getTeamStatisticsJson") + @ResponseBody + public String getTeamStatisticsJson(){ + List mesTeamStatisticsList = iMesProductionDataService.getMesTeamStatisticsList("1002"); + if(mesTeamStatisticsList.size()>0){ + return JSONArray.toJSONString(mesTeamStatisticsList.get(0)); + } + return JSONArray.toJSONString(new MesTeamStatistics()); + } + + /** + * 通过工位号获取MES小时产量 + * @author WenJY + * @date 2022-06-09 16:54 + * @return java.lang.String + */ + @GetMapping("/getHourProdutionJson") + @ResponseBody + public String getHourProdutionStatisticsJson(){ + List mesHourProdutionStatisticsList = iMesProductionDataService.getMesHourProdutionStatisticsList("1002"); + if(mesHourProdutionStatisticsList.size()>0){ + return JSONArray.toJSONString(mesHourProdutionStatisticsList); + } + return JSONArray.toJSONString(new ArrayList()); + } + + /** + * 通过工位号获取MES物料产量 + * @author WenJY + * @date 2022-06-09 17:06 + * @return java.lang.String + */ + @GetMapping("/getMaterialProdutionJson") + @ResponseBody + public String getMaterialProdutionStatisticsJson(){ + + List mesMaterialProductionStatisticsList = iMesProductionDataService.getMesMaterialProductionStatisticsList("1002"); + + return JSONArray.toJSONString(mesMaterialProductionStatisticsList); + } + + /** + * 获取MES物料库存 + * @author WenJY + * @date 2022-06-09 17:18 + * @return java.lang.String + */ + @GetMapping("/getMaterialStoreJson") + @ResponseBody + public String getMesMaterialStoreStatisticsJson(){ + List mesMaterialStoreStatisticsList = iMesProductionDataService.getMesMaterialStoreStatisticsList("1002"); + return JSONArray.toJSONString(mesMaterialStoreStatisticsList); + } + /** * 根据型号统计产量 * diff --git a/productionboard/src/main/java/com/productionboard/controller/FoamBoxController.java b/productionboard/src/main/java/com/productionboard/controller/FoamBoxController.java index 2505158..0f477fd 100644 --- a/productionboard/src/main/java/com/productionboard/controller/FoamBoxController.java +++ b/productionboard/src/main/java/com/productionboard/controller/FoamBoxController.java @@ -1,10 +1,20 @@ package com.productionboard.controller; +import com.alibaba.fastjson.JSONArray; +import com.productionboard.entity.MesProduction.MesHourProdutionStatistics; +import com.productionboard.entity.MesProduction.MesMaterialProductionStatistics; +import com.productionboard.entity.MesProduction.MesMaterialStoreStatistics; +import com.productionboard.entity.MesProduction.MesTeamStatistics; +import com.productionboard.service.IMesProductionDataService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; +import java.util.ArrayList; +import java.util.List; + /** * 箱体发泡 * @author WenJY @@ -14,6 +24,9 @@ import org.springframework.web.bind.annotation.ResponseBody; @RequestMapping("/foamBox") public class FoamBoxController { + @Autowired + private IMesProductionDataService iMesProductionDataService; + private String prefix = "foamBox/index"; @GetMapping() @@ -22,6 +35,66 @@ public class FoamBoxController { return prefix; } + /** + * 班组统计 + * @author WenJY + * @date 2022-06-09 16:38 + * @return java.lang.String + */ + @GetMapping("/getTeamStatisticsJson") + @ResponseBody + public String getTeamStatisticsJson(){ + List mesTeamStatisticsList = iMesProductionDataService.getMesTeamStatisticsList("1002"); + if(mesTeamStatisticsList.size()>0){ + return JSONArray.toJSONString(mesTeamStatisticsList.get(0)); + } + return JSONArray.toJSONString(new MesTeamStatistics()); + } + + /** + * 通过工位号获取MES小时产量 + * @author WenJY + * @date 2022-06-09 16:54 + * @return java.lang.String + */ + @GetMapping("/getHourProdutionJson") + @ResponseBody + public String getHourProdutionStatisticsJson(){ + List mesHourProdutionStatisticsList = iMesProductionDataService.getMesHourProdutionStatisticsList("1002"); + if(mesHourProdutionStatisticsList.size()>0){ + return JSONArray.toJSONString(mesHourProdutionStatisticsList); + } + return JSONArray.toJSONString(new ArrayList()); + } + + /** + * 通过工位号获取MES物料产量 + * @author WenJY + * @date 2022-06-09 17:06 + * @return java.lang.String + */ + @GetMapping("/getMaterialProdutionJson") + @ResponseBody + public String getMaterialProdutionStatisticsJson(){ + + List mesMaterialProductionStatisticsList = iMesProductionDataService.getMesMaterialProductionStatisticsList("1002"); + + return JSONArray.toJSONString(mesMaterialProductionStatisticsList); + } + + /** + * 获取MES物料库存 + * @author WenJY + * @date 2022-06-09 17:18 + * @return java.lang.String + */ + @GetMapping("/getMaterialStoreJson") + @ResponseBody + public String getMesMaterialStoreStatisticsJson(){ + List mesMaterialStoreStatisticsList = iMesProductionDataService.getMesMaterialStoreStatisticsList("1002"); + return JSONArray.toJSONString(mesMaterialStoreStatisticsList); + } + /** * 根据型号统计产量 * diff --git a/productionboard/src/main/java/com/productionboard/controller/PreassembleController.java b/productionboard/src/main/java/com/productionboard/controller/PreassembleController.java index f3cb63d..5c00eeb 100644 --- a/productionboard/src/main/java/com/productionboard/controller/PreassembleController.java +++ b/productionboard/src/main/java/com/productionboard/controller/PreassembleController.java @@ -1,10 +1,20 @@ package com.productionboard.controller; +import com.alibaba.fastjson.JSONArray; +import com.productionboard.entity.MesProduction.MesHourProdutionStatistics; +import com.productionboard.entity.MesProduction.MesMaterialProductionStatistics; +import com.productionboard.entity.MesProduction.MesMaterialStoreStatistics; +import com.productionboard.entity.MesProduction.MesTeamStatistics; +import com.productionboard.service.IMesProductionDataService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; +import java.util.ArrayList; +import java.util.List; + /** * 吸附内胆预装看板 * @author WenJY @@ -14,6 +24,9 @@ import org.springframework.web.bind.annotation.ResponseBody; @RequestMapping("/preassemble") public class PreassembleController { + @Autowired + private IMesProductionDataService iMesProductionDataService; + private String prefix = "preassemble/index"; @GetMapping() @@ -22,6 +35,66 @@ public class PreassembleController { return prefix; } + /** + * 班组统计 + * @author WenJY + * @date 2022-06-09 16:38 + * @return java.lang.String + */ + @GetMapping("/getTeamStatisticsJson") + @ResponseBody + public String getTeamStatisticsJson(){ + List mesTeamStatisticsList = iMesProductionDataService.getMesTeamStatisticsList("1002"); + if(mesTeamStatisticsList.size()>0){ + return JSONArray.toJSONString(mesTeamStatisticsList.get(0)); + } + return JSONArray.toJSONString(new MesTeamStatistics()); + } + + /** + * 通过工位号获取MES小时产量 + * @author WenJY + * @date 2022-06-09 16:54 + * @return java.lang.String + */ + @GetMapping("/getHourProdutionJson") + @ResponseBody + public String getHourProdutionStatisticsJson(){ + List mesHourProdutionStatisticsList = iMesProductionDataService.getMesHourProdutionStatisticsList("1002"); + if(mesHourProdutionStatisticsList.size()>0){ + return JSONArray.toJSONString(mesHourProdutionStatisticsList); + } + return JSONArray.toJSONString(new ArrayList()); + } + + /** + * 通过工位号获取MES物料产量 + * @author WenJY + * @date 2022-06-09 17:06 + * @return java.lang.String + */ + @GetMapping("/getMaterialProdutionJson") + @ResponseBody + public String getMaterialProdutionStatisticsJson(){ + + List mesMaterialProductionStatisticsList = iMesProductionDataService.getMesMaterialProductionStatisticsList("1002"); + + return JSONArray.toJSONString(mesMaterialProductionStatisticsList); + } + + /** + * 获取MES物料库存 + * @author WenJY + * @date 2022-06-09 17:18 + * @return java.lang.String + */ + @GetMapping("/getMaterialStoreJson") + @ResponseBody + public String getMesMaterialStoreStatisticsJson(){ + List mesMaterialStoreStatisticsList = iMesProductionDataService.getMesMaterialStoreStatisticsList("1002"); + return JSONArray.toJSONString(mesMaterialStoreStatisticsList); + } + /** * 根据型号统计产量 * diff --git a/productionboard/src/main/java/com/productionboard/controller/TankShellController.java b/productionboard/src/main/java/com/productionboard/controller/TankShellController.java index 32c84d8..2d5e9bb 100644 --- a/productionboard/src/main/java/com/productionboard/controller/TankShellController.java +++ b/productionboard/src/main/java/com/productionboard/controller/TankShellController.java @@ -2,11 +2,18 @@ package com.productionboard.controller; import com.alibaba.fastjson.JSONArray; import com.productionboard.entity.BasicScadaDeviceinfo; +import com.productionboard.entity.MesProduction.MesHourProdutionStatistics; +import com.productionboard.entity.MesProduction.MesMaterialProductionStatistics; +import com.productionboard.entity.MesProduction.MesMaterialStoreStatistics; +import com.productionboard.entity.MesProduction.MesTeamStatistics; +import com.productionboard.service.IMesProductionDataService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; +import java.util.ArrayList; import java.util.List; /** @@ -19,6 +26,9 @@ import java.util.List; @RequestMapping("/tankShell") public class TankShellController { + @Autowired + private IMesProductionDataService iMesProductionDataService; + private String prefix = "tankShell/index"; @GetMapping() @@ -26,6 +36,66 @@ public class TankShellController { return prefix; } + /** + * 班组统计 + * @author WenJY + * @date 2022-06-09 16:38 + * @return java.lang.String + */ + @GetMapping("/getTeamStatisticsJson") + @ResponseBody + public String getTeamStatisticsJson(){ + List mesTeamStatisticsList = iMesProductionDataService.getMesTeamStatisticsList("1002"); + if(mesTeamStatisticsList.size()>0){ + return JSONArray.toJSONString(mesTeamStatisticsList.get(0)); + } + return JSONArray.toJSONString(new MesTeamStatistics()); + } + + /** + * 通过工位号获取MES小时产量 + * @author WenJY + * @date 2022-06-09 16:54 + * @return java.lang.String + */ + @GetMapping("/getHourProdutionJson") + @ResponseBody + public String getHourProdutionStatisticsJson(){ + List mesHourProdutionStatisticsList = iMesProductionDataService.getMesHourProdutionStatisticsList("1002"); + if(mesHourProdutionStatisticsList.size()>0){ + return JSONArray.toJSONString(mesHourProdutionStatisticsList); + } + return JSONArray.toJSONString(new ArrayList()); + } + + /** + * 通过工位号获取MES物料产量 + * @author WenJY + * @date 2022-06-09 17:06 + * @return java.lang.String + */ + @GetMapping("/getMaterialProdutionJson") + @ResponseBody + public String getMaterialProdutionStatisticsJson(){ + + List mesMaterialProductionStatisticsList = iMesProductionDataService.getMesMaterialProductionStatisticsList("1002"); + + return JSONArray.toJSONString(mesMaterialProductionStatisticsList); + } + + /** + * 获取MES物料库存 + * @author WenJY + * @date 2022-06-09 17:18 + * @return java.lang.String + */ + @GetMapping("/getMaterialStoreJson") + @ResponseBody + public String getMesMaterialStoreStatisticsJson(){ + List mesMaterialStoreStatisticsList = iMesProductionDataService.getMesMaterialStoreStatisticsList("1002"); + return JSONArray.toJSONString(mesMaterialStoreStatisticsList); + } + /** * 根据型号统计产量 * diff --git a/productionboard/src/main/java/com/productionboard/entity/MesProduction/MesHourProdutionStatistics.java b/productionboard/src/main/java/com/productionboard/entity/MesProduction/MesHourProdutionStatistics.java new file mode 100644 index 0000000..6052049 --- /dev/null +++ b/productionboard/src/main/java/com/productionboard/entity/MesProduction/MesHourProdutionStatistics.java @@ -0,0 +1,33 @@ +package com.productionboard.entity.MesProduction; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * 小时产量 + * @author WenJY + * @date 2022年06月09日 16:43 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@TableName("SCADA_PRODUCTION_B") +public class MesHourProdutionStatistics implements Serializable { + + /** 小时数 */ + @TableField("hournumber") + private String xValue; + + /** 产量数 */ + @TableField("productionamount") + private String yValue; + + /** 工位编号 */ + @TableField("POSIONID") + private String locationNumber; +} diff --git a/productionboard/src/main/java/com/productionboard/entity/MesProduction/MesMaterialProductionStatistics.java b/productionboard/src/main/java/com/productionboard/entity/MesProduction/MesMaterialProductionStatistics.java new file mode 100644 index 0000000..d423f46 --- /dev/null +++ b/productionboard/src/main/java/com/productionboard/entity/MesProduction/MesMaterialProductionStatistics.java @@ -0,0 +1,33 @@ +package com.productionboard.entity.MesProduction; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * MES物料产量统计 + * @author WenJY + * @date 2022年06月09日 17:01 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@TableName("SCADA_PRODUCTION_C") +public class MesMaterialProductionStatistics implements Serializable { + + /** 物料名称 */ + @TableField("materialname") + private String xValue; + + /** 产量数 */ + @TableField("productionamount") + private String yValue; + + /** 工位编号 */ + @TableField("POSIONID") + private String locationNumber; +} diff --git a/productionboard/src/main/java/com/productionboard/entity/MesProduction/MesMaterialStoreStatistics.java b/productionboard/src/main/java/com/productionboard/entity/MesProduction/MesMaterialStoreStatistics.java new file mode 100644 index 0000000..b75fa8d --- /dev/null +++ b/productionboard/src/main/java/com/productionboard/entity/MesProduction/MesMaterialStoreStatistics.java @@ -0,0 +1,38 @@ +package com.productionboard.entity.MesProduction; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * 库存统计 + * @author WenJY + * @date 2022年06月09日 17:10 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@TableName("SCADA_PRODUCTION_E") +public class MesMaterialStoreStatistics implements Serializable { + + /** 物料名称 */ + @TableField("MATERIALNAME") + private String materialName; + + /** 内胆库库存 */ + @TableField("LINERSTOREAMOUNT") + private String lineStoreAmount; + + /** 箱壳库库存 */ + @TableField("HULLSTOREAMOUNT") + private String hullStoreAmount; + + /** 工位编号 */ + @TableField("POSIONID") + private String locationNumber; + +} diff --git a/productionboard/src/main/java/com/productionboard/entity/MesProduction/MesTeamStatistics.java b/productionboard/src/main/java/com/productionboard/entity/MesProduction/MesTeamStatistics.java new file mode 100644 index 0000000..d8f2d00 --- /dev/null +++ b/productionboard/src/main/java/com/productionboard/entity/MesProduction/MesTeamStatistics.java @@ -0,0 +1,40 @@ +package com.productionboard.entity.MesProduction; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * @author WenJY + * @date 2022年06月09日 16:24 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@TableName("SCADA_PRODUCTION_A") +public class MesTeamStatistics implements Serializable { + + /** 班组名称 */ + @TableField("CLASSNAME") + private String className; + + /** 计划数量 */ + @TableField("PLANAMOUNT") + private String planAmount; + + /** 实际数量 */ + @TableField("ACTUALAMOUNT") + private String actualAmount; + + /** 差异值 */ + @TableField("DIFFERENCEAMOUNT") + private String differenceAmount; + + /** 工位编号 */ + @TableField("POSIONID") + private String locationNumber; +} diff --git a/productionboard/src/main/java/com/productionboard/mapper/MesHourProdutionStatisticsMapper.java b/productionboard/src/main/java/com/productionboard/mapper/MesHourProdutionStatisticsMapper.java new file mode 100644 index 0000000..4ffc4e3 --- /dev/null +++ b/productionboard/src/main/java/com/productionboard/mapper/MesHourProdutionStatisticsMapper.java @@ -0,0 +1,13 @@ +package com.productionboard.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.productionboard.entity.MesProduction.MesHourProdutionStatistics; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author WenJY + * @date 2022年06月09日 16:45 + */ +@Mapper +public interface MesHourProdutionStatisticsMapper extends BaseMapper { +} diff --git a/productionboard/src/main/java/com/productionboard/mapper/MesMaterialProductionStatisticsMapper.java b/productionboard/src/main/java/com/productionboard/mapper/MesMaterialProductionStatisticsMapper.java new file mode 100644 index 0000000..7699b9d --- /dev/null +++ b/productionboard/src/main/java/com/productionboard/mapper/MesMaterialProductionStatisticsMapper.java @@ -0,0 +1,13 @@ +package com.productionboard.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.productionboard.entity.MesProduction.MesMaterialProductionStatistics; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author WenJY + * @date 2022年06月09日 17:02 + */ +@Mapper +public interface MesMaterialProductionStatisticsMapper extends BaseMapper { +} diff --git a/productionboard/src/main/java/com/productionboard/mapper/MesMaterialStoreStatisticsMapper.java b/productionboard/src/main/java/com/productionboard/mapper/MesMaterialStoreStatisticsMapper.java new file mode 100644 index 0000000..801d9fa --- /dev/null +++ b/productionboard/src/main/java/com/productionboard/mapper/MesMaterialStoreStatisticsMapper.java @@ -0,0 +1,14 @@ +package com.productionboard.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.productionboard.entity.MesProduction.MesMaterialStoreStatistics; +import org.apache.ibatis.annotations.Mapper; + +/** + * MES物料库存统计 + * @author WenJY + * @date 2022年06月09日 17:14 + */ +@Mapper +public interface MesMaterialStoreStatisticsMapper extends BaseMapper{ +} diff --git a/productionboard/src/main/java/com/productionboard/mapper/MesTeamStatisticsMapper.java b/productionboard/src/main/java/com/productionboard/mapper/MesTeamStatisticsMapper.java new file mode 100644 index 0000000..f91f26c --- /dev/null +++ b/productionboard/src/main/java/com/productionboard/mapper/MesTeamStatisticsMapper.java @@ -0,0 +1,14 @@ +package com.productionboard.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.productionboard.entity.MesProduction.MesTeamStatistics; +import org.apache.ibatis.annotations.Mapper; + +/** + * Mes班组生产统计 + * @author WenJY + * @date 2022年06月09日 16:26 + */ +@Mapper +public interface MesTeamStatisticsMapper extends BaseMapper { +} diff --git a/productionboard/src/main/java/com/productionboard/service/IMesProductionDataService.java b/productionboard/src/main/java/com/productionboard/service/IMesProductionDataService.java new file mode 100644 index 0000000..cec6210 --- /dev/null +++ b/productionboard/src/main/java/com/productionboard/service/IMesProductionDataService.java @@ -0,0 +1,53 @@ +package com.productionboard.service; + +import com.productionboard.entity.MesProduction.MesHourProdutionStatistics; +import com.productionboard.entity.MesProduction.MesMaterialProductionStatistics; +import com.productionboard.entity.MesProduction.MesMaterialStoreStatistics; +import com.productionboard.entity.MesProduction.MesTeamStatistics; +import com.productionboard.mapper.MesHourProdutionStatisticsMapper; + +import java.util.List; + +/** + * Mes生产数据接口 + * @author WenJY + * @date 2022年06月09日 16:27 + */ +public interface IMesProductionDataService { + + /** + * 通过工位号获取班组计划信息 + * @author WenJY + * @date 2022-06-09 16:33 + * @param locationNumber + * @return java.util.List + */ + List getMesTeamStatisticsList(String locationNumber); + + /** + * 通过工位号获取MES小时产量 + * @author WenJY + * @date 2022-06-09 16:46 + * @param locationNumber + * @return java.util.List + */ + List getMesHourProdutionStatisticsList(String locationNumber); + + /** + * 通过工位号获取MES物料产量 + * @author WenJY + * @date 2022-06-09 17:03 + * @param locationNumber + * @return java.util.List + */ + List getMesMaterialProductionStatisticsList(String locationNumber); + + /** + * 获取MES物料库存 + * @author WenJY + * @date 2022-06-09 17:15 + * @param locationNumber + * @return java.util.List + */ + List getMesMaterialStoreStatisticsList(String locationNumber); +} diff --git a/productionboard/src/main/java/com/productionboard/service/impl/MesProductionDataServiceImpl.java b/productionboard/src/main/java/com/productionboard/service/impl/MesProductionDataServiceImpl.java new file mode 100644 index 0000000..165cb77 --- /dev/null +++ b/productionboard/src/main/java/com/productionboard/service/impl/MesProductionDataServiceImpl.java @@ -0,0 +1,95 @@ +package com.productionboard.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.productionboard.entity.MesProduction.MesHourProdutionStatistics; +import com.productionboard.entity.MesProduction.MesMaterialProductionStatistics; +import com.productionboard.entity.MesProduction.MesMaterialStoreStatistics; +import com.productionboard.entity.MesProduction.MesTeamStatistics; +import com.productionboard.mapper.MesHourProdutionStatisticsMapper; +import com.productionboard.mapper.MesMaterialProductionStatisticsMapper; +import com.productionboard.mapper.MesMaterialStoreStatisticsMapper; +import com.productionboard.mapper.MesTeamStatisticsMapper; +import com.productionboard.service.IMesProductionDataService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @author WenJY + * @date 2022年06月09日 16:28 + */ +@Service +public class MesProductionDataServiceImpl implements IMesProductionDataService { + + @Autowired + private MesTeamStatisticsMapper teamStatisticsMapper; + + @Autowired + private MesHourProdutionStatisticsMapper hourProdutionStatisticsMapper; + + @Autowired + private MesMaterialProductionStatisticsMapper materialProductionStatisticsMapper; + + @Autowired + private MesMaterialStoreStatisticsMapper materialStoreStatisticsMapper; + /** + * 通过工位号获取工位信息 + * @author WenJY + * @date 2022-06-09 16:33 + * @param locationNumber + * @return java.util.List + */ + @Override + public List getMesTeamStatisticsList(String locationNumber) { + QueryWrapper wrapper = new QueryWrapper(); + wrapper.eq("POSIONID",locationNumber); + List mesTeamStatistics = teamStatisticsMapper.selectList(wrapper); + return mesTeamStatistics; + } + + /** + * 通过工位号获取MES小时产量 + * @author WenJY + * @date 2022-06-09 16:47 + * @param locationNumber + * @return java.util.List + */ + @Override + public List getMesHourProdutionStatisticsList(String locationNumber) { + QueryWrapper wrapper = new QueryWrapper(); + wrapper.eq("POSIONID",locationNumber); + List mesHourProdutionStatistics = hourProdutionStatisticsMapper.selectList(wrapper); + return mesHourProdutionStatistics; + } + + /** + * 通过工位号获取MES物料产量 + * @author WenJY + * @date 2022-06-09 17:03 + * @param locationNumber + * @return java.util.List + */ + @Override + public List getMesMaterialProductionStatisticsList(String locationNumber) { + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("POSIONID",locationNumber); + List mesMaterialProductionStatistics = materialProductionStatisticsMapper.selectList(wrapper); + return mesMaterialProductionStatistics; + } + + /** + * 获取MES物料库存 + * @author WenJY + * @date 2022-06-09 17:16 + * @param locationNumber + * @return java.util.List + */ + @Override + public List getMesMaterialStoreStatisticsList(String locationNumber) { + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("POSIONID",locationNumber); + List mesMaterialStoreStatistics = materialStoreStatisticsMapper.selectList(wrapper); + return mesMaterialStoreStatistics; + } +} diff --git a/productionboard/target/classes/com/productionboard/controller/AdsorptionTankController.class b/productionboard/target/classes/com/productionboard/controller/AdsorptionTankController.class index ed2c5a8bc0d8914cf746cfbcca9099ddfbc71444..a14f7f68a636b5a7dd91f7a616773d10b433c017 100644 GIT binary patch literal 3846 zcmb_eTXWM!6h5*O92{|TAwan_2ueeeMvgCW9BvJvK&X?@IE6w;+qJz(6&%Tx-}$tA&i?iH?|%|efq0rSG&evu z_tO#jSPZuY==LDpq4`0&OP`3LlBNY(Owm%B(ljSz_r&n27?ua9IzTHa`Yc8FB|51s zaO<9FG}?7rGxVFxW>s!(YjrMBsZuw#)Rr%-8O&^`mMd20;|wpu>vCJSwJm;Mv$R^1 z&+58iGvVKoXu4vU8>-bZHGN~*3#`?0vpTlH?G?_ps)9hv*6P+>%g`k{w#BXRdIe&M4!g12w$@a| z3V;oT6W(ccl3wi5y%L!{$EUP+)X?V^vvBmw*AVFdP}ZLSyu)gW9)Oi?)@+0IAvGqE zsXgJB7=~YpxDjgoDg*}R&i!|7oMvl$nTi< zDEuGf$GGm2A5w53odRqhCTlLW?N-~qv9o|W(L}w_^mRj`(<1M9tszL~^=+I9)G1#L zmE*XuirJfB`3O;M%9#M{!N=(fx2=? zWua0g(@A<4#Vfq3IyFtE<8(r%cjzc+n#^W%Df(Qdhx7<1T&7ieEYli&k)khU`ihXm zOjO_4TN#n5Mvr8wi=jb}B&qoyD^ArB!m{{1ACI)m^;%8`EwhDkDH~&%@3kxkEOX^-z7S(r=rzm-4fBQRIIP89 z!$QDtaypmIKX-Cm8wX!4bVkqxAoz_B@9nvkelF4LXu5s+1pkVTt_^NMb}sHYVBW@cAUWL5thaVWdvd_}K zL-oPUXdWZn;Q}!-AH1iypha61AX!tZu^PjL%(6Fe-%#&XmlkJDlkG?(+lH9A_b!Pp z1`&8(f{y+Bnb$Q!U9nq1-E=OxnRbeI_hQDSCo?I zCptKmd_@BZ`i=I#_=D09U(%p>g?gV8E`ukL3Y=M_J_&qzC-ji((hDsE{RMg-VJ|{k zfS}hjoT5t(eHqv)kc_U9WYHLnLqnnueZZ?8;3FNtvHOa!7(mtoFc}ZvKn#FI0Js+eAh!!Z4%|fnD0l#h@c<6S0C)@l zYcT+(b^(~8QY3(B4?x)ma20xD&-7;wRmQrT&!v5nlGF|a?QFm#OlEK(qH?_Kg}4$C k;_&Ve-y_72|1rc>Cq#m-0e6C~`(OGa%x3}0-EKGj0qeccdjJ3c delta 520 zcmb7<%}T>i5QWdZ$xYI7TX!QNeBmDdHP+>CRQ5RYD~dtKzOZaVvQbQB(v4 z1(!a8K8OoJJU1y-(2birb53T?H#seSBr7kU_m2S9u`eCD<(r_Y(-*Aq>K#NiEpK65QA#BFx~xEoD`Oa8 zmxxB`j8X}@X-?>v8kLSw)f*U>Y@&d^6}s6U+iI{q&LRCZ!zwT_OxmQ+m9%JT07bgVuq!+vtR57EOErbEWe9}M-Iu|Y=T9}JDig$Ri}K@x@G O6{#YPQh16UoBaYLzcESx diff --git a/productionboard/target/classes/com/productionboard/controller/AluminumTtankController.class b/productionboard/target/classes/com/productionboard/controller/AluminumTtankController.class index dcb27784ba54b1484f08bd3fe0771ca3c8351a1f..85f4c74ce0794d6852015191f46377541d0c67fc 100644 GIT binary patch literal 3911 zcmb_fTT|Oc6h6WbJ4WQ<1R9c*66aEaDKfrr%dJ3eqy|zoiy!Ce?WgzrqgdFS(Y3rp_7^!NxSFvoo~;cUH<;(kH3hhK#!AjoNgrO z=0Q3}xA^0Bf);z}4t>^3C0gQ-kQQIkwZEGSz6rF<(;s`NzOktJ2uwxzPgJ#pz}MN_P+0>wryt_#$?px2PZ;gX`UfdJ88k6f~&Yx*1Rr8LiYXbGxnHiifK`hV_ zCw9|PREf_3*g!Dfy+$kN~<#7Ae|Jcp9a9tL^hj?(}qY7XcL=Tq=)oKq_0Vi zQ$?gI)dZRiYoGh;AR;l^6zG`U+3o%{XBhGxuNINEXj7zZ$OZLT@?g4#W6Dg=ZX}1@ z-?OxVJkT=Jv%?c(Y127v(zEIELM}Iz9!uM8hzn=<@A+7$Wv&Qd z&%zGX@-|Z(&rf%td^SVg>}grr|hcZ2D5LJqO9y1_>s8LgUa7 z5Tlj(4=&*IEx@7=a3bSC?E}<9AyBU&^rwJ2hm~3IK|Sw59YiWYsC;I^5A|d?)SL@7 z??K&gp&o5PJu0Jk5^Yu>S!s`E>kCKm14B(3)(8x7)&l>fx<#uaYI}U j36Xj;#PLXPFFfal+W45iSE@OdNOwhx;NXIx(=C z_ylgoCvb5#o>oK?7MI@ho$ot8eJX#Xs?VR}34jK65-{Of*oY&Bs)bDpH4|GVwslfW zN`=#*8u(rB%pF{Mqfx`y0}kcG9#n{Q><=nNGje%CcnSlul}9B<-HtcfLJ)cKPe?-~S|{96gECF}e|> zoBQb~-QthiFvU6={(_mg2Nbccb)qoZ@tY%T}UPiqioxxW{L{h|y|{?nmj% zC_Rv9NLysqUDK#GE4F6n*Hv3BF>_0+Fo~v$6{D^+JYm^T&8lJvv9i$3@DjYPG<936 zvsKN~$~88t>xQjz|CU6BqG4_-R>Rcv%?(qnvu(qCrj(hgTgrx7u?=%aQ9T1?wrLyN zn#rngyRTug4ehx^iQ-drOI2#BzNwUK?ukn;Yr1A%l_)ZLVO65ud83LX4iz<>Ej8<9 zX5LeQg&P|cwYI978Xvopz4j9g;4+~pR}9@YjarSF%1uM9&l%6>y%_}V)AT9>s$-)U z!f@q66W(TJr3^!VuD6)Is5TlRoqTuy3=T7yVRk3IW%pCHMDn>z&i6$F#4sdh;#rbE6)Jlp)*Qfft4+_)&$*y zN|!_~?wOYrW;IYdY|g0eAlNV*-Zq-1Q?|USIw=|kMO_pGSNGp5|1Pc_A_jQ20R^#Y zNlY)QHbc?Xy5c?q+yNzLPqwoY;2*vh_;>ktG8p0+1hhECB8$^p)W%rCW@T-7LWh&z zGVf6MKgjRmx=nsSK|neQ*d9!^w%oKEO?z%<5e=e-Mxp5&hD4`$-rcnZAzje7uqV)< zJTqxr^OET#ox+}Vhlhy4@U(K4Py2GnOrVUz`X%lj(_9DJNS;c{5C1=*+Bku1-(p2?l zXpza8k;(C-CC-)POtLhe$xJ23lTO>=!fF0{IUZ`6>9j2PEz`N_sdN|1Y^UY4&oVQe z&gQxp<~j|te#308&<$(8(=g{VoGfJ0*_Td^>*L_7fin?w0SJEMBYS(V$6reHHk@vc zKF)tq$9WBIL3Ta^%7Q|V`KkQGSFp zX_!93mn>9i1fdAuNjd`!?nc3gyXhPIg(9!;(E}3^o1oM-?sJV>$j(AbqH~_3A7IIY zrr@YI(f5Y-^-wYOhN2SvL8O)q#x>uaHts1fgZ1}zQmDYs$Hfc>l#I9+ZVJ|su7r6#sYR493C4 z)x_Pu;$l3lh$b#Bz32PRcOJd1yg9X(kH;qfJJ^iDMAgDd6b5P*RxPZVSU0hu;^Lu@ zKOTAmx7R*(`|d@zedu}qpfzxPudklPo+zrWEISd`>-Ylly44-F)s?J@U6nHG%G4co zBVThd#08v=-|8LtqlW8UwnsKBMDO2?iB>_C$tKGPXu*~!LQE0AwmOfO#twHevOtnt z3JD^cEO?W|9ACk0nin>4gHyoCtqJry0u6zI5iYa8#BwU0pRyUg0t+*v15QEcSf(S* z`j69Bl^S$xhi=*M>f24{l;v*-1inG34DsR_L?1ci!;He844IaHBla25MB;>+|7R4# T3=Ji!G?Zs8Dx8;QO_o0auF*Ao diff --git a/productionboard/target/classes/com/productionboard/controller/PreassembleController.class b/productionboard/target/classes/com/productionboard/controller/PreassembleController.class index 2b4b644164efcf021bc8b99f2bdfc09d2041bc0a..cd4196e1b0afd4ef5626dcf61a60d14edb8325b0 100644 GIT binary patch literal 3903 zcmb_f+fv(B6y3rQJ4U(S1R9c*5(iR(DKfr*A-4j#k(x_!N}3Xq%JzXMktJ7>p)`}X z_NmW(?Kh+|?WAdE`T_l>OsDHevMf1rLMJsdlFr$;wU@T`+5G*_AAb>1jvmM9B;AP7 z&BJtpZt=_Q7%lbE9r~=7inPoxD{)$-wJ3car#RiSX%02cnMzD8=9rm z*oI;%WtGiqnr_M5zbR0ms2e+ySvM4IXWNi#Y)?0yN@XT%rnD_rEZx|bWY0jFZ&>=C zVz4UQ9;zE`TlrR?MDdBdD@&@Z?MNkyd*af|il$gs1&WMa+z_aHQLiG2V?{+{D~(#2 z8Fyu1;l_GJRySlr;cIuZ+j^`3+;nKl6kuXwrMEER|vC&-WIymgRcgNvVH_S$COSD{=NrOR1Q5OkESGzsAhqei34Ujytg% zmZD002fzk`+3wey8LzbIUJgy2;XPXWQs7mMw@TB9sAv|7wyg_vmgn7BYXH(EZ5Q7J znv|!8w($YC3zfu6DAEeMsqoHoI<$LC@?IuTD)dt@Q7%lk@Yza%eiPnB!y3vu`=-H6 zUsDm$(!C}o(iu7{P@iv0vRj!*gLGP?ei{HfQ|WXjN}D1*pe=mZB0Z!>B7IGAl*%Gi zs4CE0*jaI~?jaJRErCwhJ>BkI^M)bs^GXqEo3=#Sfm~3Z#SbT|IH1hr+-7{({XI(> zvi211GC4OqHIX!(b0#^LEG=d-Gs%gh-GaDqmj9klgj#0WEen3jbZ&Mg-N7>3ZaM3- z%*>{pwMG}CO6k^mAeL{H{R&Cva;pSuH$@Y8JWz?!DtLNf=Lb{YH^rY~>+b;}8b=aM|ct)RT@Sp!gG?&Lxa1Ku;Old#($;A3p{ke#EDH%Y8m&q#!X}+&=P3WbMzxD zdC(LbbtigW(V;FXre0B0pr7ezD)NeAUGzI0e(@*8@4uv8{s?uBkSKvW$0AZ11WX}R z)($=3xO78{*tFEOF2-F0P4{YsMiqsQ$U@^n_2Wh9rd6NB9$OizBA>AdO93x#)X>opl-TQ z`X#h{~VU@?jb)C?>cSk|$kW7Utd z$8uqBAU(Th?c1(>*tNE$?0cqX_od6w^xyebQJEEM7*z&l~AkNJ0 z!1BAI>c8=pe<5B=F~k`%&Z%X(uGJ&MhAoe*^8^e;ucP`sAEHV49xQ3(#T9BmZ!gCP`0X6j_}OE r5X{9a3PHx)9~t6zMw>D^|Hx1g#UO&CL_r+oaf@_?g!!O~T3h%6Py9UT diff --git a/productionboard/target/classes/com/productionboard/controller/TankShellController.class b/productionboard/target/classes/com/productionboard/controller/TankShellController.class index 78291985314d686f7fa6862a9a93900e3fabdaea..b237e2740faed0a4af8d280b465db014156abadb 100644 GIT binary patch literal 3893 zcmb_e+j7%Z6y35DY#ebjBqcy;FbNHD8aciYCtOMrZb_X4;xv?o6lD7(2xQ5Xs z$Wz~W>^IPvb|~#kKcL^lbh?ft%aW04I@F$#bk4r5y|lH@{_F4G|0JS3Jxb6qx*n$+ z`{^j%Zv>vCsG5RJ( z_XHYLmY8|l&}+@ArRdr<*^{TIgnY5nflDnx)j) zx?(C7mCb6JZpqxgDNwPb8{3lEFcfWj%aH5rsct-xDooZ)X-lqJy0I(Co`E#mwDhNn z!D?{3uVJt)<(WXq(qnl?mQ-2WmdY0Q#HE)MO|h;B6dgUkE>O?BUPBUxN{YsooAnAa z)?{Ge#(Gs&*JVTDYj?B9dZYkcJ~ZX3u33hzs?3nqWbH}$5mVK9Zx5k+6|KgA>)7b| zFl71Al%KMSRDq#C+ndZW<+;<`EnT2fJn!yW1CTCgJNPEh zqC7P;jZe5;s3cKFkyhCah4-D~A-!XQ_c4Lep&x>YVqv<4k5&qFoA3@A)=pO0_f2N{ zT1rB)S`AF3lXMFG(c6&hCMMD#oe-&?2EfZ?CXR~MkE#5C{)4e-0av)g2r;_gpHv*s{9xrEWmT!j6&cf*X+6foAuX0y zmhDedAkotK${D%@I_F2=dht8KikTuaZNx-Q0}22 z`V3E^ql(oTtOQEYS!i%K5?0(z@7OOCeT|0*aR)p$(Xh|B*EMb-8-`q<5zo<&u;fA0 zaMY9ReM|cyR7$_4m_R?#!F2R3#Uu0^?SK6TCGNeUKK=;x9y?qTccKh%PJ)0eLgnqy z1CC2Kw1~ZP^f|(gLYwF0?3~Bb7^Z!iw4qI&b_AV3mDvj(Bi-!DtW;-zfkNf1yFHF1P@ux&t`e1;7IUc-RF%@jU=V zRB;%985h7s55Q&U@#^YL9x0{UW$I*Irzk!11#OjT6egGOg2F;vc0*hV36Xq1#7l&D c^&dlgX@`i=Rp5@GT3STUVLcB}PGMgA2kCLv`v3p{ delta 505 zcma)$zfQtX6vn?(xU|q#6tK!)MN~8lCWghq7`+7E=`EeMimMe5ay0SJ