From cd753bfe2cdaf09454d2b49d959ddf0a2e04cb61 Mon Sep 17 00:00:00 2001 From: o-yamamoto <2026_04_00886@it-college.co.jp> Date: Mon, 28 Sep 2026 13:16:38 +0900 Subject: [PATCH] =?UTF-8?q?=E7=A4=BE=E5=93=A1=E6=83=85=E5=A0=B1=E7=99=BB?= =?UTF-8?q?=E9=8C=B2=E6=99=82=E3=81=AE=E3=83=97=E3=83=AB=E3=83=80=E3=82=A6?= =?UTF-8?q?=E3=83=B3=E3=81=AE=E5=88=86=E5=89=B2=E5=8C=96=E3=81=AE=E7=9B=B8?= =?UTF-8?q?=E8=AB=87=E3=81=AE=E5=8F=82=E7=85=A7=E7=94=A8=E3=81=AE=E4=B8=80?= =?UTF-8?q?=E6=99=82=E3=83=97=E3=83=83=E3=82=B7=E3=83=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/domain/service/SearchDepartment.java | 4 + .../service/impl/RegisterDepartmentImpl.java | 41 ++++--- .../service/impl/SearchDepartmentImpl.java | 44 ++++---- .../service/impl/UpdateDepartmentImpl.java | 30 ++++-- .../app/infra/entity/DepartmentEntity.java | 19 ++++ .../repository/DepartmentRepository.java | 11 +- .../InsertDepartmentController.java | 32 +++--- .../InsertEmployeeInputController.java | 49 ++++++++- .../UpdateDepartmentResultController.java | 22 ++-- .../presentation/form/InsertEmployeeForm.java | 12 ++- .../templates/insertDepartmentInput.html | 38 +++++-- .../templates/insertEmployeeConfirm.html | 50 +++++++-- .../templates/insertEmployeeInput.html | 100 ++++++++++++++---- .../templates/updateEmployeeInput.html | 44 ++++++-- 14 files changed, 371 insertions(+), 125 deletions(-) diff --git a/EM-System/src/main/java/com/example/rhizome/app/domain/service/SearchDepartment.java b/EM-System/src/main/java/com/example/rhizome/app/domain/service/SearchDepartment.java index ce9d5a9..c6ff140 100644 --- a/EM-System/src/main/java/com/example/rhizome/app/domain/service/SearchDepartment.java +++ b/EM-System/src/main/java/com/example/rhizome/app/domain/service/SearchDepartment.java @@ -24,6 +24,10 @@ public interface SearchDepartment { List searchByDepartment(SearchConditionDepartment searchConditionDepartment); List searchByDivision(SearchConditionDepartment searchConditionDepartment); + + ListsearchByIdHeadquarters(Integer idHeadquarters); + + ListsearchByIdDepartment(Integer idDepartment); // List searchByWithLike(SearchConditionDepartment searchConditionDepartment); } diff --git a/EM-System/src/main/java/com/example/rhizome/app/domain/service/impl/RegisterDepartmentImpl.java b/EM-System/src/main/java/com/example/rhizome/app/domain/service/impl/RegisterDepartmentImpl.java index f4de308..75693ee 100644 --- a/EM-System/src/main/java/com/example/rhizome/app/domain/service/impl/RegisterDepartmentImpl.java +++ b/EM-System/src/main/java/com/example/rhizome/app/domain/service/impl/RegisterDepartmentImpl.java @@ -45,26 +45,39 @@ public class RegisterDepartmentImpl implements RegisterDepartment { public void registerDepartment(DivisionEntity divisionEntity) { DepartmentEntity departmentEntity = divisionEntity.getDepartment(); HeadquartersEntity headquartersEntity = divisionEntity.getDepartment().getHeadquarters(); - - if(departmentEntity.getIdDepartment()==null) { - departmentEntity = new DepartmentEntity(); - } - if(headquartersEntity.getIdHeadquarters()==null) { + HeadquartersEntity originHeadquartersEntity = + headquartersRepository.findByNmHeadquarters( + divisionEntity.getDepartment().getHeadquarters().getNmHeadquarters()); + if(originHeadquartersEntity!=null){ + headquartersEntity=originHeadquartersEntity; + }else { headquartersEntity = new HeadquartersEntity(); + headquartersEntity.setNmHeadquarters( + divisionEntity.getDepartment() + .getHeadquarters() + .getNmHeadquarters() + ); } + + DepartmentEntity originDepartmentEntity = + departmentRepository.findByHeadquartersAndNmDepartment( + headquartersEntity, + divisionEntity.getDepartment().getNmDepartment()); + if(originDepartmentEntity!=null) { + departmentEntity=originDepartmentEntity; + }else { + departmentEntity = new DepartmentEntity(); + departmentEntity.setNmDepartment( + divisionEntity.getDepartment() + .getNmDepartment() + ); + } + + divisionEntity.setIsDisplay(0); departmentEntity.setIsDisplay(0); headquartersEntity.setIsDisplay(0); - departmentEntity.setNmDepartment( - divisionEntity.getDepartment() - .getNmDepartment() - ); - headquartersEntity.setNmHeadquarters( - divisionEntity.getDepartment() - .getHeadquarters() - .getNmHeadquarters() - ); departmentEntity.setHeadquarters(headquartersEntity); divisionEntity.setDepartment(departmentEntity); divisionRepository.save(divisionEntity); diff --git a/EM-System/src/main/java/com/example/rhizome/app/domain/service/impl/SearchDepartmentImpl.java b/EM-System/src/main/java/com/example/rhizome/app/domain/service/impl/SearchDepartmentImpl.java index 653d107..192d1d9 100644 --- a/EM-System/src/main/java/com/example/rhizome/app/domain/service/impl/SearchDepartmentImpl.java +++ b/EM-System/src/main/java/com/example/rhizome/app/domain/service/impl/SearchDepartmentImpl.java @@ -22,6 +22,7 @@ import com.example.rhizome.app.infra.repository.DepartmentInfoRepository; import com.example.rhizome.app.infra.repository.DepartmentRepository; import com.example.rhizome.app.infra.repository.DivisionRepository; import com.example.rhizome.app.infra.repository.HeadquartersRepository; +import com.example.rhizome.app.infra.repository.RegisterDepartmentRepository; /** * 部署情報検索系の機能を集約させるサービスクラスです。 @@ -33,6 +34,7 @@ public class SearchDepartmentImpl implements SearchDepartment { DepartmentRepository departmentRepository; HeadquartersRepository headquartersRepository; DepartmentInfoRepository departmentInfoRepository; + RegisterDepartmentRepository registerDepartmentRepository; /** * コンストラクタ * @@ -43,11 +45,13 @@ public class SearchDepartmentImpl implements SearchDepartment { DepartmentRepository departmentRepository ,DivisionRepository divisionRepository ,HeadquartersRepository headquartersRepository - ,DepartmentInfoRepository departmentInfoRepository) { + ,DepartmentInfoRepository departmentInfoRepository + ,RegisterDepartmentRepository registerDepartmentRepository) { this.departmentRepository = departmentRepository; this.divisionRepository = divisionRepository; this.headquartersRepository = headquartersRepository; this.departmentInfoRepository = departmentInfoRepository; + this.registerDepartmentRepository = registerDepartmentRepository; } /** @@ -126,26 +130,20 @@ public class SearchDepartmentImpl implements SearchDepartment { } - - - -// /** -// * searchConditionDepartment の情報を元に Department のレコードを取得 -// * 部分一致検索 -// * -// * @param searchConditionDepartment 検索条件 -// * @return 検索結果のレコード -// */ -// public List searchByWithLike(SearchConditionDepartment searchConditionDepartment) { -// // 動的に検索条件を絞り込む -// // Specification は Criteria API の Predicate をラップしたもの -// return DepartmentEntity -// .createDepartmentList( -// departmentRepository.findAll(Specification -// .where(DepartmentRepository.idDepartmentEqual(searchConditionDepartment.getIdDepartment())) -// .and(DepartmentRepository.nmDepartmentLike(searchConditionDepartment.getNmDepartment())) -// ) -// ); -// -// } + public ListsearchByIdHeadquarters(Integer idHeadquarters){ + System.out.println("3"); + registerDepartmentRepository.findAll(Specification + .where(RegisterDepartmentRepository.idHeadquartersEqual(idHeadquarters))); + + System.out.println("SearchDepartmentImpl=>4"); + + return DepartmentEntity + .createDepartmentListBy(registerDepartmentRepository.findAll(Specification + .where(RegisterDepartmentRepository.idHeadquartersEqual(idHeadquarters)))); + } + public ListsearchByIdDepartment(Integer idDepartment){ + return DivisionEntity + .createDivisionList(divisionRepository.findAll(Specification + .where(DivisionRepository.idDepartmentEqual(idDepartment)))); + } } diff --git a/EM-System/src/main/java/com/example/rhizome/app/domain/service/impl/UpdateDepartmentImpl.java b/EM-System/src/main/java/com/example/rhizome/app/domain/service/impl/UpdateDepartmentImpl.java index a6aece8..2c1a17a 100644 --- a/EM-System/src/main/java/com/example/rhizome/app/domain/service/impl/UpdateDepartmentImpl.java +++ b/EM-System/src/main/java/com/example/rhizome/app/domain/service/impl/UpdateDepartmentImpl.java @@ -6,8 +6,10 @@ import org.springframework.transaction.annotation.Transactional; import com.example.rhizome.app.domain.model.DepartmentInfo; import com.example.rhizome.app.domain.service.UpdateDepartment; -import com.example.rhizome.app.infra.entity.DepartmentInfoEntity; -import com.example.rhizome.app.infra.repository.DepartmentInfoRepository; +import com.example.rhizome.app.infra.entity.DepartmentEntity; +import com.example.rhizome.app.infra.entity.DivisionEntity; +import com.example.rhizome.app.infra.entity.HeadquartersEntity; +import com.example.rhizome.app.infra.repository.DivisionRepository; /** * department の更新系の機能を集約させるサービスクラスです。 @@ -17,12 +19,12 @@ import com.example.rhizome.app.infra.repository.DepartmentInfoRepository; public class UpdateDepartmentImpl implements UpdateDepartment { - DepartmentInfoRepository departmentInfoRepository; + DivisionRepository divisionRepository; @Autowired - public UpdateDepartmentImpl(DepartmentInfoRepository departmentInfoRepository + public UpdateDepartmentImpl(DivisionRepository divisionRepository ) { - this.departmentInfoRepository = departmentInfoRepository; + this.divisionRepository = divisionRepository; } /** @@ -31,9 +33,21 @@ public class UpdateDepartmentImpl implements UpdateDepartment { * @param department 更新のデータ */ public void updateDepartment(DepartmentInfo departmentInfo) { - System.out.println(departmentInfo.getIdDivision()); - departmentInfoRepository.save(DepartmentInfoEntity.convertFrom(departmentInfo)); - + DivisionEntity divisionEntity = DivisionEntity.convertFrom(departmentInfo); + DepartmentEntity departmentEntity = divisionEntity.getDepartment(); + HeadquartersEntity headquartersEntity = divisionEntity.getDepartment().getHeadquarters(); + departmentEntity.setNmDepartment( + divisionEntity.getDepartment() + .getNmDepartment() + ); + headquartersEntity.setNmHeadquarters( + divisionEntity.getDepartment() + .getHeadquarters() + .getNmHeadquarters() + ); + departmentEntity.setHeadquarters(headquartersEntity); + divisionEntity.setDepartment(departmentEntity); + divisionRepository.save(divisionEntity); } diff --git a/EM-System/src/main/java/com/example/rhizome/app/infra/entity/DepartmentEntity.java b/EM-System/src/main/java/com/example/rhizome/app/infra/entity/DepartmentEntity.java index e4e99f2..1f021d1 100644 --- a/EM-System/src/main/java/com/example/rhizome/app/infra/entity/DepartmentEntity.java +++ b/EM-System/src/main/java/com/example/rhizome/app/infra/entity/DepartmentEntity.java @@ -39,6 +39,10 @@ import lombok.NoArgsConstructor; @Data @NoArgsConstructor @AllArgsConstructor +//@NamedEntityGraph( +// name = "department_with_headquarters", +// includeAllAttributes = true +//) public class DepartmentEntity { /** @@ -58,6 +62,7 @@ public class DepartmentEntity { */ @Column(name = "is_display", nullable = false) private Integer isDisplay; + @ManyToOne(cascade = CascadeType.ALL) @JoinColumn(name = "id_headquarters") @Fetch(FetchMode.JOIN) @@ -83,6 +88,20 @@ public class DepartmentEntity { )).toList(); } + public static List createDepartmentListBy(List departmentEntityList) { + + // Stream API を利用するとこうなります。 + return departmentEntityList + .stream() + .map(departmentEntity -> new Department( + departmentEntity.getIdDepartment(), + departmentEntity.getNmDepartment(), + departmentEntity.getIsDisplay(), + departmentEntity.getIdHeadquarters() == null ? null : departmentEntity.getIdHeadquarters() + + )).toList(); + } + /** * Department(BusinessLogic層依存型) から DepartmentEntity(DataAccess層依存)に変換します。 * diff --git a/EM-System/src/main/java/com/example/rhizome/app/infra/repository/DepartmentRepository.java b/EM-System/src/main/java/com/example/rhizome/app/infra/repository/DepartmentRepository.java index 8749e72..a4d2359 100644 --- a/EM-System/src/main/java/com/example/rhizome/app/infra/repository/DepartmentRepository.java +++ b/EM-System/src/main/java/com/example/rhizome/app/infra/repository/DepartmentRepository.java @@ -6,6 +6,7 @@ import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.stereotype.Repository; import com.example.rhizome.app.infra.entity.DepartmentEntity; +import com.example.rhizome.app.infra.entity.HeadquartersEntity; /** @@ -48,10 +49,14 @@ public interface DepartmentRepository extends JpaRepository) (root, criteriaQuery, criteriaBuilder) -> criteriaBuilder.like(root.get("nmDepartment"), "%" + nmDepartment + "%"); } - + + DepartmentEntity findByHeadquartersAndNmDepartment(HeadquartersEntity headquartersEntity,String nmDepartment); - - +// @Query("SELECT DISTINCT new com.example.rhizome.app.infra.entity.DepartmentEntity(de,h)FROM DepartmentEntity de " +// + "INNER JOIN de.headquarters h " +// + "WHERE h.idHeadquarters =:idHeadquarters") +// List searchDepartmentByIdHeadquarters( +// @Param("idHeadquarters") Integer IdHeadquarters); } diff --git a/EM-System/src/main/java/com/example/rhizome/app/presentation/controller/InsertDepartmentController.java b/EM-System/src/main/java/com/example/rhizome/app/presentation/controller/InsertDepartmentController.java index 29fdddf..0789a8b 100644 --- a/EM-System/src/main/java/com/example/rhizome/app/presentation/controller/InsertDepartmentController.java +++ b/EM-System/src/main/java/com/example/rhizome/app/presentation/controller/InsertDepartmentController.java @@ -20,6 +20,7 @@ import com.example.rhizome.app.domain.model.DepartmentInfo; import com.example.rhizome.app.domain.model.SearchConditionDepartment; import com.example.rhizome.app.domain.service.RegisterDepartment; import com.example.rhizome.app.domain.service.SearchDepartment; +import com.example.rhizome.app.domain.service.impl.SearchDepartmentImpl; import com.example.rhizome.app.infra.entity.DivisionEntity; import com.example.rhizome.app.presentation.controller.pageproperty.PageReturnAttributeKeyword; import com.example.rhizome.app.presentation.controller.pageproperty.TransitionTargetPageNameKeyword; @@ -33,7 +34,9 @@ import com.example.rhizome.app.presentation.form.MessageForm; @Controller public class InsertDepartmentController { - // ログ出力用インスタンス + private final SearchDepartmentImpl searchDepartmentImpl; + + // ログ出力用インスタンス private final static Logger LOGGER = Logger.getLogger(InsertDepartmentController.class.getName()); // エラーメッセージ用の定数フィールド @@ -44,10 +47,11 @@ public class InsertDepartmentController { SearchDepartment searchDepartment; @Autowired - public InsertDepartmentController(HttpSession httpSession, RegisterDepartment registerDepartment, SearchDepartment searchDepartment) { + public InsertDepartmentController(HttpSession httpSession, RegisterDepartment registerDepartment, SearchDepartment searchDepartment, SearchDepartmentImpl searchDepartmentImpl) { this.httpSession = httpSession; this.registerDepartment = registerDepartment; this.searchDepartment = searchDepartment; + this.searchDepartmentImpl = searchDepartmentImpl; } @ModelAttribute @@ -89,19 +93,19 @@ public class InsertDepartmentController { // 登録画面に遷移 return INSERT_DEPARTMENT_INPUT_HTML; } + + // 部署名で重複が無いかチェック - if (!searchDepartment.searchByHeadquarters( - new SearchConditionDepartment( - null, - insertDepartmentForm.getNmHeadquarters())).isEmpty() - &&!searchDepartment.searchByDepartment( - new SearchConditionDepartment( - null, - insertDepartmentForm.getNmDepartment())).isEmpty() - &&!searchDepartment.searchByDivision( - new SearchConditionDepartment( - null, - insertDepartmentForm.getNmDivision())).isEmpty()) { + if (searchDepartment.searchAllDepartmentTable( + new SearchConditionDepartment( + insertDepartmentForm.getIdHeadquarters(), + insertDepartmentForm.getNmHeadquarters()), + new SearchConditionDepartment( + insertDepartmentForm.getIdDepartment(), + insertDepartmentForm.getNmDepartment()), + new SearchConditionDepartment( + insertDepartmentForm.getIdDivision(), + insertDepartmentForm.getNmDivision()))) { // 存在する場合はエラーメッセージを設定して更新入力画面に遷移 diff --git a/EM-System/src/main/java/com/example/rhizome/app/presentation/controller/InsertEmployeeInputController.java b/EM-System/src/main/java/com/example/rhizome/app/presentation/controller/InsertEmployeeInputController.java index b25cf78..63c235f 100644 --- a/EM-System/src/main/java/com/example/rhizome/app/presentation/controller/InsertEmployeeInputController.java +++ b/EM-System/src/main/java/com/example/rhizome/app/presentation/controller/InsertEmployeeInputController.java @@ -2,6 +2,7 @@ package com.example.rhizome.app.presentation.controller; import static com.example.rhizome.app.presentation.controller.pageproperty.TransitionTargetPageNameKeyword.*; +import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; @@ -10,9 +11,12 @@ import javax.servlet.http.HttpSession; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; import com.example.rhizome.aop.aspect.PermissionCheck; import com.example.rhizome.aop.aspect.SessionCheck; @@ -20,7 +24,9 @@ import com.example.rhizome.app.domain.service.RegisterEmployee; import com.example.rhizome.app.domain.service.SearchDepartment; import com.example.rhizome.app.presentation.controller.pageproperty.PageReturnAttributeKeyword; import com.example.rhizome.app.presentation.controller.pageproperty.TransitionTargetPageNameKeyword; -import com.example.rhizome.app.presentation.form.DepartmentForm; +import com.example.rhizome.app.presentation.form.DepartmentInfoForm; +import com.example.rhizome.app.presentation.form.DivisionInfoForm; +import com.example.rhizome.app.presentation.form.HeadquartersInfoForm; import com.example.rhizome.app.presentation.form.InsertEmployeeForm; /** @@ -67,7 +73,7 @@ public class InsertEmployeeInputController { try { // 部署コードリストを作成し、画面に返す値としてセット model.addAttribute(PageReturnAttributeKeyword.DEPARTMENT_FORM_LIST - , DepartmentForm.convertFrom( + ,HeadquartersInfoForm.convertFrom( searchDepartment.searchAllDepartmentTable())); // パラメータをセット @@ -88,6 +94,45 @@ public class InsertEmployeeInputController { return TransitionTargetPageNameKeyword.ERROR_HTML; } } + + @GetMapping("insertEmployeeInput/searchDepartment" ) + @ResponseBody + public ListdepartmentsByHeadquarters( + @RequestParam("id_headquarters")Integer idHeadquarters){ + System.out.println("koko"); + + List departmentByHeadquarters= + DepartmentInfoForm.convertFrom( + searchDepartment.searchByIdHeadquarters(idHeadquarters)); + System.out.println("2"); + return departmentByHeadquarters + .stream() + .map(DepartmentInfoForm-> new DepartmentInfoForm( + DepartmentInfoForm.getIdDepartment(), + DepartmentInfoForm.getNmDepartment())) + .distinct() + .toList(); + + + } + @GetMapping("/insertEmployeeInput/searchDepartment/searchDivision") + @ResponseBody + public ListdivisionBydepartment( + @RequestParam("idDepartment")Integer idDepartment){ + List divisionBydepartment= + DivisionInfoForm.convertFrom( + searchDepartment.searchByIdDepartment(idDepartment)); + + return divisionBydepartment + .stream() + .map(DivisionInfoForm-> new DivisionInfoForm( + DivisionInfoForm.getIdDivision(), + DivisionInfoForm.getNmDivision())) + .distinct() + .toList(); + + + } } diff --git a/EM-System/src/main/java/com/example/rhizome/app/presentation/controller/UpdateDepartmentResultController.java b/EM-System/src/main/java/com/example/rhizome/app/presentation/controller/UpdateDepartmentResultController.java index 32e99d6..4c491a0 100644 --- a/EM-System/src/main/java/com/example/rhizome/app/presentation/controller/UpdateDepartmentResultController.java +++ b/EM-System/src/main/java/com/example/rhizome/app/presentation/controller/UpdateDepartmentResultController.java @@ -75,18 +75,16 @@ public class UpdateDepartmentResultController { } // 部署名で重複が無いかチェック - if (!searchDepartment.searchByHeadquarters( - new SearchConditionDepartment( - null, - updateDepartmentForm.getNmHeadquarters())).isEmpty()|| - !searchDepartment.searchByDepartment( - new SearchConditionDepartment( - null, - updateDepartmentForm.getNmDepartment())).isEmpty()|| - !searchDepartment.searchByDivision( - new SearchConditionDepartment( - null, - updateDepartmentForm.getNmDivision())).isEmpty()) { + if (searchDepartment.searchAllDepartmentTable( + new SearchConditionDepartment( + updateDepartmentForm.getIdHeadquarters(), + updateDepartmentForm.getNmHeadquarters()), + new SearchConditionDepartment( + updateDepartmentForm.getIdDepartment(), + updateDepartmentForm.getNmDepartment()), + new SearchConditionDepartment( + updateDepartmentForm.getIdDivision(), + updateDepartmentForm.getNmDivision()))) { // 存在する場合はエラーメッセージを設定して更新入力画面に遷移 model.addAttribute(PageReturnAttributeKeyword.MESSAGE_ERROR, new MessageForm(DUPLICATION)); model.addAttribute(PageReturnAttributeKeyword.UPDATE_DEPARTMENT_FORM, updateDepartmentForm); diff --git a/EM-System/src/main/java/com/example/rhizome/app/presentation/form/InsertEmployeeForm.java b/EM-System/src/main/java/com/example/rhizome/app/presentation/form/InsertEmployeeForm.java index 7d8ef36..3ea0beb 100644 --- a/EM-System/src/main/java/com/example/rhizome/app/presentation/form/InsertEmployeeForm.java +++ b/EM-System/src/main/java/com/example/rhizome/app/presentation/form/InsertEmployeeForm.java @@ -52,7 +52,17 @@ public class InsertEmployeeForm { private Integer adminAuth; /** - * 部署ID + * 本部ID + */ + private Integer idHeadquarters; + + /** + * 部ID + */ + private Integer idDepartment; + + /** + * 課ID */ private Integer idDivision; diff --git a/EM-System/src/main/resources/templates/insertDepartmentInput.html b/EM-System/src/main/resources/templates/insertDepartmentInput.html index 8ea4f98..61c2afe 100644 --- a/EM-System/src/main/resources/templates/insertDepartmentInput.html +++ b/EM-System/src/main/resources/templates/insertDepartmentInput.html @@ -20,7 +20,7 @@ -
+
@@ -39,7 +39,7 @@ 本部名 @@ -47,12 +47,13 @@ @@ -70,7 +71,7 @@ 部名 @@ -78,7 +79,7 @@