2021. 12. 17. 15:23ㆍ스프링부트
메뉴 수정하기
메뉴 수정 메서드를 추가합니다
@IsMyStore
@PatchMapping("/admin/management/menu")
public ResponseEntity<Food> updateMenu(Food food, String[] foodOption, Integer[] foodOptionPrice, Integer[] optionId, MultipartFile file) throws IOException {
System.out.println(food);
if(file.isEmpty()) {
String img = File.separator + "img" + File.separator + "none.gif";
food.setFoodImg(img);
food.setFoodThumb(img);
} else {
String img = uploadFile.fildUpload(file);
food.setFoodImg(img);
food.setFoodThumb(img);
}
adminService.updateMenu(food, foodOption, foodOptionPrice, optionId);
return new ResponseEntity<Food>(food, HttpStatus.OK);
}
addMenu()와 같지만 옵션이 있을 수 있기 때문에 Integer[] optionId를 추가했습니다
AdminServiceImp
@Transactional
@Override
public void updateMenu(Food food, String[] foodOption, Integer[] foodOptionPrice, Integer[] optionId) {
Map<String, Object> map = new HashMap<>();
if(foodOption == null) {
adminDAO.deleteMenuOption(food.getId());
} else {
List<Map<String, Object>> optionList = new ArrayList<>();
for(int i=0;i<foodOption.length;i++) {
Map<String, Object> optionMap = new HashMap<>();
long oid = -1;
if(optionId.length != 0 && optionId[i] != null) {
oid = optionId[i];
}
optionMap.put("optionId", oid);
optionMap.put("optionName", foodOption[i]);
optionMap.put("optionPrice", foodOptionPrice[i]);
optionList.add(optionMap);
}
map.put("optionList", optionList);
}
map.put("food", food);
adminDAO.updateMenu(map);
}
트랜잭션 처리를 위해 @Transactional를 붙여 주었습니다
옵션이 하나도 없을 경우 deleteMenuOption을 실행해 모든 옵션을 삭제합니다
옵션배열이 있는 경우엔 optionId가 있는 경우와 없는 경우로 나뉘어집니다
opionId가 있는 경우는 기존 메뉴에 옵션이 있을 때 이고 optionId가 없는 경우는 옵션 추가하기 버튼을 눌러 새로운 옵션을 추가했을 때 입니다
optionId가 없다면 -1로 초기화하고 가격,이름담은 map을 list에 추가합니다
optionList와 food를 map에 담아 updateMenu()를 실행합니다
AdminDAOImp
@Override
public void updateMenu(Map<String, Object> map) {
sql.update("admin.updateMenu", map);
}
AdminMapper
<delete id="deleteMenuOption">
DELETE BM_FOOD_OPTION WHERE FOOD_ID = #{foodId }
</delete>
updateMenu의 경우엔 delete, update, inseret를 한꺼번에 처리해야 했기 때문에 pl/sql을 사용하였습니다
<update id="updateMenu">
DECLARE BEGIN
UPDATE BM_FOOD
SET STORE_ID = #{food.storeId }
,FOOD_NAME = #{food.foodName }
,FOOD_PRICE = #{food.foodPrice }
,FOOD_DEC = #{food.foodDec }
,FOOD_IMG = #{food.foodImg }
,FOOD_THUMB = #{food.foodThumb }
WHERE ID = #{food.id };
<if test="optionList != null">
DELETE BM_FOOD_OPTION WHERE FOOD_ID = #{food.id } AND ID NOT IN
<foreach collection="optionList" item="item" open="(" close=");" separator="," >
${item.optionId }
</foreach>
<foreach collection="optionList" item="item" separator=";" close=";">
<if test="item.optionId == -1">
INSERT INTO BM_FOOD_OPTION
VALUES (GET_OPTION_SEQ()
,#{food.id }
,#{item.optionName }
,#{item.optionPrice })
</if>
<if test="item.optionId != -1">
UPDATE BM_FOOD_OPTION
SET OPTION_NAME = #{item.optionName }
,OPTION_PRICE = #{item.optionPrice }
WHERE FOOD_ID = #{food.id }
AND ID = #{item.optionId }
</if>
</foreach>
</if>
END;
</update>
메뉴 삭제하기
메뉴 삭제 메서드를 추가합니다
@IsMyStore
@DeleteMapping("/admin/management/menu")
public ResponseEntity<Object> deleteMenu(long storeId, long[] deleteNumber) {
adminService.deleteMenu(storeId, deleteNumber);
return new ResponseEntity<>(HttpStatus.OK);
}
AdminServiceImp
@Override
public void deleteMenu(long storeId, long[] deleteNumber) {
adminDAO.deleteMenu(storeId, deleteNumber);
}
AdminDAOImp
@Override
public void deleteMenuOption(long foodId) {
sql.delete("admin.deleteMenuOption", foodId);
}
AdminMapper
<delete id="deleteMenu">
DELETE BM_FOOD WHERE STORE_ID = ${storeId } AND ID IN
<foreach collection="deleteNumber" item="arr" open="(" close=")" separator="," >
${arr }
</foreach>
</delete>
댓글 답장하기
댓글 답장하기 메서드를 추가합니다
@IsMyStore
@PatchMapping("/admin/management/bossComment")
public ResponseEntity<String> bossComment(long storeId, String orderNum, String bossComment, HttpServletResponse response) throws IOException {
String reviewContent = adminService.bossComment(storeId, orderNum, bossComment);
return new ResponseEntity<String>(reviewContent, HttpStatus.OK);
}
adminDetail.js의 답장 등록하기 함수 ajax type을 수정합니다
AdminServiceImp
@Override
public String bossComment(long storeId, String orderNum, String bossComment) {
bossComment = bossComment.replace("\n","<br>").replaceAll(" ", " ");
adminDAO.bossComment(storeId, orderNum, bossComment);
return bossComment;
}
텍스트 에어리어의 값을 db에 저장하게 되면 줄바꿈은 무시되고 db에서 값을 불러올때 여러번의 띄어쓰기는 1번으로 변환 됩니다 그래서 저장하기 전에 댓글 내용의 개행문자를 <br>태그로, 띄어쓰기를  로 변환 후 db에 저장합니다
AdminDAOImp
@Override
public void bossComment(long storeId, String orderNum, String bossComment) {
Map<String, Object> map = new HashMap<>();
map.put("storeId", storeId);
map.put("bossComment", bossComment);
map.put("orderNum", orderNum);
sql.update("admin.bossComment", map);
}
AdminMapper
<update id="bossComment">
UPDATE BM_REVIEW SET
BOSS_COMMENT = #{bossComment }
WHERE
ORDER_NUM = #{orderNum }
AND
STORE_ID = #{storeId }
</update>
'스프링부트' 카테고리의 다른 글
스프링부트+jsp로 배달사이트 만들기-31 웹소켓으로 실시간 주문받기 (0) | 2021.12.17 |
---|---|
스프링부트+jsp로 배달사이트 만들기-30 주문접수 (2) | 2021.12.17 |
스프링부트+jsp로 배달사이트 만들기-28 관리자페이지(가게 정보 수정, 메뉴 추가) (0) | 2021.12.17 |
스프링부트+jsp로 배달사이트 만들기-27 관리자 가게상세/AOP (1) | 2021.12.17 |
스프링부트+jsp로 배달사이트 만들기-25 매장검색 (2) | 2021.12.11 |