UserOrderController.java 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. package com.ruoyi.app.order;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  5. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  6. import com.ruoyi.app.order.dto.OrderCreateInput;
  7. import com.ruoyi.app.order.dto.OrderCreatItem;
  8. import com.ruoyi.app.utils.DateUtil;
  9. import com.ruoyi.common.annotation.Anonymous;
  10. import com.ruoyi.common.core.controller.BaseController;
  11. import com.ruoyi.common.core.domain.AjaxResult;
  12. import com.ruoyi.common.exception.ServiceException;
  13. import com.ruoyi.common.utils.MessageUtils;
  14. import com.ruoyi.system.domain.*;
  15. import com.ruoyi.system.service.*;
  16. import com.ruoyi.system.utils.Auth;
  17. import com.ruoyi.system.utils.JwtUtil;
  18. import org.springframework.web.bind.annotation.*;
  19. import org.springframework.beans.factory.annotation.Autowired;
  20. import org.springframework.transaction.annotation.Transactional;
  21. import java.util.Date;
  22. import java.util.List;
  23. import java.util.Optional;
  24. import java.util.stream.Collectors;
  25. /**
  26. * 用户订单Controller
  27. *
  28. * @author ruoyi
  29. * @date 2020-04-01
  30. */
  31. @RestController
  32. @RequestMapping("/system/userOrder")
  33. public class UserOrderController extends BaseController {
  34. @Autowired
  35. private IOrderParentService orderParentService;
  36. @Autowired
  37. private IPosOrderService posOrderService;
  38. @Autowired
  39. private IPosStoreService posStoreService;
  40. @Autowired
  41. private IInfoAddressService infoAddressService;
  42. @Autowired
  43. private IOperatingHoursService operatingHoursService;
  44. /**
  45. * 创建订单
  46. */
  47. @PostMapping("/createOrder")
  48. @Auth
  49. @Anonymous
  50. @Transactional(rollbackFor = Exception.class)
  51. public AjaxResult createOrder(@RequestHeader String token, @RequestBody OrderCreateInput input)
  52. {
  53. JwtUtil jwtUtil = new JwtUtil();
  54. String id = jwtUtil.getusid(token);
  55. String shdz=null;
  56. if(input.getType()==0){
  57. InfoAddress usadd = infoAddressService.getById(input.getShdzId());
  58. if (usadd == null) {
  59. throw new ServiceException(MessageUtils.message("no.address.not.exist"));
  60. }
  61. shdz= JSON.toJSONString(usadd);
  62. }
  63. createOrderParent(input,Long.valueOf(id),shdz);
  64. createOrderChild(input,Long.valueOf(id),Long.valueOf(id),shdz);
  65. OrderParent result = orderParentService.getOne(new LambdaQueryWrapper<OrderParent>().eq(OrderParent::getDdId, input.getDdId().toString()));
  66. return super.success(result);
  67. }
  68. //创建父订单
  69. private void createOrderParent(OrderCreateInput input,Long UserId,String shdz){
  70. OrderParent orderParent = new OrderParent();
  71. orderParent.setUserId(UserId);
  72. orderParent.setOrderStatus(0L);
  73. orderParent.setTotalAmount(input.getTotalAmount());
  74. orderParent.setActualPayAmount(input.getActualPayAmount());
  75. orderParent.setPaymentMethod(input.getPaymentMethod());
  76. // orderParent.setPaymentTime(new Date());
  77. orderParent.setCreateTime(new Date());
  78. // orderParent.setUpdateTime(new Date());
  79. orderParent.setDdId(input.getDdId().toString());
  80. orderParent.setTableNum(input.getTableNum());
  81. orderParent.setShdzId(input.getShdzId());
  82. orderParent.setShAddress(shdz);
  83. orderParent.setType(input.getType());
  84. orderParent.setRemarks(input.getRemarks());
  85. orderParentService.save(orderParent);
  86. }
  87. //创建子订单
  88. private void createOrderChild(OrderCreateInput input,Long orderParentId,Long userId,String shdz){
  89. // 检查items是否为空
  90. if (input.getItems() == null || input.getItems().isEmpty()) {
  91. throw new ServiceException(MessageUtils.message("订单商品不能为空"));
  92. }
  93. String ddId = input.getDdId().toString();
  94. List<Long> mdIdList = input.getItems().stream().map(OrderCreatItem::getMdId).collect(Collectors.toList());
  95. List<PosStore> storeList = posStoreService.list(new LambdaQueryWrapper<PosStore>().in(PosStore::getId, mdIdList));
  96. LambdaQueryWrapper<OperatingHours> wrapper = new LambdaQueryWrapper<>();
  97. wrapper.in(OperatingHours::getMdId, mdIdList);
  98. List<OperatingHours> hourslist = operatingHoursService.list(wrapper);
  99. DateUtil dateUtil = new DateUtil();
  100. // 循环items,为每个item创建一条PosOrder
  101. for (OrderCreatItem item : input.getItems()) {
  102. // 检查门店是否开放
  103. checkStoreOpen(storeList,hourslist,item,dateUtil);
  104. int index = input.getItems().indexOf(item) + 1;
  105. String subddId = ddId+ index;
  106. PosOrder posOrder = new PosOrder();
  107. posOrder.setShdzId(input.getShdzId());
  108. // 设置子订单的基本信息
  109. posOrder.setDdId(subddId);
  110. posOrder.setParentDdId(input.getDdId().toString()); // 设置父订单ID
  111. posOrder.setCretim(new Date());
  112. posOrder.setState(0L); // 初始状态
  113. // 根据item设置订单信息
  114. posOrder.setShId(item.getShId());
  115. posOrder.setMdId(item.getMdId());
  116. posOrder.setShdzId(input.getShdzId());
  117. posOrder.setUserId(userId);
  118. posOrder.setAmount(item.getAmount());
  119. posOrder.setRemarks(item.getRemarks());
  120. posOrder.setType(item.getType());
  121. posOrder.setDelryTime(item.getDelryTime());
  122. posOrder.setFood(JSON.toJSONString(item.getFood()));
  123. if("1".equals(input.getPaymentMethod())){
  124. posOrder.setCollectPayment("1");
  125. }
  126. // 设置支付相关信息(从父订单继承)
  127. posOrder.setPayType(input.getPaymentMethod());
  128. //设置桌号(从父订单继承)
  129. posOrder.setTableNum(input.getTableNum());
  130. posOrder.setLogo(item.getLogo());
  131. posOrder.setPosName(item.getPosName());
  132. posOrder.setJvli(item.getJvli());
  133. posOrder.setFreight(item.getFreight());
  134. posOrder.setShdzId(input.getShdzId());
  135. posOrder.setShAddress(shdz);
  136. Optional<PosStore> store= storeList.stream().filter(x-> item.getMdId().equals(x.getId())).findFirst();
  137. if (!store.isPresent()) {
  138. throw new ServiceException(MessageUtils.message("no.mendian.not.exist"));
  139. }
  140. posOrder.setLongitude(store.get().getLongitude());
  141. posOrder.setLatitude(store.get().getLatitude());
  142. //设置订单分类
  143. storeList.stream().filter(s -> Long.valueOf(s.getId()).equals(item.getMdId())).findFirst().ifPresent(st -> {
  144. posOrder.setOrderCategory(String.valueOf(st.getType()));
  145. });
  146. // 保存子订单
  147. posOrderService.save(posOrder);
  148. }
  149. }
  150. /**
  151. * 检查门店是否开放
  152. */
  153. private void checkStoreOpen( List<PosStore> storeList,List<OperatingHours> hourslist, OrderCreatItem item, DateUtil dateUtil) {
  154. List<OperatingHours> storeHourslist = hourslist.stream().filter(x-> x.getMdId().equals(item.getMdId())).collect(Collectors.toList());
  155. PosStore store = storeList.stream().filter(x-> Long.valueOf(x.getId()).equals(item.getMdId())).findFirst().get();
  156. if (storeHourslist.isEmpty()) {
  157. throw new ServiceException(store.getPosName()+MessageUtils.message("no.mendian.not.set.business.hours"));
  158. }
  159. if (store.getState() == 1) {
  160. throw new ServiceException(store.getPosName()+MessageUtils.message("no.mendian.is.closed"));
  161. }
  162. Boolean dayang = false;
  163. for (int i = 0; i < hourslist.size(); i++) {
  164. Boolean sbsj = dateUtil.isLegalTime(hourslist.get(i).getStartTime(), hourslist.get(i).getEndTime());
  165. if (sbsj == true) {
  166. dayang = true;
  167. }
  168. }
  169. if (dayang == false) {
  170. throw new ServiceException(store.getPosName()+MessageUtils.message("no.mendian.is.closed"));
  171. }
  172. }
  173. /**
  174. * 获取父订单详情
  175. */
  176. @GetMapping("/getParentOrderDetail")
  177. @Auth
  178. @Anonymous
  179. public AjaxResult getParentOrderDetail(@RequestHeader String token, @RequestParam String ddId){
  180. OrderParent result = orderParentService.getOne(new LambdaQueryWrapper<OrderParent>().eq(OrderParent::getDdId,ddId));
  181. List<PosOrder> posOrders = posOrderService.list(new LambdaQueryWrapper<PosOrder>().eq(PosOrder::getParentDdId,ddId).orderBy(true,true,PosOrder::getCretim));
  182. result.setItems(posOrders);
  183. return super.success(result);
  184. }
  185. }