licailing 5 rokov pred
rodič
commit
79dcb5926b

+ 3 - 0
src/main/java/com/izouma/dingdong/domain/merchant/MerchantSettings.java

@@ -86,4 +86,7 @@ public class MerchantSettings extends BaseEntity {
     @ApiModelProperty(value = "自动接单", name = "automaticOrder")
     private Boolean automaticOrder;
 
+    @ApiModelProperty(value = "是否营业中", name = "isOpening")
+    private Boolean isOpening;
+
 }

+ 1 - 1
src/main/java/com/izouma/dingdong/enums/RiderStatus.java

@@ -14,7 +14,7 @@ public enum RiderStatus {
      */
     MEAL_DELIVERY,
     /*
-    完成
+    送达
      */
     CARRY_OUT
 }

+ 2 - 0
src/main/java/com/izouma/dingdong/repo/AppraisalRepo.java

@@ -14,4 +14,6 @@ public interface AppraisalRepo extends JpaRepository<Appraisal, Long>, JpaSpecif
     List<Appraisal> findAllByMerchantId(Long merchantId);
 
     List<Appraisal> findAllByRiderId(Long riderId);
+
+
 }

+ 32 - 12
src/main/java/com/izouma/dingdong/service/AppraisalService.java

@@ -1,17 +1,17 @@
 package com.izouma.dingdong.service;
 
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.ObjectUtil;
 import com.izouma.dingdong.domain.Appraisal;
 import com.izouma.dingdong.domain.OrderGoodsSpec;
 import com.izouma.dingdong.domain.OrderInfo;
-import com.izouma.dingdong.domain.merchant.AutomaticResponse;
-import com.izouma.dingdong.domain.merchant.Goods;
+import com.izouma.dingdong.enums.OrderStatus;
 import com.izouma.dingdong.exception.BusinessException;
 import com.izouma.dingdong.repo.AppraisalRepo;
 import com.izouma.dingdong.repo.OrderGoodsSpecRepo;
 import com.izouma.dingdong.repo.OrderInfoRepo;
-import com.izouma.dingdong.repo.merchant.AutomaticResponseRepo;
-import com.izouma.dingdong.repo.merchant.GoodsRepo;
+
+import com.izouma.dingdong.service.merchant.SalesService;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 
@@ -22,9 +22,9 @@ import java.util.List;
 public class AppraisalService {
 
     private AppraisalRepo appraisalRepo;
-    private GoodsRepo goodsRepo;
     private OrderInfoRepo orderInfoRepo;
     private OrderGoodsSpecRepo orderGoodsSpecRepo;
+    private SalesService salesService;
 
     /*
     客户评价
@@ -32,21 +32,41 @@ public class AppraisalService {
     public Appraisal userAppraisal(Appraisal appraisal) {
 
         OrderInfo order = appraisal.getOrder();
-        order.setRated(true);
-        orderInfoRepo.save(order);
+        if (OrderStatus.COMPLETED.equals(order.getStatus())) {
+
+            order.setRated(true);
+            orderInfoRepo.save(order);
 
-        appraisal.setMerchantId(order.getMerchantId());
-        appraisal.setRiderId(order.getRiderId());
+            appraisal.setMerchantId(order.getMerchantId());
+            appraisal.setRiderId(order.getRiderId());
 
-        return appraisalRepo.save(appraisal);
+            Appraisal save = appraisalRepo.save(appraisal);
+            //更新销量数据
+            salesService.addLike(save.getId());
+            return save;
+        }
+        else {
+            throw new BusinessException("订单未完成");
+        }
     }
 
     /*
     按商品查找评价
      */
     public List<Appraisal> goodsAppraisals(Long goodsId) {
-
-        return null;
+        List<OrderGoodsSpec> specs = orderGoodsSpecRepo.findAllByGoodsId(goodsId);
+        if (ObjectUtil.isNull(specs)){
+            return null;
+        }
+        List<Appraisal> appraisals = CollUtil.newArrayList();
+        specs.forEach(s -> {
+            Appraisal appraisal = appraisalRepo.findByOrderId(s.getOrderId()).orElseThrow(new BusinessException("无订单"));
+            if (ObjectUtil.isNotNull(appraisal)) {
+                appraisals.add(appraisal);
+            }
+        });
+        return appraisals;
     }
 
+
 }

