Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

출고 조회/승인거절/완료처리 기능 구현 #40

Merged
merged 4 commits into from
Jan 14, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions src/main/java/com/ssginc/nojam/order/mapper/OrderMapperQ.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.ssginc.nojam.order.mapper;

import com.ssginc.nojam.order.vo.OrderVOQ;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

/**
* @author Queue-ri
*/

@Mapper
public interface OrderMapperQ {

OrderVOQ findOrderById(@Param("orderId") Long orderId);
}
27 changes: 27 additions & 0 deletions src/main/java/com/ssginc/nojam/order/vo/OrderVOQ.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.ssginc.nojam.order.vo;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;

/**
* @author Queue-ri
*/

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class OrderVOQ {
private Long orderId;
private Long itemId;
private String branchId;
private String status;
private Integer quantity;
private LocalDateTime orderTime;
private LocalDateTime outStartTime;
private LocalDateTime inEndTime;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
package com.ssginc.nojam.outgoing.controller;

import com.ssginc.nojam.outgoing.dto.OutgoingViewDTO;
import com.ssginc.nojam.outgoing.mapper.OutgoingMapper;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import java.util.List;

/**
* @author Queue-ri
*/

@Controller
@RequiredArgsConstructor
@RequestMapping("outgoing")
public class OutgoingController {
private final OutgoingMapper outgoingMapper;

@GetMapping("/view")
public String viewOutgoingDefault(RedirectAttributes redirectAttributes) {
redirectAttributes.addAttribute("pdx", 1);
return "redirect:/outgoing/view/{pdx}";
}

@GetMapping("/view/{pdx}")
public String viewOutgoing(@PathVariable("pdx") int pdx, Model model) {
int pageIdx = (pdx-1) * 50;

int totalRow = outgoingMapper.countAllOutgoings(); // 총 totalRow개의 검색 결과
int pageBlockSize = 5; // 1 2 3 4 5
int pageNavSize = (int)Math.ceil((double)totalRow / pageBlockSize); // << >> 를 몇 번 할 수 있는지

List<OutgoingViewDTO> ogList = outgoingMapper.get50Outgoings(pageIdx);

model.addAttribute("ogList", ogList);
model.addAttribute("totalRow", totalRow);
model.addAttribute("pageBlockSize", pageBlockSize);
model.addAttribute("pageNavSize", pageNavSize);

return "outgoing/view";
}

@GetMapping("/pending")
public String viewPendingOutgoingDefault(RedirectAttributes redirectAttributes) {
redirectAttributes.addAttribute("pdx", 1);
return "redirect:/outgoing/pending/{pdx}";
}

@GetMapping("/pending/{pdx}")
public String viewPendingOutgoing(@PathVariable("pdx") int pdx, Model model) {
int pageIdx = (pdx-1) * 50;

int totalRow = outgoingMapper.countAllPendingOutgoings(); // 총 totalRow개의 검색 결과
int pageBlockSize = 5; // 1 2 3 4 5
int pageNavSize = (int)Math.ceil((double)totalRow / pageBlockSize); // << >> 를 몇 번 할 수 있는지

List<OutgoingViewDTO> poList = outgoingMapper.get50PendingOutgoings(pageIdx);

model.addAttribute("poList", poList);
model.addAttribute("totalRow", totalRow);
model.addAttribute("pageBlockSize", pageBlockSize);
model.addAttribute("pageNavSize", pageNavSize);

return "outgoing/pending";
}

@GetMapping("/indelivery")
public String viewIndeliveryOutgoingDefault(RedirectAttributes redirectAttributes) {
redirectAttributes.addAttribute("pdx", 1);
return "redirect:/outgoing/indelivery/{pdx}";
}

@GetMapping("/indelivery/{pdx}")
public String viewIndeliveryOutgoing(@PathVariable("pdx") int pdx, Model model) {
int pageIdx = (pdx-1) * 50;

int totalRow = outgoingMapper.countAllPendingOutgoings(); // 총 totalRow개의 검색 결과
int pageBlockSize = 5; // 1 2 3 4 5
int pageNavSize = (int)Math.ceil((double)totalRow / pageBlockSize); // << >> 를 몇 번 할 수 있는지

List<OutgoingViewDTO> idoList = outgoingMapper.get50IndeliveryOutgoings(pageIdx);

model.addAttribute("idoList", idoList);
model.addAttribute("totalRow", totalRow);
model.addAttribute("pageBlockSize", pageBlockSize);
model.addAttribute("pageNavSize", pageNavSize);

return "outgoing/indelivery";
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package com.ssginc.nojam.outgoing.controller;

import com.ssginc.nojam.order.mapper.OrderMapperQ;
import com.ssginc.nojam.order.vo.OrderVOQ;
import com.ssginc.nojam.outgoing.mapper.OutgoingMapper;
import jakarta.servlet.http.HttpSession;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

import java.time.LocalDateTime;

/**
* @author Queue-ri
*/

@RestController
@RequiredArgsConstructor
@RequestMapping("outgoing")
public class OutgoingRestController {
private final OutgoingMapper outgoingMapper;
private final OrderMapperQ orderMapperQ;

@GetMapping("/pending/confirm")
public void confirmOrder(@RequestParam("oid") Long orderId, HttpSession session) {
outgoingMapper.confirm(orderId, LocalDateTime.now());
OrderVOQ order = orderMapperQ.findOrderById(orderId);
// 신규 출고 내역 추가
outgoingMapper.insertNewOutgoing(orderId, order.getQuantity(), (String)session.getAttribute("userId"), LocalDateTime.now());
// 본사 재고 차감
outgoingMapper.decHeadStock(order.getQuantity(), order.getItemId());
}

@GetMapping("/pending/reject")
public void rejectOrder(@RequestParam("oid") Long orderId) {
outgoingMapper.reject(orderId);
}

@GetMapping("/indelivery/done")
public void doneOutgoing(@RequestParam("oid") Long orderId) {
OrderVOQ order = orderMapperQ.findOrderById(orderId);
// 출고 완료 처리 - 다중 SQL 실행
outgoingMapper.markDone(orderId, order.getBranchId() + "_" + order.getOrderId(), order.getItemId(), order.getBranchId(), order.getQuantity(), LocalDateTime.now());
// 발주 요청했던 지점의 해당 상품 재고 증가
outgoingMapper.incBranchStock(order.getQuantity(), order.getItemId());
}
}
34 changes: 34 additions & 0 deletions src/main/java/com/ssginc/nojam/outgoing/dto/OutgoingViewDTO.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package com.ssginc.nojam.outgoing.dto;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;

/**
* @author Queue-ri
*/

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class OutgoingViewDTO {
// ** 주의 **
// 출고 테이블 아니고 발주 테이블에서 가져오는 것임
// 출고대기 상태에선 출고 테이블에 들어가는 데이터가 없음
private Long outgoingId;
private Long orderId;
private Long itemId;
private String name; // item name. join
private String branchName; // join
private Integer price; // join
private Integer quantity;
private Integer stock; // head stock. join
private String status;
private LocalDateTime orderTime;
private LocalDateTime outStartTime;
private LocalDateTime outEndTime;
}
44 changes: 44 additions & 0 deletions src/main/java/com/ssginc/nojam/outgoing/mapper/OutgoingMapper.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package com.ssginc.nojam.outgoing.mapper;

import com.ssginc.nojam.outgoing.dto.OutgoingViewDTO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDateTime;
import java.util.List;

/**
* @author Queue-ri
*/

@Mapper
public interface OutgoingMapper {
// 조회 메소드
int countAllOutgoings();
List<OutgoingViewDTO> get50Outgoings(int startIdx);

int countAllPendingOutgoings();
List<OutgoingViewDTO> get50PendingOutgoings(int startIdx);
List<OutgoingViewDTO> get50IndeliveryOutgoings(int startIdx);
void confirm(@Param("orderId") Long orderId, @Param("outStartTime") LocalDateTime outStartTime);
void reject(Long orderId);

// confirm시 출고내역 신규 등록해야 함
int insertNewOutgoing(@Param("orderId") Long orderId, @Param("quantity") Integer quantity, @Param("userId") String userId, @Param("outStartTime") LocalDateTime outStartTime);

// confirm시 본사에서 발주요청된 수량만큼 재고 차감
void decHeadStock(@Param("decValue") Integer decValue, @Param("itemId") Long itemId);

// 출고 완료 처리
void markDone(
@Param("orderId") Long orderId,
@Param("incomingId") String incomingId,
@Param("itemId") Long itemId,
@Param("branchId") String branchId,
@Param("quantity") Integer quantity,
@Param("markTime") LocalDateTime markTime
);

// markDone시 출고완료(=발주 기준으로 '입고완료')에 따른 해당 지점의 재고 추가
void incBranchStock(@Param("incValue") Integer incValue, @Param("itemId") Long itemId);
}
25 changes: 25 additions & 0 deletions src/main/java/com/ssginc/nojam/outgoing/vo/OutgoingVO.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.ssginc.nojam.outgoing.vo;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;

/**
* @author Queue-ri
*/

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class OutgoingVO {
private Long outgoingId;
private Long orderId;
private String status;
private Integer quantity;
private LocalDateTime outStartTime;
private LocalDateTime outEndTime;
}
1 change: 0 additions & 1 deletion src/main/java/com/ssginc/nojam/stock/vo/HeadStockVO.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.ssginc.nojam.stock.vo;

import com.ssginc.nojam.crawl.vo.ItemVO;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
Expand Down
2 changes: 1 addition & 1 deletion src/main/resources/application.properties
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ spring.web.encoding.enabled=true
spring.web.encoding.force=true

################ mysql8
spring.datasource.url=jdbc:mysql://localhost:3306/nojam?serverTimezone=UTC&characterEncoding=UTF-8&useSSL=false&allowPublicKeyRetrieval=true
spring.datasource.url=jdbc:mysql://localhost:3306/nojam?serverTimezone=UTC&characterEncoding=UTF-8&useSSL=false&allowPublicKeyRetrieval=true&allowMultiQueries=true
spring.datasource.username=root
spring.datasource.password=1234
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
Expand Down
15 changes: 15 additions & 0 deletions src/main/resources/mapper/orderMapperQ.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.ssginc.nojam.order.mapper.OrderMapperQ">

<!-- 전체 상품 조회 -->
<select id="findOrderById"
resultType="com.ssginc.nojam.order.vo.OrderVOQ">
SELECT *
FROM `order`
WHERE order_id = ${orderId}
</select>

</mapper>
Loading