|
|
@@ -12,6 +12,7 @@ import com.ruoyi.app.order.dto.OrderCreateInput;
|
|
|
import com.ruoyi.app.order.dto.OrderPushBodyDto;
|
|
|
import com.ruoyi.app.pay.LinePayOrderGuard;
|
|
|
import com.ruoyi.app.pay.LinePayRefundService;
|
|
|
+import com.ruoyi.app.user.MerchantTokenSessionService;
|
|
|
import com.ruoyi.app.utils.PayPush;
|
|
|
import com.ruoyi.app.utils.event.PushEventService;
|
|
|
import com.ruoyi.common.annotation.Anonymous;
|
|
|
@@ -72,6 +73,10 @@ public class PosOrderShOprateController extends BaseController {
|
|
|
private OrderLifecycleService orderLifecycleService;
|
|
|
@Autowired
|
|
|
private DeliveryOrderNotificationService deliveryOrderNotificationService;
|
|
|
+ @Autowired
|
|
|
+ private MerchantStoreAccessService merchantStoreAccessService;
|
|
|
+ @Autowired
|
|
|
+ private MerchantTokenSessionService merchantTokenSessionService;
|
|
|
|
|
|
|
|
|
|
|
|
@@ -83,8 +88,8 @@ public class PosOrderShOprateController extends BaseController {
|
|
|
@Auth
|
|
|
@Anonymous
|
|
|
public AjaxResult getInvoice(@RequestHeader String token, @RequestParam Long orderId) {
|
|
|
- Long userId = Long.valueOf(new JwtUtil().getusid(token));
|
|
|
- return AjaxResult.success(orderInvoiceService.getInvoiceForMerchant(orderId, userId));
|
|
|
+ MerchantAccessContext context = requireManagedOrder(token, orderId);
|
|
|
+ return AjaxResult.success(orderInvoiceService.getInvoiceForMerchant(orderId, context.ownerUserId()));
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -96,9 +101,9 @@ public class PosOrderShOprateController extends BaseController {
|
|
|
@Anonymous
|
|
|
public AjaxResult invalidInvoice(@RequestHeader String token, @PathVariable Long orderId,
|
|
|
@RequestBody(required = false) InvalidInvoiceDto dto) {
|
|
|
- Long userId = Long.valueOf(new JwtUtil().getusid(token));
|
|
|
+ MerchantAccessContext context = requireManagedOrder(token, orderId);
|
|
|
String reason = dto == null ? null : dto.getInvalidReason();
|
|
|
- return toAjax(orderInvoiceService.invalidForMerchant(orderId, reason, userId));
|
|
|
+ return toAjax(orderInvoiceService.invalidForMerchant(orderId, reason, context.ownerUserId()));
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -110,14 +115,14 @@ public class PosOrderShOprateController extends BaseController {
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public AjaxResult createOrder(@RequestHeader String token, @RequestBody OrderCreateInput input)
|
|
|
{
|
|
|
- JwtUtil jwtUtil = new JwtUtil();
|
|
|
- String id = jwtUtil.getusid(token);
|
|
|
+ Long loginUserId = merchantTokenSessionService.requireUserId(token);
|
|
|
InfoUser merchant = infoUserService.getOne(new LambdaQueryWrapper<InfoUser>()
|
|
|
- .eq(InfoUser::getUserId, Long.valueOf(id)));
|
|
|
+ .eq(InfoUser::getUserId, loginUserId));
|
|
|
validateMerchantOrderInput(merchant, input);
|
|
|
+ Long ownerUserId = resolveOrderOwner(merchant);
|
|
|
String shdz=null;
|
|
|
- createOrderParent(input,Long.valueOf(id),shdz);
|
|
|
- createOrderChild(input,Long.valueOf(id),Long.valueOf(id),shdz);
|
|
|
+ createOrderParent(input,ownerUserId,shdz);
|
|
|
+ createOrderChild(input,ownerUserId,ownerUserId,shdz);
|
|
|
|
|
|
OrderParent result = orderParentService.getOne(new LambdaQueryWrapper<OrderParent>().eq(OrderParent::getDdId, input.getDdId().toString()));
|
|
|
System.out.println("创建返回信息:"+result);
|
|
|
@@ -231,6 +236,12 @@ public class PosOrderShOprateController extends BaseController {
|
|
|
|| item.getAmount() <= 0) {
|
|
|
throw new ServiceException(MessageUtils.message("line.pay.offline.order.invalid"));
|
|
|
}
|
|
|
+ if ("5".equals(merchant.getUserType())) {
|
|
|
+ MerchantAccessContext context = merchantStoreAccessService.resolve(merchant.getUserId());
|
|
|
+ merchantStoreAccessService.requireStoreAccess(merchant.getUserId(), item.getMdId());
|
|
|
+ item.setShId(context.ownerUserId());
|
|
|
+ return;
|
|
|
+ }
|
|
|
boolean directMerchant = "1".equals(merchant.getUserType())
|
|
|
|| "3".equals(merchant.getUserType());
|
|
|
PosStore store = directMerchant ? posStoreService.getById(item.getMdId()) : null;
|
|
|
@@ -243,6 +254,13 @@ public class PosOrderShOprateController extends BaseController {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ private Long resolveOrderOwner(InfoUser merchant) {
|
|
|
+ if (merchant != null && "5".equals(merchant.getUserType())) {
|
|
|
+ return merchantStoreAccessService.resolve(merchant.getUserId()).ownerUserId();
|
|
|
+ }
|
|
|
+ return merchant == null ? null : merchant.getUserId();
|
|
|
+ }
|
|
|
+
|
|
|
//生成取餐码,根据门店id,当天取餐码从1开始累加
|
|
|
private void setPickUpNum(PosOrder order) {
|
|
|
if (order == null || order.getMdId() == null) {
|
|
|
@@ -287,11 +305,10 @@ public class PosOrderShOprateController extends BaseController {
|
|
|
@GetMapping("/acceptOrder")
|
|
|
public AjaxResult acceptOrder(@RequestHeader String token, @RequestParam Long id) {
|
|
|
PosOrder order = posOrderService.getOne(new LambdaQueryWrapper<PosOrder>().eq(PosOrder::getId, id));
|
|
|
+ InfoUser currentUser = requireMerchantOrderAccess(token, order);
|
|
|
if (order == null || order.getState() == null || order.getState() != 0L) {
|
|
|
throw new ServiceException("订单不存在或状态不允许接单");
|
|
|
}
|
|
|
- InfoUser currentUser = currentMerchant(token);
|
|
|
- linePayOrderGuard.requireMerchantOwnership(order, currentUser);
|
|
|
linePayOrderGuard.requirePaidBeforeAccept(order);
|
|
|
requireRiderAssigned(order);
|
|
|
PosOrder update = new PosOrder();
|
|
|
@@ -313,10 +330,10 @@ public class PosOrderShOprateController extends BaseController {
|
|
|
@GetMapping("/dispatchOrder")
|
|
|
public AjaxResult dispatchOrder(@RequestHeader String token, @RequestParam Long id) {
|
|
|
PosOrder order = posOrderService.getOne(new LambdaQueryWrapper<PosOrder>().eq(PosOrder::getId, id));
|
|
|
+ requireMerchantOrderAccess(token, order);
|
|
|
if (order == null || order.getState() == null || order.getState() != 1L) {
|
|
|
throw new ServiceException("订单不存在或状态不允许出餐");
|
|
|
}
|
|
|
- linePayOrderGuard.requireMerchantOwnership(order, currentMerchant(token));
|
|
|
linePayOrderGuard.requirePaidBeforeAccept(order);
|
|
|
requireRiderAssigned(order);
|
|
|
PosOrder update = new PosOrder();
|
|
|
@@ -345,10 +362,10 @@ public class PosOrderShOprateController extends BaseController {
|
|
|
@GetMapping("/completeOrder")
|
|
|
public AjaxResult completeOrder(@RequestHeader String token, @RequestParam Long id) {
|
|
|
PosOrder order = posOrderService.getOne(new LambdaQueryWrapper<PosOrder>().eq(PosOrder::getId, id));
|
|
|
+ requireMerchantOrderAccess(token, order);
|
|
|
if (order == null || order.getState() == null || order.getState() != 2L) {
|
|
|
throw new ServiceException("订单不存在或状态不允许完成");
|
|
|
}
|
|
|
- linePayOrderGuard.requireMerchantOwnership(order, currentMerchant(token));
|
|
|
linePayOrderGuard.requirePaidBeforeAccept(order);
|
|
|
// 仅限自取(type=1)或堂食(type=2)
|
|
|
if (order.getType() == null || (order.getType() != 1L && order.getType() != 2L)) {
|
|
|
@@ -382,10 +399,10 @@ public class PosOrderShOprateController extends BaseController {
|
|
|
@GetMapping("/confirmCashPayment")
|
|
|
public AjaxResult confirmCashPayment(@RequestHeader String token, @RequestParam Long id) {
|
|
|
PosOrder order = posOrderService.getOne(new LambdaQueryWrapper<PosOrder>().eq(PosOrder::getId, id));
|
|
|
+ requireMerchantOrderAccess(token, order);
|
|
|
if (order == null) {
|
|
|
throw new ServiceException(MessageUtils.message("no.order.not.exist"));
|
|
|
}
|
|
|
- linePayOrderGuard.requireMerchantOwnership(order, currentMerchant(token));
|
|
|
if (!OrderLifecycleService.PAY_TYPE_CASH.equals(order.getPayType())) {
|
|
|
throw new ServiceException(MessageUtils.message("no.order.paytype.not.cash"));
|
|
|
}
|
|
|
@@ -414,11 +431,10 @@ public class PosOrderShOprateController extends BaseController {
|
|
|
@GetMapping("/cancelOrder")
|
|
|
public AjaxResult cancelOrder(@RequestHeader String token, @RequestParam Long id) {
|
|
|
PosOrder order = posOrderService.getOne(new LambdaQueryWrapper<PosOrder>().eq(PosOrder::getId, id));
|
|
|
+ InfoUser currentUser = requireMerchantOrderAccess(token, order);
|
|
|
if (order == null || order.getState() == null) {
|
|
|
throw new ServiceException("订单不存在");
|
|
|
}
|
|
|
- InfoUser currentUser = currentMerchant(token);
|
|
|
- linePayOrderGuard.requireMerchantOwnership(order, currentUser);
|
|
|
if (order.getState() != 0L && order.getState() != 1L) {
|
|
|
throw new ServiceException("当前状态不允许取消");
|
|
|
}
|
|
|
@@ -449,7 +465,7 @@ public class PosOrderShOprateController extends BaseController {
|
|
|
}
|
|
|
|
|
|
private InfoUser currentMerchant(String token) {
|
|
|
- Long userId = Long.valueOf(new JwtUtil().getusid(token));
|
|
|
+ Long userId = merchantTokenSessionService.requireUserId(token);
|
|
|
InfoUser user = infoUserService.getOne(new LambdaQueryWrapper<InfoUser>()
|
|
|
.eq(InfoUser::getUserId, userId));
|
|
|
if (user == null) {
|
|
|
@@ -458,6 +474,31 @@ public class PosOrderShOprateController extends BaseController {
|
|
|
return user;
|
|
|
}
|
|
|
|
|
|
+ private InfoUser requireMerchantOrderAccess(String token, PosOrder order) {
|
|
|
+ InfoUser user = currentMerchant(token);
|
|
|
+ if ("1".equals(user.getUserType()) || "5".equals(user.getUserType())) {
|
|
|
+ merchantStoreAccessService.requireOrderAccess(user.getUserId(), order == null ? null : order.getId());
|
|
|
+ } else {
|
|
|
+ linePayOrderGuard.requireMerchantOwnership(order, user);
|
|
|
+ }
|
|
|
+ return user;
|
|
|
+ }
|
|
|
+
|
|
|
+ private MerchantAccessContext requireManagedOrder(String token, Long orderId) {
|
|
|
+ Long loginUserId = merchantTokenSessionService.requireUserId(token);
|
|
|
+ InfoUser user = infoUserService.getOne(new LambdaQueryWrapper<InfoUser>()
|
|
|
+ .eq(InfoUser::getUserId, loginUserId));
|
|
|
+ if (user != null && ("1".equals(user.getUserType()) || "5".equals(user.getUserType()))) {
|
|
|
+ MerchantAccessContext context = merchantStoreAccessService.resolve(loginUserId);
|
|
|
+ merchantStoreAccessService.requireOrderAccess(loginUserId, orderId);
|
|
|
+ return context;
|
|
|
+ }
|
|
|
+ PosOrder order = posOrderService.getById(orderId);
|
|
|
+ linePayOrderGuard.requireMerchantOwnership(order, user);
|
|
|
+ return new MerchantAccessContext(loginUserId, loginUserId, true,
|
|
|
+ order == null || order.getMdId() == null ? Set.of() : Set.of(order.getMdId()));
|
|
|
+ }
|
|
|
+
|
|
|
private void requestLineRefundIfPaid(PosOrder order, String source) {
|
|
|
if (order == null || !Long.valueOf(1L).equals(order.getPayStatus())) {
|
|
|
return;
|
|
|
@@ -529,23 +570,28 @@ public class PosOrderShOprateController extends BaseController {
|
|
|
@RequestParam(required = false) String tab,
|
|
|
@RequestParam(required = false) Long mdId,
|
|
|
@RequestParam(required = false) String type) {
|
|
|
- JwtUtil jwtUtil = new JwtUtil();
|
|
|
- String userId = jwtUtil.getusid(token);
|
|
|
+ Long loginUserId = merchantTokenSessionService.requireUserId(token);
|
|
|
// 查询当前用户信息
|
|
|
- InfoUser currentUser = infoUserService.getOne(new LambdaQueryWrapper<InfoUser>().eq(InfoUser::getUserId, Long.valueOf(userId)));
|
|
|
+ InfoUser currentUser = infoUserService.getOne(new LambdaQueryWrapper<InfoUser>().eq(InfoUser::getUserId, loginUserId));
|
|
|
if (currentUser == null) {
|
|
|
throw new ServiceException("用户信息不存在");
|
|
|
}
|
|
|
|
|
|
LambdaQueryWrapper<PosOrder> wrapper = new LambdaQueryWrapper<>();
|
|
|
- wrapper.eq(mdId!=null,PosOrder::getMdId,mdId);
|
|
|
String userType = currentUser.getUserType();
|
|
|
- if ("3".equals(userType)) {
|
|
|
+ if ("1".equals(userType) || "5".equals(userType)) {
|
|
|
+ Set<Long> storeIds = merchantStoreAccessService.getAccessibleStoreIds(loginUserId);
|
|
|
+ if (mdId != null) {
|
|
|
+ merchantStoreAccessService.requireStoreAccess(loginUserId, mdId);
|
|
|
+ wrapper.eq(PosOrder::getMdId, mdId);
|
|
|
+ } else if (storeIds.isEmpty()) {
|
|
|
+ wrapper.apply("1 = 0");
|
|
|
+ } else {
|
|
|
+ wrapper.in(PosOrder::getMdId, storeIds);
|
|
|
+ }
|
|
|
+ } else if ("3".equals(userType)) {
|
|
|
// 夜市商家:shId等于用户id
|
|
|
- wrapper.eq(PosOrder::getShId, Long.valueOf(userId));
|
|
|
- } else if ("1".equals(userType)) {
|
|
|
- // 普通商家:shId等于用户id
|
|
|
- wrapper.eq(PosOrder::getShId, Long.valueOf(userId));
|
|
|
+ wrapper.eq(PosOrder::getShId, loginUserId).eq(mdId != null, PosOrder::getMdId, mdId);
|
|
|
} else {
|
|
|
// 摊位商家:mdId等于用户表中的storeId
|
|
|
if (currentUser.getStoreId() == null) {
|
|
|
@@ -556,7 +602,7 @@ public class PosOrderShOprateController extends BaseController {
|
|
|
if (type != null && !type.isEmpty()) {
|
|
|
wrapper.eq(PosOrder::getType, Long.valueOf(type));
|
|
|
}
|
|
|
- switch (tab) {
|
|
|
+ switch (tab == null ? "" : tab) {
|
|
|
case "pending":
|
|
|
wrapper.eq(PosOrder::getState, 0L)
|
|
|
// 现金自取/堂食可直接待受理;在线支付的自取/堂食必须先完成付款。
|
|
|
@@ -591,4 +637,16 @@ public class PosOrderShOprateController extends BaseController {
|
|
|
return success(result);
|
|
|
}
|
|
|
|
|
|
+ @Anonymous
|
|
|
+ @Auth
|
|
|
+ @GetMapping("/orderDetail")
|
|
|
+ public AjaxResult orderDetail(@RequestHeader String token, @RequestParam Long id) {
|
|
|
+ requireManagedOrder(token, id);
|
|
|
+ PosOrder order = posOrderService.getById(id);
|
|
|
+ if (order == null) {
|
|
|
+ throw new ServiceException(MessageUtils.message("merchant.order.not.found"));
|
|
|
+ }
|
|
|
+ return success(order);
|
|
|
+ }
|
|
|
+
|
|
|
}
|