+ 49 - 5
src/main/java/com/izouma/dingdong/service/OrderInfoService.java

@@ -13,6 +13,7 @@ import com.izouma.dingdong.domain.user.Address;
 import com.izouma.dingdong.domain.user.Coupon;
 import com.izouma.dingdong.dto.UserOrderDTO;
 import com.izouma.dingdong.enums.MerchantStatus;
+import com.izouma.dingdong.enums.OrderStatus;
 import com.izouma.dingdong.enums.RiderStatus;
 import com.izouma.dingdong.exception.BusinessException;
 import com.izouma.dingdong.repo.OrderGoodsSpecRepo;
@@ -27,6 +28,7 @@ import com.izouma.dingdong.repo.user.CouponRepo;
 import com.izouma.dingdong.service.merchant.GoodsService;
 import com.izouma.dingdong.service.merchant.MerchantService;
 import com.izouma.dingdong.service.merchant.MerchantSettingsService;
+import com.izouma.dingdong.service.merchant.SalesService;
 import lombok.AllArgsConstructor;
 import me.chanjar.weixin.mp.bean.card.enums.BusinessServiceType;
 import org.springframework.stereotype.Service;
@@ -51,6 +53,7 @@ public class OrderInfoService {
     private AddressRepo addressRepo;
     private UserRepo userRepo;
     private MerchantService merchantService;
+    private SalesService salesService;
 
     /*
     用户下单
@@ -72,7 +75,7 @@ public class OrderInfoService {
         LocalTime nowTime = LocalTime.now();
 
         //是否营业时间内
-        if (startTime.compareTo(nowTime) >= 0 || endTime.compareTo(nowTime) <= 0) {
+        if (startTime.compareTo(nowTime) >= 0 || endTime.compareTo(nowTime) <= 0 || !merchantSettings.getIsOpening()) {
             throw new BusinessException("非营业时间");
         }
 
@@ -165,7 +168,7 @@ public class OrderInfoService {
     /*
     商家接单
      */
-    public void merReceiveOrder(Long orderId, Boolean pass) {
+    public OrderInfo merReceiveOrder(Long orderId, Boolean pass) {
         OrderInfo orderInfo = orderInfoRepo.findById(orderId).orElseThrow(new BusinessException("无订单"));
         if (pass) {
             orderInfo.setMerchantStatus(MerchantStatus.RECEIVED);
@@ -175,7 +178,7 @@ public class OrderInfoService {
             orderInfo.setCancel(true);
             //退款流程
         }
-        orderInfoRepo.save(orderInfo);
+        return orderInfoRepo.save(orderInfo);
     }
 
     /*
@@ -205,7 +208,48 @@ public class OrderInfoService {
     }
 
     /*
-    我的订单
+    分配骑手
+     */
+
+    /*
+    骑手点状态
+     */
+    public void carryOut(Long orderId, Boolean next) {
+        if (next) {
+            //userRepo.findById(userId).orElseThrow(new BusinessException("无用户"));
+            OrderInfo orderInfo = orderInfoRepo.findById(orderId).orElseThrow(new BusinessException("无订单"));
+
+            if (MerchantStatus.RECEIVED.equals(orderInfo.getMerchantStatus())) {
+                RiderStatus riderStatus = orderInfo.getRiderStatus();
+                switch (riderStatus) {
+                    case RECEIVED:
+                        orderInfo.setRiderStatus(RiderStatus.TAKE_MEAL);
+                        break;
+                    case TAKE_MEAL:
+                        orderInfo.setRiderStatus(RiderStatus.MEAL_DELIVERY);
+                        break;
+                    case MEAL_DELIVERY:
+                        orderInfo.setRiderStatus(RiderStatus.CARRY_OUT);
+                        orderInfo.setUserReceivedTime(LocalDateTime.now());
+                        orderInfo.setStatus(OrderStatus.COMPLETED);
+
+                        //添加销量数据
+                        salesService.addSale(orderInfo);
+                        break;
+                }
+                orderInfoRepo.save(orderInfo);
+            } else {
+                throw new BusinessException("出错");
+            }
+        }
+    }
+
+
+    /**
+     * 按用户ID查出用户/商家/骑手订单
+     *
+     * @param userId 登录的ID
+     * @return 订单列表
      */
     public List<OrderInfo> my(Long userId) {
         User user = userRepo.findById(userId).orElseThrow(new BusinessException("无用户"));
@@ -215,7 +259,7 @@ public class OrderInfoService {
             case MERCHANT:
                 Long merchantId = merchantService.findMerchantId(userId);
                 return orderInfoRepo.findAllByMerchantId(merchantId);
-           // case RIDER:
+            // case RIDER:
         }
         return null;
     }

+ 2 - 2
src/main/java/com/izouma/dingdong/service/merchant/GoodsService.java

@@ -136,8 +136,8 @@ public class GoodsService {
 
     /**
      * 审核
-     * @param goodsId
-     * @param pass
+     * @param goodsId 商品ID
+     * @param pass 是否通过
      */
     public void audit(Long goodsId, Boolean pass) {
         Goods goods = goodsRepo.findById(goodsId).orElseThrow(new BusinessException("无商品"));

+ 19 - 0
src/main/java/com/izouma/dingdong/service/merchant/MerchantService.java

@@ -114,6 +114,7 @@ public class MerchantService {
         BeanUtil.copyProperties(merchantDTO, merchantSettings);
         merchantSettings.setMerchantId(merchant.getId());
         merchantSettings.setEnabled(true);
+        merchantSettings.setIsOpening(true);
         merchantSettingsRepo.save(merchantSettings);
 
         return merchantDTO;
@@ -221,5 +222,23 @@ public class MerchantService {
         return merchant.getId();
     }
 
+    /*
+    开始/停止营业
+     */
+    public void closeMer(Long merchantId) {
+        MerchantSettings merchant = merchantSettingsRepo.findByMerchantId(merchantId).orElseThrow(new BusinessException("无商户"));
+        if (merchant.getIsOpening()) {
+            merchant.setIsOpening(false);
+        } else {
+            merchant.setIsOpening(true);
+        }
+        merchantSettingsRepo.save(merchant);
+    }
+
+    /*
+    筛选新店
+     */
+
+
 
 }

+ 28 - 6
src/main/java/com/izouma/dingdong/service/merchant/SalesService.java

@@ -35,11 +35,12 @@ public class SalesService {
     private MerchantClassificationService merchantClassificationService;
 
     /*
-    订单插入销量
+    订单插入销量
      */
     public void addSale(OrderInfo orderInfo) {
         LocalDate localDate = LocalDate.now();
 
+        //订单规格
         List<OrderGoodsSpec> orderGoodsSpecs = orderGoodsSpecRepo.findAllByOrderId(orderInfo.getId());
         orderGoodsSpecs.forEach(
                 spec -> {
@@ -59,7 +60,7 @@ public class SalesService {
                     //有订单,销量 + 购买数量
                     daySales.setDaySales(daySales.getDaySales() + spec.getNum());
 
-                    //已评价
+                    /*//已评价
                     if (orderInfo.getRated()) {
                         Appraisal appraisal = appraisalRepo.findByOrderId(orderInfo.getId()).orElseThrow(new BusinessException("评价不存在"));
                         if (appraisal.getGoodsLike()) {
@@ -73,12 +74,35 @@ public class SalesService {
                             //查商品数据,加差评数
                             goodsRepo.updateBadById(spec.getGoodsId());
                         }
-                    }
+                    }*/
 
                     //保存
                     salesRepo.save(daySales);
                 }
         );
+    }
+
+    /*
+    评价时加入销量
+     */
+    public void addLike(Long appraisalId){
+        Appraisal appraisal = appraisalRepo.findByOrderId(appraisalId).orElseThrow(new BusinessException("评价不存在"));
+        List<OrderGoodsSpec> specs = orderGoodsSpecRepo.findAllByOrderId(appraisal.getOrderId());
+        specs.forEach(spec->{
+            Sales daySales = salesRepo.findByGoodsIdAndDay(spec.getGoodsId(), LocalDate.now());
+            if (appraisal.getGoodsLike()) {
+                daySales.setDayLikes(daySales.getDayLikes() + 1);
+                //查商品数据,加好评数
+                goodsRepo.updateLikesById(spec.getGoodsId());
+            }
+
+            if (appraisal.getGoodsBad()) {
+                daySales.setDayBad(daySales.getDayBad() + 1);
+                //查商品数据,加差评数
+                goodsRepo.updateBadById(spec.getGoodsId());
+            }
+            salesRepo.save(daySales);
+        });
 
     }
 
@@ -112,13 +136,13 @@ public class SalesService {
                     salesRepo.save(sales);
                 }
         );
+        addClass();
     }
 
     /*
     如果有好评人气商品插入分类
      */
     public void addClass() {
-
         //查出今天所有人气商品
         List<Sales> popularities = salesRepo.findAllByDayAndPopularityGreaterThanEqual(LocalDate.now(), 5);
 
@@ -128,8 +152,6 @@ public class SalesService {
         //插入
         popularities.forEach(this::into);
         praises.forEach(this::into);
-
-
     }
 
 

+ 9 - 3
src/main/java/com/izouma/dingdong/web/AppraisalController.java

@@ -64,7 +64,7 @@ public class AppraisalController extends BaseController {
     }
 
     @ApiOperation("用户评价")
-    @GetMapping("/userAppraisal")
+    @PostMapping("/userAppraisal")
     public Appraisal userAppraisal(Appraisal appraisal) {
         return appraisalService.userAppraisal(appraisal);
     }
@@ -78,8 +78,8 @@ public class AppraisalController extends BaseController {
     }
 
     @GetMapping("/my")
-    @ApiOperation("显示商的所有评价")
-    public List<Appraisal> merchant() {
+    @ApiOperation("显示商的所有评价")
+    public List<Appraisal> my() {
         return appraisalRepo.findAllByMerchantId(merchantService.findMerchantId(SecurityUtils.getAuthenticatedUser().getId()));
     }
 
@@ -89,5 +89,11 @@ public class AppraisalController extends BaseController {
         return appraisalRepo.findByOrderId(orderId).orElseThrow(new BusinessException("无评价"));
     }
 
+    @GetMapping("/goods")
+    @ApiOperation("商品评价")
+    public List<Appraisal> goods(Long goodsId){
+        return appraisalService.goodsAppraisals(goodsId);
+    }
+
 }
 

+ 15 - 4
src/main/java/com/izouma/dingdong/web/OrderInfoController.java

@@ -42,7 +42,7 @@ public class OrderInfoController extends BaseController {
     //@PreAuthorize("hasRole('ADMIN')")
     @GetMapping("/all")
     public Page<OrderInfo> all(PageQuery pageQuery) {
-        return orderInfoRepo.findAll(toSpecification(pageQuery,OrderInfo.class), toPageRequest(pageQuery));
+        return orderInfoRepo.findAll(toSpecification(pageQuery, OrderInfo.class), toPageRequest(pageQuery));
     }
 
     @GetMapping("/get/{id}")
@@ -65,23 +65,34 @@ public class OrderInfoController extends BaseController {
 
     @PostMapping("/order")
     @ApiOperation("从购物车生成订单")
-    public OrderInfo order(UserOrderDTO userOrderDTO){
+    public OrderInfo order(UserOrderDTO userOrderDTO) {
         return orderInfoService.userOrder(userOrderDTO);
     }
 
     @GetMapping("/my")
     @ApiOperation("个人订单")
-    public List<OrderInfo> my(){
+    public List<OrderInfo> my() {
         return orderInfoService.my(SecurityUtils.getAuthenticatedUser().getId());
     }
 
 
     @GetMapping("/list")
     @ApiOperation("/按userId查订单")
-    public List<OrderInfo> list(Long id){
+    public List<OrderInfo> list(Long id) {
         //        new PageImpl<>(list,toPageRequest(pageQuery),pageQuery.getSize())
         return orderInfoService.my(id);
     }
 
+    @GetMapping("/received")
+    @ApiOperation("商家手动接单")
+    public OrderInfo received(Long orderId, Boolean pass) {
+        return orderInfoService.merReceiveOrder(orderId, pass);
+    }
+
+    @GetMapping("/riderStatus")
+    @ApiOperation("骑手改变状态")
+    public void riderStatus(Long orderId, Boolean pass) {
+        orderInfoService.carryOut(orderId, pass);
+    }
 }
 

+ 4 - 4
src/main/java/com/izouma/dingdong/web/UserController.java

@@ -52,10 +52,10 @@ public class UserController extends BaseController {
             ObjUtils.merge(orig, user);
             return userRepo.save(orig);
         }
-        if (user.getAuthorities() == null) {
-            user.setAuthorities(Collections.singleton(Authority.getInstance(Authority.NAMES.ROLE_USER)));
-            user.setIdentity(Identity.USER);
-        }
+//        if (user.getAuthorities() == null) {
+//            user.setAuthorities(Collections.singleton(Authority.getInstance(Authority.NAMES.ROLE_USER)));
+//            user.setIdentity(Identity.USER);
+//        }
         return userRepo.save(user);
     }
 

+ 10 - 6
src/main/java/com/izouma/dingdong/web/merchant/MerchantController.java

@@ -72,12 +72,6 @@ public class MerchantController extends BaseController {
         return merchantService.showAll(toPageRequest(pageQuery));
     }
 
-    @PostMapping("/reg")
-    @ApiOperation("商家注册申请")
-    public MerchantDTO reg(@RequestBody MerchantDTO merchantDTO) {
-        return merchantService.registerApply(merchantDTO);
-    }
-
     @GetMapping("/my")
     public MerchantDTO my() {
         return merchantService.my(SecurityUtils.getAuthenticatedUser().getId());
@@ -91,13 +85,23 @@ public class MerchantController extends BaseController {
     }
 
     @PostMapping("/saveDTO")
+    @ApiOperation("新建/修改商家")
     public MerchantDTO saveDTO(@RequestBody MerchantDTO record) {
         return merchantService.change(record);
     }
 
     @GetMapping("/audit")
+    @ApiOperation("审核商家")
     public void audit(Long id, Boolean pass) {
         merchantService.audit(id, pass);
     }
+
+    @GetMapping("/closeMer")
+    @ApiOperation("停止营业/开始营业")
+    public void closeMer(){
+        Long merchantId = merchantService.findMerchantId(SecurityUtils.getAuthenticatedUser().getId());
+        merchantService.closeMer(merchantId);
+    }
+
 }
 

+ 4 - 4
src/main/vue/src/views/UserEdit.vue

@@ -30,11 +30,11 @@
                             </el-select>
                         </el-form-item>-->
             <el-form-item>
-                <!--                <el-button @click="onSave" :loading="$store.state.fetchingData"
+                <el-button @click="onSave" :loading="$store.state.fetchingData"
                                            type="primary">保存</el-button>
-                                <el-button @click="del" :loading="$store.state.fetchingData"
-                                           type="danger" v-if="formData.id">删除
-                                </el-button>-->
+                <!--             <el-button @click="del" :loading="$store.state.fetchingData"
+                                      type="danger" v-if="formData.id">删除
+                           </el-button>-->
                 <el-button @click="showSetLogistics=true" :loading="$store.state.fetchingData"
                            type="danger" v-if="formData.id">移入黑名单
                 </el-button>

+ 1 - 1
src/main/vue/src/views/backstage/BlackUserEdit.vue

@@ -144,7 +144,7 @@ export default {
         del() {
             this.$confirm('确认删除吗?', '提示', { type: 'warning' })
                 .then(() => {
-                    this.$http
+                    return this.$http
                         .post({
                             url: '/userInfo/del',
                             data: {