| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194 |
- package com.ruoyi.app.order;
- import com.alibaba.fastjson.JSON;
- import com.alibaba.fastjson.JSONObject;
- import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
- import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
- import com.ruoyi.app.order.dto.OrderCreateInput;
- import com.ruoyi.app.order.dto.OrderCreatItem;
- import com.ruoyi.app.utils.DateUtil;
- import com.ruoyi.common.annotation.Anonymous;
- import com.ruoyi.common.core.controller.BaseController;
- import com.ruoyi.common.core.domain.AjaxResult;
- import com.ruoyi.common.exception.ServiceException;
- import com.ruoyi.common.utils.MessageUtils;
- import com.ruoyi.system.domain.*;
- import com.ruoyi.system.service.*;
- import com.ruoyi.system.utils.Auth;
- import com.ruoyi.system.utils.JwtUtil;
- import org.springframework.web.bind.annotation.*;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.transaction.annotation.Transactional;
- import java.util.Date;
- import java.util.List;
- import java.util.Optional;
- import java.util.stream.Collectors;
- /**
- * 用户订单Controller
- *
- * @author ruoyi
- * @date 2020-04-01
- */
- @RestController
- @RequestMapping("/system/userOrder")
- public class UserOrderController extends BaseController {
- @Autowired
- private IOrderParentService orderParentService;
- @Autowired
- private IPosOrderService posOrderService;
- @Autowired
- private IPosStoreService posStoreService;
- @Autowired
- private IInfoAddressService infoAddressService;
- @Autowired
- private IOperatingHoursService operatingHoursService;
- /**
- * 创建订单
- */
- @PostMapping("/createOrder")
- @Auth
- @Anonymous
- @Transactional(rollbackFor = Exception.class)
- public AjaxResult createOrder(@RequestHeader String token, @RequestBody OrderCreateInput input)
- {
- JwtUtil jwtUtil = new JwtUtil();
- String id = jwtUtil.getusid(token);
- String shdz=null;
- if(input.getType()==0){
- InfoAddress usadd = infoAddressService.getById(input.getShdzId());
- if (usadd == null) {
- throw new ServiceException(MessageUtils.message("no.address.not.exist"));
- }
- shdz= JSON.toJSONString(usadd);
- }
- createOrderParent(input,Long.valueOf(id),shdz);
- createOrderChild(input,Long.valueOf(id),Long.valueOf(id),shdz);
- OrderParent result = orderParentService.getOne(new LambdaQueryWrapper<OrderParent>().eq(OrderParent::getDdId, input.getDdId().toString()));
- return super.success(result);
- }
- //创建父订单
- private void createOrderParent(OrderCreateInput input,Long UserId,String shdz){
- OrderParent orderParent = new OrderParent();
- orderParent.setUserId(UserId);
- orderParent.setOrderStatus(0L);
- orderParent.setTotalAmount(input.getTotalAmount());
- orderParent.setActualPayAmount(input.getActualPayAmount());
- orderParent.setPaymentMethod(input.getPaymentMethod());
- // orderParent.setPaymentTime(new Date());
- orderParent.setCreateTime(new Date());
- // orderParent.setUpdateTime(new Date());
- orderParent.setDdId(input.getDdId().toString());
- orderParent.setTableNum(input.getTableNum());
- orderParent.setShdzId(input.getShdzId());
- orderParent.setShAddress(shdz);
- orderParent.setType(input.getType());
- orderParent.setRemarks(input.getRemarks());
- orderParentService.save(orderParent);
- }
- //创建子订单
- private void createOrderChild(OrderCreateInput input,Long orderParentId,Long userId,String shdz){
- // 检查items是否为空
- if (input.getItems() == null || input.getItems().isEmpty()) {
- throw new ServiceException(MessageUtils.message("订单商品不能为空"));
- }
- String ddId = input.getDdId().toString();
- List<Long> mdIdList = input.getItems().stream().map(OrderCreatItem::getMdId).collect(Collectors.toList());
- List<PosStore> storeList = posStoreService.list(new LambdaQueryWrapper<PosStore>().in(PosStore::getId, mdIdList));
- LambdaQueryWrapper<OperatingHours> wrapper = new LambdaQueryWrapper<>();
- wrapper.in(OperatingHours::getMdId, mdIdList);
- List<OperatingHours> hourslist = operatingHoursService.list(wrapper);
- DateUtil dateUtil = new DateUtil();
- // 循环items,为每个item创建一条PosOrder
- for (OrderCreatItem item : input.getItems()) {
- // 检查门店是否开放
- checkStoreOpen(storeList,hourslist,item,dateUtil);
- int index = input.getItems().indexOf(item) + 1;
- String subddId = ddId+ index;
- PosOrder posOrder = new PosOrder();
- posOrder.setShdzId(input.getShdzId());
- // 设置子订单的基本信息
- posOrder.setDdId(subddId);
- posOrder.setParentDdId(input.getDdId().toString()); // 设置父订单ID
- posOrder.setCretim(new Date());
- posOrder.setState(0L); // 初始状态
- // 根据item设置订单信息
- posOrder.setShId(item.getShId());
- posOrder.setMdId(item.getMdId());
- posOrder.setShdzId(input.getShdzId());
- posOrder.setUserId(userId);
- posOrder.setAmount(item.getAmount());
- posOrder.setRemarks(item.getRemarks());
- posOrder.setType(item.getType());
- posOrder.setDelryTime(item.getDelryTime());
- posOrder.setFood(JSON.toJSONString(item.getFood()));
- if("1".equals(input.getPaymentMethod())){
- posOrder.setCollectPayment("1");
- }
- // 设置支付相关信息(从父订单继承)
- posOrder.setPayType(input.getPaymentMethod());
- //设置桌号(从父订单继承)
- posOrder.setTableNum(input.getTableNum());
- posOrder.setLogo(item.getLogo());
- posOrder.setPosName(item.getPosName());
- posOrder.setJvli(item.getJvli());
- posOrder.setFreight(item.getFreight());
- posOrder.setShdzId(input.getShdzId());
- posOrder.setShAddress(shdz);
- Optional<PosStore> store= storeList.stream().filter(x-> item.getMdId().equals(x.getId())).findFirst();
- if (!store.isPresent()) {
- throw new ServiceException(MessageUtils.message("no.mendian.not.exist"));
- }
- posOrder.setLongitude(store.get().getLongitude());
- posOrder.setLatitude(store.get().getLatitude());
- //设置订单分类
- storeList.stream().filter(s -> Long.valueOf(s.getId()).equals(item.getMdId())).findFirst().ifPresent(st -> {
- posOrder.setOrderCategory(String.valueOf(st.getType()));
- });
- // 保存子订单
- posOrderService.save(posOrder);
- }
- }
- /**
- * 检查门店是否开放
- */
- private void checkStoreOpen( List<PosStore> storeList,List<OperatingHours> hourslist, OrderCreatItem item, DateUtil dateUtil) {
- List<OperatingHours> storeHourslist = hourslist.stream().filter(x-> x.getMdId().equals(item.getMdId())).collect(Collectors.toList());
- PosStore store = storeList.stream().filter(x-> Long.valueOf(x.getId()).equals(item.getMdId())).findFirst().get();
- if (storeHourslist.isEmpty()) {
- throw new ServiceException(store.getPosName()+MessageUtils.message("no.mendian.not.set.business.hours"));
- }
- if (store.getState() == 1) {
- throw new ServiceException(store.getPosName()+MessageUtils.message("no.mendian.is.closed"));
- }
- Boolean dayang = false;
- for (int i = 0; i < hourslist.size(); i++) {
- Boolean sbsj = dateUtil.isLegalTime(hourslist.get(i).getStartTime(), hourslist.get(i).getEndTime());
- if (sbsj == true) {
- dayang = true;
- }
- }
- if (dayang == false) {
- throw new ServiceException(store.getPosName()+MessageUtils.message("no.mendian.is.closed"));
- }
- }
- /**
- * 获取父订单详情
- */
- @GetMapping("/getParentOrderDetail")
- @Auth
- @Anonymous
- public AjaxResult getParentOrderDetail(@RequestHeader String token, @RequestParam String ddId){
- OrderParent result = orderParentService.getOne(new LambdaQueryWrapper<OrderParent>().eq(OrderParent::getDdId,ddId));
- List<PosOrder> posOrders = posOrderService.list(new LambdaQueryWrapper<PosOrder>().eq(PosOrder::getParentDdId,ddId).orderBy(true,true,PosOrder::getCretim));
- result.setItems(posOrders);
- return super.success(result);
- }
- }
|