From c7d040b8365cbca07e487ccf1757a4b08ad0d347 Mon Sep 17 00:00:00 2001 From: wangh <123456> Date: Wed, 20 Jul 2022 16:51:44 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=20=E5=8F=91=E6=B3=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../broad/AllBroadHTMLController.java | 3 + .../controller/broad/FPBroadController.java | 44 +++--- .../controller/BaseFpPlanqtyController.java | 135 ++++++++++++++++++ .../ruoyi/system/domain/BaseFpPlanqty.java | 51 +++++++ .../system/mapper/BaseFpPlanqtyMapper.java | 61 ++++++++ .../ruoyi/system/mapper/BroadDataMapper.java | 2 + .../system/service/IBaseFpPlanqtyService.java | 61 ++++++++ .../system/service/IBroadDruidService.java | 1 + .../impl/BaseFpPlanqtyServiceImpl.java | 94 ++++++++++++ .../service/impl/BroadDruidServiceImpl.java | 5 + .../mapper/system/BaseFpPlanqtyMapper.xml | 60 ++++++++ .../mapper/system/BroadDataMapper.xml | 3 + .../templates/system/base_planqty/add.html | 31 ++++ .../system/base_planqty/base_planqty.html | 82 +++++++++++ .../templates/system/base_planqty/edit.html | 32 +++++ 15 files changed, 644 insertions(+), 21 deletions(-) create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/controller/BaseFpPlanqtyController.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/domain/BaseFpPlanqty.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/mapper/BaseFpPlanqtyMapper.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/IBaseFpPlanqtyService.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/BaseFpPlanqtyServiceImpl.java create mode 100644 ruoyi-system/src/main/resources/mapper/system/BaseFpPlanqtyMapper.xml create mode 100644 ruoyi-system/src/main/resources/templates/system/base_planqty/add.html create mode 100644 ruoyi-system/src/main/resources/templates/system/base_planqty/base_planqty.html create mode 100644 ruoyi-system/src/main/resources/templates/system/base_planqty/edit.html diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/broad/AllBroadHTMLController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/broad/AllBroadHTMLController.java index cc837e5..d5e4192 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/broad/AllBroadHTMLController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/broad/AllBroadHTMLController.java @@ -5,6 +5,7 @@ import com.ruoyi.system.domain.BoxOutput; import com.ruoyi.system.domain.OrderInfo; import com.ruoyi.system.domain.QualityInfo; import com.ruoyi.system.service.IBroadDataService; +import com.ruoyi.system.service.IBroadDruidService; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; @@ -54,4 +55,6 @@ public class AllBroadHTMLController { } + + } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/broad/FPBroadController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/broad/FPBroadController.java index f5dde2b..2b53815 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/broad/FPBroadController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/broad/FPBroadController.java @@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONObject; import com.ruoyi.system.domain.BoxPlanCompletion; import com.ruoyi.system.domain.OrderInfo; import com.ruoyi.system.service.IBroadDataService; +import com.ruoyi.system.service.IBroadDruidService; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; @@ -13,6 +14,7 @@ import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; + import java.io.IOException; import java.util.HashMap; import java.util.List; @@ -30,7 +32,8 @@ import java.util.Set; public class FPBroadController { @Autowired IBroadDataService service; - + @Autowired + IBroadDruidService iBroadDruidService; @PostMapping("/selectOrderExecution") @@ -69,30 +72,24 @@ public class FPBroadController { @PostMapping("/selectDeviceState") @ApiOperation("设备状态查询") private String selectDeviceState(){ - - Set strings = map.keySet(); + Map stateMap = null; + try { + stateMap =new HashMap<>(); - Map stateMap=new HashMap<>(); - - for (String key:strings) { - Process p = null; - - try { - p = Runtime.getRuntime().exec("/system/bin/ping -c 1 10.10.60.176"); - int status = p.waitFor(); - System.out.println(status); - - } catch (IOException e) { - e.printStackTrace(); - } catch (InterruptedException e) { - e.printStackTrace(); + for (String key:strings) { + ProcessBuilder procBuilder = new ProcessBuilder("ping", map.get(key),"-w","2","-n","1"); + Process proc = procBuilder.start(); + int exitValue = proc.waitFor(); + stateMap.put(key,exitValue); } - - + } catch (IOException e) { + System.out.println(e.getMessage()); + e.printStackTrace(); + } catch (InterruptedException e) { + e.printStackTrace(); } - String json=JSONObject.toJSONString(map); - + String json=JSONArray.toJSONString(stateMap); return json; } @@ -104,4 +101,9 @@ public class FPBroadController { return JSONArray.toJSONString(service.selectFpStock()); } + @PostMapping("/selectTeamGroups") + @ApiOperation("班组是早晚") + public int selectTeamGroups(){ + return iBroadDruidService.selectTeamGroups(); + } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/controller/BaseFpPlanqtyController.java b/ruoyi-system/src/main/java/com/ruoyi/system/controller/BaseFpPlanqtyController.java new file mode 100644 index 0000000..c8f79df --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/controller/BaseFpPlanqtyController.java @@ -0,0 +1,135 @@ +package com.ruoyi.system.controller; + +import java.util.List; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.system.domain.BaseFpPlanqty; +import com.ruoyi.system.service.IBaseFpPlanqtyService; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * 发泡线工位目标Controller + * + * @author ruoyi + * @date 2022-07-20 + */ +@Controller +@RequestMapping("/system/base_planqty") +public class BaseFpPlanqtyController extends BaseController +{ + private String prefix = "system/base_planqty"; + + @Autowired + private IBaseFpPlanqtyService baseFpPlanqtyService; + + @RequiresPermissions("system:base_planqty:view") + @GetMapping() + public String base_planqty() + { + return prefix + "/base_planqty"; + } + + /** + * 查询发泡线工位目标列表 + */ + @RequiresPermissions("system:base_planqty:list") + @PostMapping("/list") + @ResponseBody + public TableDataInfo list(BaseFpPlanqty baseFpPlanqty) + { + startPage(); + List list = baseFpPlanqtyService.selectBaseFpPlanqtyList(baseFpPlanqty); + return getDataTable(list); + } + + /** + * 导出发泡线工位目标列表 + */ + @RequiresPermissions("system:base_planqty:export") + @Log(title = "发泡线工位目标", businessType = BusinessType.EXPORT) + @PostMapping("/export") + @ResponseBody + public AjaxResult export(BaseFpPlanqty baseFpPlanqty) + { + List list = baseFpPlanqtyService.selectBaseFpPlanqtyList(baseFpPlanqty); + ExcelUtil util = new ExcelUtil(BaseFpPlanqty.class); + return util.exportExcel(list, "发泡线工位目标数据"); + } + + /** + * 新增发泡线工位目标 + */ + @GetMapping("/add") + public String add() + { + return prefix + "/add"; + } + + /** + * 新增保存发泡线工位目标 + */ + @RequiresPermissions("system:base_planqty:add") + @Log(title = "发泡线工位目标", businessType = BusinessType.INSERT) + @PostMapping("/add") + @ResponseBody + public AjaxResult addSave(BaseFpPlanqty baseFpPlanqty) + { + + List list = baseFpPlanqtyService.selectBaseFpPlanqtyList(null); + Long id=1L; + System.out.println(list); + if (list!=null||!list.isEmpty()){ + id=list.get(list.size()-1).getId()+1; + } + baseFpPlanqty.setId(id); + return toAjax(baseFpPlanqtyService.insertBaseFpPlanqty(baseFpPlanqty)); + } + + /** + * 修改发泡线工位目标 + */ + @RequiresPermissions("system:base_planqty:edit") + @GetMapping("/edit/{id}") + public String edit(@PathVariable("id") Long id, ModelMap mmap) + { + BaseFpPlanqty baseFpPlanqty = baseFpPlanqtyService.selectBaseFpPlanqtyById(id); + mmap.put("baseFpPlanqty", baseFpPlanqty); + return prefix + "/edit"; + } + + /** + * 修改保存发泡线工位目标 + */ + @RequiresPermissions("system:base_planqty:edit") + @Log(title = "发泡线工位目标", businessType = BusinessType.UPDATE) + @PostMapping("/edit") + @ResponseBody + public AjaxResult editSave(BaseFpPlanqty baseFpPlanqty) + { + return toAjax(baseFpPlanqtyService.updateBaseFpPlanqty(baseFpPlanqty)); + } + + /** + * 删除发泡线工位目标 + */ + @RequiresPermissions("system:base_planqty:remove") + @Log(title = "发泡线工位目标", businessType = BusinessType.DELETE) + @PostMapping( "/remove") + @ResponseBody + public AjaxResult remove(String ids) + { + return toAjax(baseFpPlanqtyService.deleteBaseFpPlanqtyByIds(ids)); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/BaseFpPlanqty.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/BaseFpPlanqty.java new file mode 100644 index 0000000..3d50f2b --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/BaseFpPlanqty.java @@ -0,0 +1,51 @@ +package com.ruoyi.system.domain; + +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * 发泡线工位目标对象 base_fp_planqty + * + * @author ruoyi + * @date 2022-07-20 + */ +public class BaseFpPlanqty extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 目标数 */ + @Excel(name = "目标数") + private Long qty; + + /** $column.columnComment */ + private Long id; + + public void setQty(Long qty) + { + this.qty = qty; + } + + public Long getQty() + { + return qty; + } + public void setId(Long id) + { + this.id = id; + } + + public Long getId() + { + return id; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("qty", getQty()) + .append("id", getId()) + .toString(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/BaseFpPlanqtyMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/BaseFpPlanqtyMapper.java new file mode 100644 index 0000000..bc8de1a --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/BaseFpPlanqtyMapper.java @@ -0,0 +1,61 @@ +package com.ruoyi.system.mapper; + +import java.util.List; +import com.ruoyi.system.domain.BaseFpPlanqty; + +/** + * 发泡线工位目标Mapper接口 + * + * @author ruoyi + * @date 2022-07-20 + */ +public interface BaseFpPlanqtyMapper +{ + /** + * 查询发泡线工位目标 + * + * @param id 发泡线工位目标主键 + * @return 发泡线工位目标 + */ + public BaseFpPlanqty selectBaseFpPlanqtyById(Long id); + + /** + * 查询发泡线工位目标列表 + * + * @param baseFpPlanqty 发泡线工位目标 + * @return 发泡线工位目标集合 + */ + public List selectBaseFpPlanqtyList(BaseFpPlanqty baseFpPlanqty); + + /** + * 新增发泡线工位目标 + * + * @param baseFpPlanqty 发泡线工位目标 + * @return 结果 + */ + public int insertBaseFpPlanqty(BaseFpPlanqty baseFpPlanqty); + + /** + * 修改发泡线工位目标 + * + * @param baseFpPlanqty 发泡线工位目标 + * @return 结果 + */ + public int updateBaseFpPlanqty(BaseFpPlanqty baseFpPlanqty); + + /** + * 删除发泡线工位目标 + * + * @param id 发泡线工位目标主键 + * @return 结果 + */ + public int deleteBaseFpPlanqtyById(Long id); + + /** + * 批量删除发泡线工位目标 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteBaseFpPlanqtyByIds(String[] ids); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/BroadDataMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/BroadDataMapper.java index b781101..f68ca99 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/BroadDataMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/BroadDataMapper.java @@ -58,6 +58,8 @@ public interface BroadDataMapper { void insertXK_H_QTY(@Param("name") String name,@Param("nowOut") int nowOut,@Param("cha") int cha,@Param("zs") int zsQty); + int selectTeamGroups(); + /////////////////////////////////////////////////////////////////////////// // 6 diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/IBaseFpPlanqtyService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/IBaseFpPlanqtyService.java new file mode 100644 index 0000000..bfae360 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/IBaseFpPlanqtyService.java @@ -0,0 +1,61 @@ +package com.ruoyi.system.service; + +import java.util.List; +import com.ruoyi.system.domain.BaseFpPlanqty; + +/** + * 发泡线工位目标Service接口 + * + * @author ruoyi + * @date 2022-07-20 + */ +public interface IBaseFpPlanqtyService +{ + /** + * 查询发泡线工位目标 + * + * @param id 发泡线工位目标主键 + * @return 发泡线工位目标 + */ + public BaseFpPlanqty selectBaseFpPlanqtyById(Long id); + + /** + * 查询发泡线工位目标列表 + * + * @param baseFpPlanqty 发泡线工位目标 + * @return 发泡线工位目标集合 + */ + public List selectBaseFpPlanqtyList(BaseFpPlanqty baseFpPlanqty); + + /** + * 新增发泡线工位目标 + * + * @param baseFpPlanqty 发泡线工位目标 + * @return 结果 + */ + public int insertBaseFpPlanqty(BaseFpPlanqty baseFpPlanqty); + + /** + * 修改发泡线工位目标 + * + * @param baseFpPlanqty 发泡线工位目标 + * @return 结果 + */ + public int updateBaseFpPlanqty(BaseFpPlanqty baseFpPlanqty); + + /** + * 批量删除发泡线工位目标 + * + * @param ids 需要删除的发泡线工位目标主键集合 + * @return 结果 + */ + public int deleteBaseFpPlanqtyByIds(String ids); + + /** + * 删除发泡线工位目标信息 + * + * @param id 发泡线工位目标主键 + * @return 结果 + */ + public int deleteBaseFpPlanqtyById(Long id); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/IBroadDruidService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/IBroadDruidService.java index 82fc61e..a7ef442 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/IBroadDruidService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/IBroadDruidService.java @@ -6,4 +6,5 @@ package com.ruoyi.system.service; */ public interface IBroadDruidService { + int selectTeamGroups(); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/BaseFpPlanqtyServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/BaseFpPlanqtyServiceImpl.java new file mode 100644 index 0000000..35f75b6 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/BaseFpPlanqtyServiceImpl.java @@ -0,0 +1,94 @@ +package com.ruoyi.system.service.impl; + +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.system.mapper.BaseFpPlanqtyMapper; +import com.ruoyi.system.domain.BaseFpPlanqty; +import com.ruoyi.system.service.IBaseFpPlanqtyService; +import com.ruoyi.common.core.text.Convert; + +/** + * 发泡线工位目标Service业务层处理 + * + * @author ruoyi + * @date 2022-07-20 + */ +@Service +public class BaseFpPlanqtyServiceImpl implements IBaseFpPlanqtyService +{ + @Autowired + private BaseFpPlanqtyMapper baseFpPlanqtyMapper; + + /** + * 查询发泡线工位目标 + * + * @param id 发泡线工位目标主键 + * @return 发泡线工位目标 + */ + @Override + public BaseFpPlanqty selectBaseFpPlanqtyById(Long id) + { + return baseFpPlanqtyMapper.selectBaseFpPlanqtyById(id); + } + + /** + * 查询发泡线工位目标列表 + * + * @param baseFpPlanqty 发泡线工位目标 + * @return 发泡线工位目标 + */ + @Override + public List selectBaseFpPlanqtyList(BaseFpPlanqty baseFpPlanqty) + { + return baseFpPlanqtyMapper.selectBaseFpPlanqtyList(baseFpPlanqty); + } + + /** + * 新增发泡线工位目标 + * + * @param baseFpPlanqty 发泡线工位目标 + * @return 结果 + */ + @Override + public int insertBaseFpPlanqty(BaseFpPlanqty baseFpPlanqty) + { + return baseFpPlanqtyMapper.insertBaseFpPlanqty(baseFpPlanqty); + } + + /** + * 修改发泡线工位目标 + * + * @param baseFpPlanqty 发泡线工位目标 + * @return 结果 + */ + @Override + public int updateBaseFpPlanqty(BaseFpPlanqty baseFpPlanqty) + { + return baseFpPlanqtyMapper.updateBaseFpPlanqty(baseFpPlanqty); + } + + /** + * 批量删除发泡线工位目标 + * + * @param ids 需要删除的发泡线工位目标主键 + * @return 结果 + */ + @Override + public int deleteBaseFpPlanqtyByIds(String ids) + { + return baseFpPlanqtyMapper.deleteBaseFpPlanqtyByIds(Convert.toStrArray(ids)); + } + + /** + * 删除发泡线工位目标信息 + * + * @param id 发泡线工位目标主键 + * @return 结果 + */ + @Override + public int deleteBaseFpPlanqtyById(Long id) + { + return baseFpPlanqtyMapper.deleteBaseFpPlanqtyById(id); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/BroadDruidServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/BroadDruidServiceImpl.java index 17b36d9..2279d52 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/BroadDruidServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/BroadDruidServiceImpl.java @@ -24,4 +24,9 @@ public class BroadDruidServiceImpl implements IBroadDruidService { int zsQty=mapper.selectNowXkOutPut1(); mapper.insertXK_H_QTY(boxOutput.getName(),nowOut,nowOut-qty,zsQty); } + + @Override + public int selectTeamGroups() { + return mapper.selectTeamGroups(); + } } diff --git a/ruoyi-system/src/main/resources/mapper/system/BaseFpPlanqtyMapper.xml b/ruoyi-system/src/main/resources/mapper/system/BaseFpPlanqtyMapper.xml new file mode 100644 index 0000000..8240906 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/system/BaseFpPlanqtyMapper.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + select qty, id from base_fp_planqty + + + + + + + + + SELECT seq_base_fp_planqty.NEXTVAL as id FROM DUAL + + insert into base_fp_planqty + + qty, + id, + + + #{qty}, + #{id}, + + + + + update base_fp_planqty + + qty = #{qty}, + + where id = #{id} + + + + delete from base_fp_planqty where id = #{id} + + + + delete from base_fp_planqty where id in + + #{id} + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/system/BroadDataMapper.xml b/ruoyi-system/src/main/resources/mapper/system/BroadDataMapper.xml index 10d7b14..40b3a1c 100644 --- a/ruoyi-system/src/main/resources/mapper/system/BroadDataMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/BroadDataMapper.xml @@ -466,4 +466,7 @@ insert into XK_H_QTY(H_NAME, QTY, QTY_C,ZS_C) values (#{name},#{nowOut},#{cha},#{zs}) + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/templates/system/base_planqty/add.html b/ruoyi-system/src/main/resources/templates/system/base_planqty/add.html new file mode 100644 index 0000000..de94275 --- /dev/null +++ b/ruoyi-system/src/main/resources/templates/system/base_planqty/add.html @@ -0,0 +1,31 @@ + + + + + + +
+
+
+ +
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/templates/system/base_planqty/base_planqty.html b/ruoyi-system/src/main/resources/templates/system/base_planqty/base_planqty.html new file mode 100644 index 0000000..8f7eb9b --- /dev/null +++ b/ruoyi-system/src/main/resources/templates/system/base_planqty/base_planqty.html @@ -0,0 +1,82 @@ + + + + + + +
+
+
+
+
+ +
+
+
+ + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/templates/system/base_planqty/edit.html b/ruoyi-system/src/main/resources/templates/system/base_planqty/edit.html new file mode 100644 index 0000000..7220d30 --- /dev/null +++ b/ruoyi-system/src/main/resources/templates/system/base_planqty/edit.html @@ -0,0 +1,32 @@ + + + + + + +
+
+ +
+ +
+ +
+
+
+
+ + + + \ No newline at end of file