From 040dac975e693ea3e4f7da1d65ea5defdb9eb1cf Mon Sep 17 00:00:00 2001 From: tangzh Date: Mon, 10 Mar 2025 22:41:52 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- food-admin/pom.xml | 2 +- .../task/bargain/BargainStopChangeTask.java | 80 +++--- .../task/brokerage/BrokerageFrozenTask.java | 76 +++--- .../task/integral/IntegralFrozenTask.java | 80 +++--- .../admin/task/pink/PinkStatusChangeTask.java | 76 +++--- .../admin/task/product/ProductStockTask.java | 4 +- food-common/pom.xml | 2 +- .../com/zbkj/common/constants/Constants.java | 18 +- .../zbkj/common/constants/PayConstants.java | 2 +- .../common/constants/SysConfigConstants.java | 4 + .../model/deliveryset/DeliverySetFee.java | 54 ---- .../model/product/StoreProductReply.java | 4 + .../zbkj/common/request/CartNumRequest.java | 4 +- .../common/request/CreateOrderRequest.java | 9 +- .../request/OrderComputedPriceRequest.java | 2 +- .../zbkj/common/request/PreOrderRequest.java | 5 +- .../request/ShippingTemplatesRequest.java | 4 +- .../request/StoreProductAddRequest.java | 3 +- .../common/response/CartInfoResponse.java | 4 + .../common/response/DeliveryTimeResponse.java | 32 +++ .../common/response/IndexProductResponse.java | 13 + .../StoreProductReplayCountResponse.java | 7 +- .../com/zbkj/common/utils/DeliveryUtil.java | 142 ++++++++++ .../com/zbkj/common/utils/DistanceUtil.java | 32 +++ .../java/com/zbkj/common/vo/OrderInfoVo.java | 3 + .../com/zbkj/common/vo/ReplyReviewTagsVo.java | 21 ++ food-front/pom.xml | 2 +- .../zbkj/front/controller/CartController.java | 4 +- .../front/controller/CouponController.java | 7 +- .../controller/DeliveryTimeController.java | 32 +++ .../front/controller/IndexController.java | 17 -- .../front/controller/ProductController.java | 41 +-- .../front/controller/QrCodeController.java | 1 + .../controller/StoreOrderController.java | 5 +- .../com/zbkj/front/service/IndexService.java | 8 - .../zbkj/front/service/ProductService.java | 30 +-- .../front/service/impl/IndexServiceImpl.java | 66 ----- .../service/impl/ProductServiceImpl.java | 249 +++--------------- food-service/pom.xml | 2 +- .../zbkj/service/dao/DeliverySetFeeDao.java | 8 - .../service/dao/StoreProductReplyDao.java | 5 + .../com/zbkj/service/delete/OrderUtils.java | 93 ++++--- .../service/DeliverySetFeeService.java | 10 - .../service/DeliverySetTimeService.java | 6 + .../service/service/StoreCartService.java | 2 +- .../service/StoreProductReplyService.java | 2 +- .../impl/DeliverySetFeeServiceImpl.java | 12 - .../impl/DeliverySetTimeServiceImpl.java | 32 +++ .../service/impl/EbHomeServiceImpl.java | 4 +- .../service/impl/OrderServiceImpl.java | 115 +++++++- .../ShippingTemplatesFreeServiceImpl.java | 23 +- .../ShippingTemplatesRegionServiceImpl.java | 28 +- .../impl/ShippingTemplatesServiceImpl.java | 5 +- .../service/impl/StoreCartServiceImpl.java | 17 +- .../service/impl/StoreOrderServiceImpl.java | 2 +- .../impl/StoreProductReplyServiceImpl.java | 10 +- .../service/impl/WeChatPayServiceImpl.java | 2 - .../express/ShippingTemplatesFreeMapper.xml | 2 +- .../mapper/store/StoreProductReplyMapper.xml | 10 + 59 files changed, 858 insertions(+), 677 deletions(-) delete mode 100644 food-common/src/main/java/com/zbkj/common/model/deliveryset/DeliverySetFee.java create mode 100644 food-common/src/main/java/com/zbkj/common/response/DeliveryTimeResponse.java create mode 100644 food-common/src/main/java/com/zbkj/common/utils/DeliveryUtil.java create mode 100644 food-common/src/main/java/com/zbkj/common/utils/DistanceUtil.java create mode 100644 food-common/src/main/java/com/zbkj/common/vo/ReplyReviewTagsVo.java create mode 100644 food-front/src/main/java/com/zbkj/front/controller/DeliveryTimeController.java delete mode 100644 food-service/src/main/java/com/zbkj/service/dao/DeliverySetFeeDao.java delete mode 100644 food-service/src/main/java/com/zbkj/service/service/DeliverySetFeeService.java delete mode 100644 food-service/src/main/java/com/zbkj/service/service/impl/DeliverySetFeeServiceImpl.java diff --git a/food-admin/pom.xml b/food-admin/pom.xml index 46e3473..43651a9 100644 --- a/food-admin/pom.xml +++ b/food-admin/pom.xml @@ -3,7 +3,7 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - yzy + prepare_food com.zbkj 0.0.1-SNAPSHOT diff --git a/food-admin/src/main/java/com/zbkj/admin/task/bargain/BargainStopChangeTask.java b/food-admin/src/main/java/com/zbkj/admin/task/bargain/BargainStopChangeTask.java index e04072f..21c1851 100644 --- a/food-admin/src/main/java/com/zbkj/admin/task/bargain/BargainStopChangeTask.java +++ b/food-admin/src/main/java/com/zbkj/admin/task/bargain/BargainStopChangeTask.java @@ -1,40 +1,40 @@ -package com.zbkj.admin.task.bargain; - -import com.zbkj.common.utils.DateUtil; -import com.zbkj.service.service.StoreBargainService; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Configuration; -import org.springframework.scheduling.annotation.EnableScheduling; -import org.springframework.scheduling.annotation.Scheduled; -import org.springframework.stereotype.Component; - -/** - * 砍价活动结束状态变化定时任务 - - */ -@Component -@Configuration //读取配置 -@EnableScheduling // 2.开启定时任务 -public class BargainStopChangeTask { - - //日志 - private static final Logger logger = LoggerFactory.getLogger(BargainStopChangeTask.class); - - @Autowired - private StoreBargainService storeBargainService; - - @Scheduled(cron = "0 0 0 */1 * ?") //5秒钟同步一次数据 - public void init(){ - logger.info("---BargainStopChangeTask------bargain stop status change task: Execution Time - {}", DateUtil.nowDateTime()); - try { - storeBargainService.stopAfterChange(); - }catch (Exception e){ - e.printStackTrace(); - logger.error("BargainStopChangeTask" + " | msg : " + e.getMessage()); - } - - } - -} +//package com.zbkj.admin.task.bargain; +// +//import com.zbkj.common.utils.DateUtil; +//import com.zbkj.service.service.StoreBargainService; +//import org.slf4j.Logger; +//import org.slf4j.LoggerFactory; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.context.annotation.Configuration; +//import org.springframework.scheduling.annotation.EnableScheduling; +//import org.springframework.scheduling.annotation.Scheduled; +//import org.springframework.stereotype.Component; +// +///** +// * 砍价活动结束状态变化定时任务 +// +// */ +//@Component +//@Configuration //读取配置 +//@EnableScheduling // 2.开启定时任务 +//public class BargainStopChangeTask { +// +// //日志 +// private static final Logger logger = LoggerFactory.getLogger(BargainStopChangeTask.class); +// +// @Autowired +// private StoreBargainService storeBargainService; +// +// @Scheduled(cron = "0 0 0 */1 * ?") //5秒钟同步一次数据 +// public void init(){ +// logger.info("---BargainStopChangeTask------bargain stop status change task: Execution Time - {}", DateUtil.nowDateTime()); +// try { +// storeBargainService.stopAfterChange(); +// }catch (Exception e){ +// e.printStackTrace(); +// logger.error("BargainStopChangeTask" + " | msg : " + e.getMessage()); +// } +// +// } +// +//} diff --git a/food-admin/src/main/java/com/zbkj/admin/task/brokerage/BrokerageFrozenTask.java b/food-admin/src/main/java/com/zbkj/admin/task/brokerage/BrokerageFrozenTask.java index 9266e9b..d120a33 100644 --- a/food-admin/src/main/java/com/zbkj/admin/task/brokerage/BrokerageFrozenTask.java +++ b/food-admin/src/main/java/com/zbkj/admin/task/brokerage/BrokerageFrozenTask.java @@ -1,42 +1,42 @@ -package com.zbkj.admin.task.brokerage; - - -import com.zbkj.admin.task.order.OrderReceiptTask; -import com.zbkj.common.utils.DateUtil; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Configuration; -import org.springframework.scheduling.annotation.EnableScheduling; -import org.springframework.scheduling.annotation.Scheduled; -import org.springframework.stereotype.Component; - -/** - * 佣金冻结期解冻task - - */ -@Component -@Configuration //读取配置 -@EnableScheduling // 2.开启定时任务 -public class BrokerageFrozenTask { - - //日志 - private static final Logger logger = LoggerFactory.getLogger(OrderReceiptTask.class); +//package com.zbkj.admin.task.brokerage; // -// @Autowired -// private UserBrokerageRecordService userBrokerageRecordService; // -// // @Scheduled(fixedDelay = 1000 * 60 * 60L) //1小时同步一次数据 -// @Scheduled(fixedDelay = 1000 * 60L) //1分钟同步一次数据 -// public void init(){ -// logger.info("---BrokerageFrozenTask task------produce Data with fixed rate task: Execution Time - {}", DateUtil.nowDateTime()); -// try { -// userBrokerageRecordService.brokerageThaw(); +//import com.zbkj.admin.task.order.OrderReceiptTask; +//import com.zbkj.common.utils.DateUtil; +//import org.slf4j.Logger; +//import org.slf4j.LoggerFactory; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.context.annotation.Configuration; +//import org.springframework.scheduling.annotation.EnableScheduling; +//import org.springframework.scheduling.annotation.Scheduled; +//import org.springframework.stereotype.Component; // -// } catch (Exception e) { -// e.printStackTrace(); -// logger.error("BrokerageFrozenTask.task" + " | msg : " + e.getMessage()); -// } +///** +// * 佣金冻结期解冻task // -// } -} +// */ +//@Component +//@Configuration //读取配置 +//@EnableScheduling // 2.开启定时任务 +//public class BrokerageFrozenTask { +// +// //日志 +// private static final Logger logger = LoggerFactory.getLogger(OrderReceiptTask.class); +//// +//// @Autowired +//// private UserBrokerageRecordService userBrokerageRecordService; +//// +//// // @Scheduled(fixedDelay = 1000 * 60 * 60L) //1小时同步一次数据 +//// @Scheduled(fixedDelay = 1000 * 60L) //1分钟同步一次数据 +//// public void init(){ +//// logger.info("---BrokerageFrozenTask task------produce Data with fixed rate task: Execution Time - {}", DateUtil.nowDateTime()); +//// try { +//// userBrokerageRecordService.brokerageThaw(); +//// +//// } catch (Exception e) { +//// e.printStackTrace(); +//// logger.error("BrokerageFrozenTask.task" + " | msg : " + e.getMessage()); +//// } +//// +//// } +//} diff --git a/food-admin/src/main/java/com/zbkj/admin/task/integral/IntegralFrozenTask.java b/food-admin/src/main/java/com/zbkj/admin/task/integral/IntegralFrozenTask.java index f21662f..09b0a39 100644 --- a/food-admin/src/main/java/com/zbkj/admin/task/integral/IntegralFrozenTask.java +++ b/food-admin/src/main/java/com/zbkj/admin/task/integral/IntegralFrozenTask.java @@ -1,40 +1,40 @@ -package com.zbkj.admin.task.integral; - - -import com.zbkj.common.utils.DateUtil; -import com.zbkj.service.service.UserIntegralRecordService; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Configuration; -import org.springframework.scheduling.annotation.EnableScheduling; -import org.springframework.scheduling.annotation.Scheduled; -import org.springframework.stereotype.Component; - -/** - * 积分冻结期解冻task - - */ -@Component -@Configuration //读取配置 -@EnableScheduling // 2.开启定时任务 -public class IntegralFrozenTask { - - //日志 - private static final Logger logger = LoggerFactory.getLogger(IntegralFrozenTask.class); - - @Autowired - private UserIntegralRecordService userIntegralRecordService; - - @Scheduled(fixedDelay = 1000 * 60L) //1分钟同步一次数据 - public void init() { - logger.info("---IntegralFrozenTask task------produce Data with fixed rate task: Execution Time - {}", DateUtil.nowDateTime()); - try { - userIntegralRecordService.integralThaw(); - } catch (Exception e) { - e.printStackTrace(); - logger.error("IntegralFrozenTask.task" + " | msg : " + e.getMessage()); - } - - } -} +//package com.zbkj.admin.task.integral; +// +// +//import com.zbkj.common.utils.DateUtil; +//import com.zbkj.service.service.UserIntegralRecordService; +//import org.slf4j.Logger; +//import org.slf4j.LoggerFactory; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.context.annotation.Configuration; +//import org.springframework.scheduling.annotation.EnableScheduling; +//import org.springframework.scheduling.annotation.Scheduled; +//import org.springframework.stereotype.Component; +// +///** +// * 积分冻结期解冻task +// +// */ +//@Component +//@Configuration //读取配置 +//@EnableScheduling // 2.开启定时任务 +//public class IntegralFrozenTask { +// +// //日志 +// private static final Logger logger = LoggerFactory.getLogger(IntegralFrozenTask.class); +// +// @Autowired +// private UserIntegralRecordService userIntegralRecordService; +// +// @Scheduled(fixedDelay = 1000 * 60L) //1分钟同步一次数据 +// public void init() { +// logger.info("---IntegralFrozenTask task------produce Data with fixed rate task: Execution Time - {}", DateUtil.nowDateTime()); +// try { +// userIntegralRecordService.integralThaw(); +// } catch (Exception e) { +// e.printStackTrace(); +// logger.error("IntegralFrozenTask.task" + " | msg : " + e.getMessage()); +// } +// +// } +//} diff --git a/food-admin/src/main/java/com/zbkj/admin/task/pink/PinkStatusChangeTask.java b/food-admin/src/main/java/com/zbkj/admin/task/pink/PinkStatusChangeTask.java index 54223a7..fbbeb4c 100644 --- a/food-admin/src/main/java/com/zbkj/admin/task/pink/PinkStatusChangeTask.java +++ b/food-admin/src/main/java/com/zbkj/admin/task/pink/PinkStatusChangeTask.java @@ -1,38 +1,38 @@ -package com.zbkj.admin.task.pink; -import com.zbkj.common.utils.DateUtil; -import com.zbkj.service.service.StorePinkService; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Configuration; -import org.springframework.scheduling.annotation.EnableScheduling; -import org.springframework.scheduling.annotation.Scheduled; -import org.springframework.stereotype.Component; - -/** - * 拼团状态变化Task - - */ -@Component -@Configuration //读取配置 -@EnableScheduling // 2.开启定时任务 -public class PinkStatusChangeTask { - - //日志 - private static final Logger logger = LoggerFactory.getLogger(PinkStatusChangeTask.class); - - @Autowired - private StorePinkService storePinkService; - - @Scheduled(cron = "0 */1 * * * ?") //每分钟执行一次 - public void init(){ - logger.info("---PinkStatusChange------bargain stop status change task: Execution Time - {}", DateUtil.nowDateTime()); - try { - storePinkService.detectionStatus(); - } catch (Exception e) { - e.printStackTrace(); - logger.error("PinkStatusChange" + " | msg : " + e.getMessage()); - } - - } -} +//package com.zbkj.admin.task.pink; +//import com.zbkj.common.utils.DateUtil; +//import com.zbkj.service.service.StorePinkService; +//import org.slf4j.Logger; +//import org.slf4j.LoggerFactory; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.context.annotation.Configuration; +//import org.springframework.scheduling.annotation.EnableScheduling; +//import org.springframework.scheduling.annotation.Scheduled; +//import org.springframework.stereotype.Component; +// +///** +// * 拼团状态变化Task +// +// */ +//@Component +//@Configuration //读取配置 +//@EnableScheduling // 2.开启定时任务 +//public class PinkStatusChangeTask { +// +// //日志 +// private static final Logger logger = LoggerFactory.getLogger(PinkStatusChangeTask.class); +// +// @Autowired +// private StorePinkService storePinkService; +// +// @Scheduled(cron = "0 */1 * * * ?") //每分钟执行一次 +// public void init(){ +// logger.info("---PinkStatusChange------bargain stop status change task: Execution Time - {}", DateUtil.nowDateTime()); +// try { +// storePinkService.detectionStatus(); +// } catch (Exception e) { +// e.printStackTrace(); +// logger.error("PinkStatusChange" + " | msg : " + e.getMessage()); +// } +// +// } +//} diff --git a/food-admin/src/main/java/com/zbkj/admin/task/product/ProductStockTask.java b/food-admin/src/main/java/com/zbkj/admin/task/product/ProductStockTask.java index 63bb3bb..c948384 100644 --- a/food-admin/src/main/java/com/zbkj/admin/task/product/ProductStockTask.java +++ b/food-admin/src/main/java/com/zbkj/admin/task/product/ProductStockTask.java @@ -41,8 +41,8 @@ public class ProductStockTask { try { storeProductService.consumeProductStock(); // 商品本身库存任务 storeSeckillService.consumeProductStock(); // 秒杀本身库存任务 - storeBargainService.consumeProductStock(); // 砍价本身库存任务 - storeCombinationService.consumeProductStock(); // 拼团本身库存任务 + // storeBargainService.consumeProductStock(); // 砍价本身库存任务 + // storeCombinationService.consumeProductStock(); // 拼团本身库存任务 } catch (Exception e) { e.printStackTrace(); logger.error("OrderTakeByUser.task" + " | msg : " + e.getMessage()); diff --git a/food-common/pom.xml b/food-common/pom.xml index eafc19f..e19692b 100644 --- a/food-common/pom.xml +++ b/food-common/pom.xml @@ -3,7 +3,7 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - yzy + prepare_food com.zbkj 0.0.1-SNAPSHOT diff --git a/food-common/src/main/java/com/zbkj/common/constants/Constants.java b/food-common/src/main/java/com/zbkj/common/constants/Constants.java index 0023458..f086a28 100644 --- a/food-common/src/main/java/com/zbkj/common/constants/Constants.java +++ b/food-common/src/main/java/com/zbkj/common/constants/Constants.java @@ -40,6 +40,8 @@ public class Constants { public static final String DATE_FORMAT_START_PEREND = "00:00:00"; public static final String DATE_FORMAT_END_PEREND = "23:59:59"; public static final String DATE_FORMAT_HHMM = "yyyy-MM-dd HH:mm"; + public static final String HH_MM = "HH:mm"; + public static final String HH_MONTH_MM_DAY = "MM月dd日"; //后台管理员操作资金mark public static final String USER_BILL_OPERATE_LOG_TITLE = "{$title}{$operate}了{$value}{$founds}"; @@ -308,12 +310,12 @@ public class Constants { public static final int CATEGORY_TYPE_TREE_ID = 748; // 茶树游戏 //首页Banner图片 - public static final int INDEX_RECOMMEND_BANNER = 1; //首页精品推荐Banner图片 - public static final int INDEX_HOT_BANNER = 2; //热门榜单推荐Banner图片 - public static final int INDEX_NEW_BANNER = 3; //首页首发新品推荐Banner图片 - public static final int INDEX_BENEFIT_BANNER = 4; //首页促销单品推荐Banner图片 + public static final int INDEX_RECOMMEND_BANNER = 1; //是否精品 推荐Banner图片 + public static final int INDEX_HOT_BANNER = 2; //是否热卖 推荐Banner图片 + public static final int INDEX_NEW_BANNER = 3; //是否新品 推荐Banner图片 + public static final int INDEX_BENEFIT_BANNER = 4; //是否优惠 推荐Banner图片 + public static final int INDEX_GOOD_BANNER = 5; //是否优品 推荐Banner图片 public static final int INDEX_LIMIT_DEFAULT = 3; //首页默认list分页条数 - public static final int INDEX_GOOD_BANNER = 5; //优选推荐 public static final String INDEX_BAST_LIMIT = "bastNumber"; //精品推荐个数 public static final String INDEX_FIRST_LIMIT = "firstNumber"; //首发新品个数 @@ -546,4 +548,10 @@ public class Constants { /** 公共JS配置 */ // CRMEB chat 统计 public static final String JS_CONFIG_CRMEB_CHAT_TONGJI="crmeb_tongji_js"; + + /** 正常 */ + public static final Integer STATUS_NORMAL = 1; + /** 失效 */ + public static final Integer STATUS_INVALID = 0; + } diff --git a/food-common/src/main/java/com/zbkj/common/constants/PayConstants.java b/food-common/src/main/java/com/zbkj/common/constants/PayConstants.java index 00b16a4..e5d099d 100644 --- a/food-common/src/main/java/com/zbkj/common/constants/PayConstants.java +++ b/food-common/src/main/java/com/zbkj/common/constants/PayConstants.java @@ -41,7 +41,7 @@ public class PayConstants { public static final String WX_PAY_SIGN_TYPE_MD5 = "MD5"; public static final String WX_PAY_SIGN_TYPE_SHA256 = "HMAC-SHA256"; - public static final String PAY_BODY = "水月雨-订单支付"; + public static final String PAY_BODY = "食材配送-订单支付"; public static final String FIELD_SIGN = "sign"; // 公共号退款 diff --git a/food-common/src/main/java/com/zbkj/common/constants/SysConfigConstants.java b/food-common/src/main/java/com/zbkj/common/constants/SysConfigConstants.java index 3fd9a1d..6e22c7f 100644 --- a/food-common/src/main/java/com/zbkj/common/constants/SysConfigConstants.java +++ b/food-common/src/main/java/com/zbkj/common/constants/SysConfigConstants.java @@ -53,6 +53,10 @@ public class SysConfigConstants { /** 提现冻结时间 */ public static final String CONFIG_EXTRACT_FREEZING_TIME = "extract_time"; + /** 全场满额配送开关 */ + public static final String STORE_FEE_RIDER_SWITCH = "store_free_rider_switch"; + /** 全场满额配送金额 */ + public static final String STORE_FEE_RIDER = "store_free_rider"; /** 全场满额包邮开关 */ public static final String STORE_FEE_POSTAGE_SWITCH = "store_free_postage_switch"; /** 全场满额包邮金额 */ diff --git a/food-common/src/main/java/com/zbkj/common/model/deliveryset/DeliverySetFee.java b/food-common/src/main/java/com/zbkj/common/model/deliveryset/DeliverySetFee.java deleted file mode 100644 index 4a7576c..0000000 --- a/food-common/src/main/java/com/zbkj/common/model/deliveryset/DeliverySetFee.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.zbkj.common.model.deliveryset; - -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; - -import java.io.Serializable; -import java.math.BigDecimal; -import java.util.Date; - -@Data -@TableName("eb_delivery_set_fee") -public class DeliverySetFee implements Serializable { - private static final long serialVersionUID = 1L; - - /** - * 编号 - */ - @TableId - private Integer id; - /** - * 首米 - */ - private BigDecimal first; - /** - * 首米配送费 - */ - private BigDecimal firstPrice; - /** - * 续米 - */ - private BigDecimal renewal; - /** - * 续米配送费 - */ - private BigDecimal renewalPrice; - /** - * 是否无效 - */ - private Integer status; - /** - * 备注 - */ - private String remark; - /** - * 创建时间 - */ - private Date createTime; - /** - * 更新时间 - */ - private Date updateTime; - -} diff --git a/food-common/src/main/java/com/zbkj/common/model/product/StoreProductReply.java b/food-common/src/main/java/com/zbkj/common/model/product/StoreProductReply.java index df9ef57..da9e702 100644 --- a/food-common/src/main/java/com/zbkj/common/model/product/StoreProductReply.java +++ b/food-common/src/main/java/com/zbkj/common/model/product/StoreProductReply.java @@ -84,4 +84,8 @@ public class StoreProductReply implements Serializable { @ApiModelProperty(value = "商品规格属性值") private String sku; + + @ApiModelProperty(value = "商品评论标签id,多个,号隔开") + private String reviewTags; + } diff --git a/food-common/src/main/java/com/zbkj/common/request/CartNumRequest.java b/food-common/src/main/java/com/zbkj/common/request/CartNumRequest.java index c5b9850..469cfc6 100644 --- a/food-common/src/main/java/com/zbkj/common/request/CartNumRequest.java +++ b/food-common/src/main/java/com/zbkj/common/request/CartNumRequest.java @@ -28,8 +28,8 @@ public class CartNumRequest implements Serializable { @NotNull(message = "数量类型不能为空") private String type; - @ApiModelProperty(value = "商品类型:true-有效商品,false-无效商品", required = true) + @ApiModelProperty(value = "商品类型:-1全部,1-有效商品,0-无效商品", required = true) @NotNull(message = "商品类型不能为空") - private Boolean numType; + private Integer numType; } diff --git a/food-common/src/main/java/com/zbkj/common/request/CreateOrderRequest.java b/food-common/src/main/java/com/zbkj/common/request/CreateOrderRequest.java index 2783e49..e33d6c1 100644 --- a/food-common/src/main/java/com/zbkj/common/request/CreateOrderRequest.java +++ b/food-common/src/main/java/com/zbkj/common/request/CreateOrderRequest.java @@ -27,9 +27,9 @@ public class CreateOrderRequest implements Serializable { @NotBlank(message = "预下单订单号不能为空") private String preOrderNo; - @ApiModelProperty(value = "快递类型: 1-快递配送,2-到店自提") + @ApiModelProperty(value = "快递类型: 1-快递配送,2-到店自提,3-骑手配送") @NotNull(message = "快递类型不能为空") - @Range(min = 1, max = 2, message = "未知的快递类型") + @Range(min = 1, max = 3, message = "未知的配送类型") private Integer shippingType; @ApiModelProperty(value = "收货地址id") @@ -47,12 +47,15 @@ public class CreateOrderRequest implements Serializable { private String payChannel; @ApiModelProperty(value = "是否使用积分") - @NotNull(message = "是否使用积分不能为空") + // @NotNull(message = "是否使用积分不能为空") private Boolean useIntegral; @ApiModelProperty(value = "订单备注") private String mark; + @ApiModelProperty(value = "预约送达时间") + private String deliveryTime; + // 以下为到店自提参数 @ApiModelProperty(value = "自提点id") diff --git a/food-common/src/main/java/com/zbkj/common/request/OrderComputedPriceRequest.java b/food-common/src/main/java/com/zbkj/common/request/OrderComputedPriceRequest.java index 1c1573e..1984e35 100644 --- a/food-common/src/main/java/com/zbkj/common/request/OrderComputedPriceRequest.java +++ b/food-common/src/main/java/com/zbkj/common/request/OrderComputedPriceRequest.java @@ -30,7 +30,7 @@ public class OrderComputedPriceRequest { @ApiModelProperty(value = "优惠券id") private Integer couponId; - @ApiModelProperty(value = "快递类型: 1-快递配送,2-到店自提") + @ApiModelProperty(value = "快递类型: 1-快递配送,2-到店自提,3-骑手配送") @NotNull(message = "快递类型不能为空") @Range(min = 1, max = 2, message = "未知的快递类型") private Integer shippingType; diff --git a/food-common/src/main/java/com/zbkj/common/request/PreOrderRequest.java b/food-common/src/main/java/com/zbkj/common/request/PreOrderRequest.java index b81076d..d055c55 100644 --- a/food-common/src/main/java/com/zbkj/common/request/PreOrderRequest.java +++ b/food-common/src/main/java/com/zbkj/common/request/PreOrderRequest.java @@ -19,10 +19,13 @@ import java.util.List; @ApiModel(value="PreOrderRequest对象", description="预下单请求对象") public class PreOrderRequest { - @ApiModelProperty(value = "预下单类型(“shoppingCart”:购物车下单,“buyNow”:立即购买,”again“: 再次购买,”video“: 视频号商品下单,“fruitExchange”:茶果兑换)") + @ApiModelProperty(value = "预下单类型(“shoppingCart”:购物车下单,“buyNow”:立即购买,”again“: 再次购买,”video“: 视频号商品下单)") @NotBlank(message = "预下单类型不能为空") private String preOrderType; + @ApiModelProperty(value = "门店编号") + private Integer merId; + @ApiModelProperty(value = "订单详情列表") private List orderDetails; diff --git a/food-common/src/main/java/com/zbkj/common/request/ShippingTemplatesRequest.java b/food-common/src/main/java/com/zbkj/common/request/ShippingTemplatesRequest.java index 005f82e..a88503d 100644 --- a/food-common/src/main/java/com/zbkj/common/request/ShippingTemplatesRequest.java +++ b/food-common/src/main/java/com/zbkj/common/request/ShippingTemplatesRequest.java @@ -33,9 +33,9 @@ public class ShippingTemplatesRequest implements Serializable { @Length(max = 200, message = "模板名称不能超过200个字符") private String name; - @ApiModelProperty(value = "计费方式 1(按件数), 2(按重量),3(按体积)", example = "1", required = true) + @ApiModelProperty(value = "计费方式 1(按件数), 2(按重量),3(按体积),4(按距离)", example = "1", required = true) @NotNull(message = "计费方式必须选择") - @Range(min = 1, max = 3, message = "计费方式选择区间 1(按件数), 2(按重量),3(按体积)") + @Range(min = 1, max = 4, message = "计费方式选择区间 1(按件数), 2(按重量),3(按体积),4(按距离)") private Integer type; @ApiModelProperty(value = "配送区域及运费", required = true) diff --git a/food-common/src/main/java/com/zbkj/common/request/StoreProductAddRequest.java b/food-common/src/main/java/com/zbkj/common/request/StoreProductAddRequest.java index b5ad47d..e3fce80 100644 --- a/food-common/src/main/java/com/zbkj/common/request/StoreProductAddRequest.java +++ b/food-common/src/main/java/com/zbkj/common/request/StoreProductAddRequest.java @@ -92,7 +92,8 @@ public class StoreProductAddRequest implements Serializable { @ApiModelProperty(value = "虚拟销量") private Integer ficti; - @ApiModelProperty(value = "运费模板ID") + @ApiModelProperty(value = "配送模板ID", required = true) + @NotNull(message = "配送模板不能为空") private Integer tempId; @ApiModelProperty(value = "规格 0单 1多", required = true) diff --git a/food-common/src/main/java/com/zbkj/common/response/CartInfoResponse.java b/food-common/src/main/java/com/zbkj/common/response/CartInfoResponse.java index 05ac5cc..b77e989 100644 --- a/food-common/src/main/java/com/zbkj/common/response/CartInfoResponse.java +++ b/food-common/src/main/java/com/zbkj/common/response/CartInfoResponse.java @@ -8,6 +8,7 @@ import lombok.experimental.Accessors; import java.io.Serializable; import java.math.BigDecimal; +import java.util.List; /** * 购物车详情响应对象 @@ -24,6 +25,9 @@ public class CartInfoResponse implements Serializable { @ApiModelProperty(value = "购物车表ID") private Long id; + @ApiModelProperty(value = "商品包") + private List packCartInfo; + @ApiModelProperty(value = "商品ID") private Integer productId; diff --git a/food-common/src/main/java/com/zbkj/common/response/DeliveryTimeResponse.java b/food-common/src/main/java/com/zbkj/common/response/DeliveryTimeResponse.java new file mode 100644 index 0000000..8c90923 --- /dev/null +++ b/food-common/src/main/java/com/zbkj/common/response/DeliveryTimeResponse.java @@ -0,0 +1,32 @@ +package com.zbkj.common.response; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.math.BigDecimal; +import java.util.List; + +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@ApiModel(value="DeliveryTimeResponse对象", description="配送时间对象") +public class DeliveryTimeResponse { + + @ApiModelProperty(value = "对外展示时使用") + private String key; + + @ApiModelProperty(value = "订单提交时使用") + private String date; + + @ApiModelProperty(value = "订单提交时使用,时间段") + private List times; + + public DeliveryTimeResponse(String key, String date, List times) { + this.key = key; + this.date = date; + this.times = times; + } +} diff --git a/food-common/src/main/java/com/zbkj/common/response/IndexProductResponse.java b/food-common/src/main/java/com/zbkj/common/response/IndexProductResponse.java index 07910ad..5cca56b 100644 --- a/food-common/src/main/java/com/zbkj/common/response/IndexProductResponse.java +++ b/food-common/src/main/java/com/zbkj/common/response/IndexProductResponse.java @@ -1,5 +1,7 @@ package com.zbkj.common.response; +import com.zbkj.common.vo.product.ProductAttrVo; +import com.zbkj.common.vo.product.ProductInfoVo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -8,6 +10,7 @@ import lombok.experimental.Accessors; import java.math.BigDecimal; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; /** @@ -65,4 +68,14 @@ public class IndexProductResponse { @ApiModelProperty(value = "标签") private String tags; + + @ApiModelProperty(value = "规格 0单 1多") + private Boolean specType; + + @ApiModelProperty(value = "产品属性") + private List productAttr; + + @ApiModelProperty(value = "商品属性详情") + private HashMap productValue; + } diff --git a/food-common/src/main/java/com/zbkj/common/response/StoreProductReplayCountResponse.java b/food-common/src/main/java/com/zbkj/common/response/StoreProductReplayCountResponse.java index ca62d86..9007ce0 100644 --- a/food-common/src/main/java/com/zbkj/common/response/StoreProductReplayCountResponse.java +++ b/food-common/src/main/java/com/zbkj/common/response/StoreProductReplayCountResponse.java @@ -1,5 +1,6 @@ package com.zbkj.common.response; +import com.zbkj.common.vo.ReplyReviewTagsVo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -7,6 +8,7 @@ import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import java.io.Serializable; +import java.util.List; /** * 商品评价数量和好评度 @@ -21,13 +23,14 @@ public class StoreProductReplayCountResponse implements Serializable { private static final long serialVersionUID=1L; public StoreProductReplayCountResponse() {} - public StoreProductReplayCountResponse(Long sumCount, Long goodCount, Long inCount, Long poorCount, String replyChance, Integer replyStar) { + public StoreProductReplayCountResponse(Long sumCount, Long goodCount, Long inCount, Long poorCount, String replyChance, Integer replyStar, List reviewTags) { this.sumCount = sumCount; this.goodCount = goodCount; this.inCount = inCount; this.poorCount = poorCount; this.replyChance = replyChance; this.replyStar = replyStar; + this.reviewTags = reviewTags; } @ApiModelProperty(value = "评论总数") @@ -48,5 +51,7 @@ public class StoreProductReplayCountResponse implements Serializable { @ApiModelProperty(value = "评分星数") private Integer replyStar; + @ApiModelProperty(value = "评论标签") + private List reviewTags; } diff --git a/food-common/src/main/java/com/zbkj/common/utils/DeliveryUtil.java b/food-common/src/main/java/com/zbkj/common/utils/DeliveryUtil.java new file mode 100644 index 0000000..214c6bf --- /dev/null +++ b/food-common/src/main/java/com/zbkj/common/utils/DeliveryUtil.java @@ -0,0 +1,142 @@ +package com.zbkj.common.utils; + +import com.zbkj.common.constants.Constants; +import com.zbkj.common.response.DeliveryTimeResponse; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.format.DateTimeFormatter; +import java.time.temporal.ChronoUnit; +import java.util.ArrayList; +import java.util.List; + +public class DeliveryUtil { + + /** + * 判断时间时上午还是下午 + * @param dateTime + * @return + */ + public static Integer isAmOrPm(LocalDateTime dateTime) { + // 定义上午和下午的分界时间(中午12点) + LocalTime noon = LocalTime.of(12, 0); + // 判断是上午还是下午 + // 上午 + if (dateTime.toLocalTime().isBefore(noon)) { + return 0; + } else { // 下午 + return 1; + } + } + + /** + * 判断时间是否是今天 + * @param dateTime + * @return + */ + public static Integer isNowDay(LocalDateTime dateTime) { + // 获取当前日期和时间 + LocalDateTime now = LocalDateTime.now(); + // 判断是否是今天 + // 不是今天 + if (!dateTime.toLocalDate().equals(now.toLocalDate())) { + return 0; + } + // 是今天 + return 1; + } + + /** + * 获取多天内指定上午和下午时间区间的每小时时间段 + * + * @param startDate 起始日期 + * @param numberOfDays 天数 + * @param morningStart 上午开始时间 + * @param morningEnd 上午结束时间 + * @param afternoonStart 下午开始时间 + * @param afternoonEnd 下午结束时间 + * @return 每小时时间段的列表 + */ + public static List getHourlyTimeIntervals( + LocalDate startDate, int numberOfDays, int splitMin, + LocalTime morningStart, LocalTime morningEnd, + LocalTime afternoonStart, LocalTime afternoonEnd) { + List responseList = new ArrayList<>(); + LocalDateTime now = LocalDateTime.now(); + DateTimeFormatter hmFor = DateTimeFormatter.ofPattern(Constants.HH_MM); + DateTimeFormatter mdFor = DateTimeFormatter.ofPattern(Constants.HH_MONTH_MM_DAY); + DateTimeFormatter ymdFor = DateTimeFormatter.ofPattern(Constants.DATE_FORMAT_DATE); + // 遍历每一天 + for (int i = 0; i < numberOfDays; i++) { + LocalDate currentDate = startDate.plusDays(i); + Integer isNowDay = isNowDay(LocalDateTime.of(currentDate, LocalTime.now())); + List intervals = new ArrayList<>(); + // 处理上午时间段 + if (isNowDay == 0) { + intervals.addAll(getHourlyIntervalsForPeriod(currentDate, morningStart, morningEnd, hmFor, splitMin)); + } + // 处理下午时间段 + if (isNowDay == 0 || (isNowDay == 1 && isAmOrPm(now) == 0)) { + intervals.addAll(getHourlyIntervalsForPeriod(currentDate, afternoonStart, afternoonEnd, hmFor, splitMin)); + } + if (!intervals.isEmpty()) { + responseList.add(new DeliveryTimeResponse(getTargetDate(currentDate, mdFor), currentDate.format(ymdFor), intervals)); + } + } + return responseList; + } + + private static String getTargetDate(LocalDate targetDate, DateTimeFormatter md) { + LocalDate today = LocalDate.now(); + long daysUntil = ChronoUnit.DAYS.between(today, targetDate); + // 判断日期 + if (targetDate.isEqual(today)) { + return "今天 " + md; + } else if (targetDate.isAfter(today)) { + switch ((int) daysUntil) { + case 1: + return "明天 " + md; + case 2: + return "后天 " + md; + default: + return "其他 " + md; + } + } + return ""; + } + + /** + * 获取某一天的指定时间区间的每小时时间段 + * + * @param date 当前日期 + * @param startTime 开始时间 + * @param endTime 结束时间 + * @param formatter 日期时间格式化器 + * @return 每小时时间段的列表 + */ + private static List getHourlyIntervalsForPeriod(LocalDate date, LocalTime startTime, LocalTime endTime, DateTimeFormatter formatter, Integer splitMin) { + List intervals = new ArrayList<>(); + LocalTime currentTime = startTime; + // 遍历每小时 + while (currentTime.isBefore(endTime) || currentTime.equals(endTime)) { + LocalDateTime startDateTime = LocalDateTime.of(date, currentTime); + LocalDateTime endDateTime = startDateTime.plusMinutes(splitMin); + // 如果结束时间超过当前时间段的结束时间,则调整为结束时间 + if (endDateTime.toLocalTime().isAfter(endTime)) { + endDateTime = LocalDateTime.of(date, endTime); + } + String start = startDateTime.format(formatter); + String end = endDateTime.format(formatter); + intervals.add(start + "-" + end); + + if (end.equals(endTime.toString())) { + break; + } + // 增加分钟数 + currentTime = currentTime.plusMinutes(splitMin); + } + return intervals; + } + +} diff --git a/food-common/src/main/java/com/zbkj/common/utils/DistanceUtil.java b/food-common/src/main/java/com/zbkj/common/utils/DistanceUtil.java new file mode 100644 index 0000000..1faf3b5 --- /dev/null +++ b/food-common/src/main/java/com/zbkj/common/utils/DistanceUtil.java @@ -0,0 +1,32 @@ +package com.zbkj.common.utils; + +public class DistanceUtil { + + // 将角度转换为弧度 + private static double toRadians(double angle) { + return angle * Math.PI / 180.0; + } + + // 计算两个经纬度点之间的距离(单位:公里) + public static double haversineDistance(double lat1, double lon1, double lat2, double lon2) { + double R = 6371.0; // 地球半径,单位:公里 + double dLat = toRadians(lat2 - lat1); + double dLon = toRadians(lon2 - lon1); + lat1 = toRadians(lat1); + lat2 = toRadians(lat2); + + double a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + + Math.sin(dLon / 2) * Math.sin(dLon / 2) * Math.cos(lat1) * Math.cos(lat2); + double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); + return R * c; // 返回结果单位为公里 + } + + public static void main(String[] args) { + double lat1 = 40.7128; // 纬度1 + double lon1 = -74.0060; // 经度1 + double lat2 = 34.0522; // 纬度2 + double lon2 = -118.2437; // 经度2 + double distance = haversineDistance(lat1, lon1, lat2, lon2); + System.out.printf("距离: %.2f 公里\n", distance); + } +} diff --git a/food-common/src/main/java/com/zbkj/common/vo/OrderInfoVo.java b/food-common/src/main/java/com/zbkj/common/vo/OrderInfoVo.java index f85fab0..f5ec0d3 100644 --- a/food-common/src/main/java/com/zbkj/common/vo/OrderInfoVo.java +++ b/food-common/src/main/java/com/zbkj/common/vo/OrderInfoVo.java @@ -93,4 +93,7 @@ public class OrderInfoVo { @ApiModelProperty(value = "是否视频号订单") private Boolean isVideo = false; + + @ApiModelProperty(value = "门店编号") + private Integer merId; } diff --git a/food-common/src/main/java/com/zbkj/common/vo/ReplyReviewTagsVo.java b/food-common/src/main/java/com/zbkj/common/vo/ReplyReviewTagsVo.java new file mode 100644 index 0000000..5eea9c2 --- /dev/null +++ b/food-common/src/main/java/com/zbkj/common/vo/ReplyReviewTagsVo.java @@ -0,0 +1,21 @@ +package com.zbkj.common.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@ApiModel(value="ReplyReviewTagsVo对象", description="评论标签对象") +public class ReplyReviewTagsVo { + + @ApiModelProperty(value = "名称") + private String tag; + + @ApiModelProperty(value = "数量") + private Integer num; + +} diff --git a/food-front/pom.xml b/food-front/pom.xml index e1791c1..57a3a0a 100644 --- a/food-front/pom.xml +++ b/food-front/pom.xml @@ -3,7 +3,7 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - yzy + prepare_food com.zbkj 0.0.1-SNAPSHOT diff --git a/food-front/src/main/java/com/zbkj/front/controller/CartController.java b/food-front/src/main/java/com/zbkj/front/controller/CartController.java index 85df2eb..5d8109e 100644 --- a/food-front/src/main/java/com/zbkj/front/controller/CartController.java +++ b/food-front/src/main/java/com/zbkj/front/controller/CartController.java @@ -42,7 +42,7 @@ public class CartController { @ApiOperation(value = "分页列表") //配合swagger使用 @RequestMapping(value = "/list", method = RequestMethod.GET) @ApiImplicitParams({ - @ApiImplicitParam(name="isValid", value="类型,true-有效商品,false-无效商品", required = true), + @ApiImplicitParam(name="isValid", value="类型:1-有效商品,0-无效商品", required = true), @ApiImplicitParam(name="page", value="页码", required = true), @ApiImplicitParam(name="limit", value="每页数量", required = true) }) @@ -68,6 +68,8 @@ public class CartController { } } + + /** * 删除购物车表 * @param ids 购物车ids diff --git a/food-front/src/main/java/com/zbkj/front/controller/CouponController.java b/food-front/src/main/java/com/zbkj/front/controller/CouponController.java index cd2657e..dbb3124 100644 --- a/food-front/src/main/java/com/zbkj/front/controller/CouponController.java +++ b/food-front/src/main/java/com/zbkj/front/controller/CouponController.java @@ -34,7 +34,6 @@ public class CouponController { @Autowired private StoreCouponUserService storeCouponUserService; - /** * 分页显示优惠券表 * @param type 类型,1-通用,2-商品,3-品类 @@ -49,8 +48,10 @@ public class CouponController { @ApiImplicitParam(name="page", value="页码", required = true), @ApiImplicitParam(name="limit", value="每页数量", required = true) }) - public CommonResult> getList(@RequestParam(value = "type", defaultValue = "0") int type, - @RequestParam(value = "productId", defaultValue = "0") int productId, @Validated PageParamRequest pageParamRequest) { + public CommonResult> getList( + @RequestParam(value = "type", defaultValue = "0") int type, + @RequestParam(value = "productId", defaultValue = "0") int productId, + @Validated PageParamRequest pageParamRequest) { return CommonResult.success(storeCouponService.getH5List(type, productId, pageParamRequest)); } diff --git a/food-front/src/main/java/com/zbkj/front/controller/DeliveryTimeController.java b/food-front/src/main/java/com/zbkj/front/controller/DeliveryTimeController.java new file mode 100644 index 0000000..61d18b2 --- /dev/null +++ b/food-front/src/main/java/com/zbkj/front/controller/DeliveryTimeController.java @@ -0,0 +1,32 @@ +package com.zbkj.front.controller; + +import com.zbkj.common.response.CommonResult; +import com.zbkj.common.response.DeliveryTimeResponse; +import com.zbkj.service.service.DeliverySetTimeService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@Slf4j +@RestController +@RequestMapping("api/front/delivery") +@Api(tags = "配送时间") +public class DeliveryTimeController { + + @Autowired + private DeliverySetTimeService deliverySetTimeService; + + @ApiOperation(value = "配送时间") + @RequestMapping(value = "/times", method = RequestMethod.GET) + public CommonResult> getList() { + List res = deliverySetTimeService.getDeliveryTime(); + return CommonResult.success(res); + } +} + + + diff --git a/food-front/src/main/java/com/zbkj/front/controller/IndexController.java b/food-front/src/main/java/com/zbkj/front/controller/IndexController.java index a940531..e0ab5f0 100644 --- a/food-front/src/main/java/com/zbkj/front/controller/IndexController.java +++ b/food-front/src/main/java/com/zbkj/front/controller/IndexController.java @@ -1,26 +1,19 @@ package com.zbkj.front.controller; -import com.zbkj.common.page.CommonPage; import com.zbkj.common.response.CommonResult; -import com.zbkj.common.request.PageParamRequest; -import com.zbkj.common.model.system.SystemConfig; import com.zbkj.common.response.IndexInfoResponse; -import com.zbkj.common.response.IndexProductResponse; import com.zbkj.front.service.IndexService; import io.swagger.annotations.Api; -import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import java.util.HashMap; import java.util.List; -import java.util.Map; /** * 用户 -- 用户中心 @@ -44,16 +37,6 @@ public class IndexController { return CommonResult.success(indexService.getIndexInfo()); } - /** - * 首页商品列表 - */ - @ApiOperation(value = "首页商品列表") - @RequestMapping(value = "/index/product/{type}", method = RequestMethod.GET) - @ApiImplicitParam(name = "type", value = "类型 【1精品推荐】", dataType = "int", required = true) - public CommonResult> getProductList(@PathVariable(value = "type") Integer type, PageParamRequest pageParamRequest) { - return CommonResult.success(indexService.findIndexProductList(type, pageParamRequest)); - } - /** * 热门搜索 */ diff --git a/food-front/src/main/java/com/zbkj/front/controller/ProductController.java b/food-front/src/main/java/com/zbkj/front/controller/ProductController.java index a685ab8..e76d651 100644 --- a/food-front/src/main/java/com/zbkj/front/controller/ProductController.java +++ b/food-front/src/main/java/com/zbkj/front/controller/ProductController.java @@ -1,7 +1,6 @@ package com.zbkj.front.controller; -import com.zbkj.common.model.product.StoreProduct; import com.zbkj.common.page.CommonPage; import com.zbkj.common.request.PageParamRequest; import com.zbkj.common.request.ProductListRequest; @@ -11,6 +10,7 @@ import com.zbkj.common.vo.CategoryTreeVo; import com.zbkj.front.service.ProductService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -33,12 +33,14 @@ public class ProductController { private ProductService productService; /** - * 热门商品推荐 + * 1.购物车/我的为你推荐(是否热卖) + * 2.首页精品商品推荐(是否精品) */ - @ApiOperation(value = "热门商品推荐") - @RequestMapping(value = "/product/hot", method = RequestMethod.GET) - public CommonResult> getHotProductList(@Validated PageParamRequest pageParamRequest) { - return CommonResult.success(productService.getHotProductList(pageParamRequest)); + @ApiOperation(value = "首页商品列表") + @RequestMapping(value = "/product/{type}", method = RequestMethod.GET) + @ApiImplicitParam(name = "type", value = "类型【1首页精品推荐, 2为你推荐】", dataType = "int", required = true) + public CommonResult> getProductList(@PathVariable(value = "type") Integer type, PageParamRequest pageParamRequest) { + return CommonResult.success(productService.getProductListByType(type, pageParamRequest)); } /** @@ -83,10 +85,15 @@ public class ProductController { */ @ApiOperation(value = "商品评论列表") @RequestMapping(value = "/reply/list/{id}", method = RequestMethod.GET) - @ApiImplicitParam(name = "type", value = "评价等级|0=全部,1=好评,2=中评,3=差评", allowableValues = "range[0,1,2,3]") + @ApiImplicitParams({ + @ApiImplicitParam(name = "type", value = "评价等级|0=全部,1=好评,2=中评,3=差评", allowableValues = "range[0,1,2,3]"), + @ApiImplicitParam(name = "tag", value = "评价标签") + }) public CommonResult> getReplyList(@PathVariable Integer id, - @RequestParam(value = "type") Integer type, @Validated PageParamRequest pageParamRequest) { - return CommonResult.success(CommonPage.restPage(productService.getReplyList(id, type, pageParamRequest))); + @RequestParam(value = "type") Integer type, + @RequestParam(value = "tag") String tag, + @Validated PageParamRequest pageParamRequest) { + return CommonResult.success(CommonPage.restPage(productService.getReplyList(id, type, tag, pageParamRequest))); } /** @@ -125,14 +132,14 @@ public class ProductController { return CommonResult.success(productService.getSkuDetail(id)); } - /** - * 商品排行榜 - */ - @ApiOperation(value = "商品排行榜") - @RequestMapping(value = "/product/leaderboard", method = RequestMethod.GET) - public CommonResult> getLeaderboard() { - return CommonResult.success(productService.getLeaderboard()); - } +// /** +// * 商品排行榜 +// */ +// @ApiOperation(value = "商品排行榜") +// @RequestMapping(value = "/product/leaderboard", method = RequestMethod.GET) +// public CommonResult> getLeaderboard() { +// return CommonResult.success(productService.getLeaderboard()); +// } } diff --git a/food-front/src/main/java/com/zbkj/front/controller/QrCodeController.java b/food-front/src/main/java/com/zbkj/front/controller/QrCodeController.java index d526057..1c3a13b 100644 --- a/food-front/src/main/java/com/zbkj/front/controller/QrCodeController.java +++ b/food-front/src/main/java/com/zbkj/front/controller/QrCodeController.java @@ -27,6 +27,7 @@ public class QrCodeController { @Autowired private QrCodeService qrCodeService; + /** * 获取二维码 * @return CommonResult diff --git a/food-front/src/main/java/com/zbkj/front/controller/StoreOrderController.java b/food-front/src/main/java/com/zbkj/front/controller/StoreOrderController.java index 229fdd7..4e3fb65 100644 --- a/food-front/src/main/java/com/zbkj/front/controller/StoreOrderController.java +++ b/food-front/src/main/java/com/zbkj/front/controller/StoreOrderController.java @@ -102,10 +102,9 @@ public class StoreOrderController { @ApiOperation(value = "订单列表") @RequestMapping(value = "/list", method = RequestMethod.GET) @ApiImplicitParams ({ - @ApiImplicitParam(name = "type", value = "评价等级|0=未支付,1=待发货,2=待收货,3=待评价,4=已完成,-3=售后/退款", required = true), + @ApiImplicitParam(name = "type", value = "评价等级|null=全部,0=未支付,1=待发货/备货中,2=待收货,3=待评价,4=已完成,-3=售后/退款", required = false), }) - public CommonResult> orderList(@RequestParam(name = "type") Integer type, - @ModelAttribute PageParamRequest pageRequest) { + public CommonResult> orderList(@RequestParam(name = "type") Integer type, @ModelAttribute PageParamRequest pageRequest) { return CommonResult.success(orderService.list(type, pageRequest)); } diff --git a/food-front/src/main/java/com/zbkj/front/service/IndexService.java b/food-front/src/main/java/com/zbkj/front/service/IndexService.java index 6b2dfb1..22d6b00 100644 --- a/food-front/src/main/java/com/zbkj/front/service/IndexService.java +++ b/food-front/src/main/java/com/zbkj/front/service/IndexService.java @@ -33,14 +33,6 @@ public interface IndexService{ */ HashMap getShareConfig(); - /** - * 获取首页商品列表 - * @param type 类型 【1 精品推荐 2 热门榜单 3首发新品 4促销单品】 - * @param pageParamRequest 分页参数 - * @return List - */ - CommonPage findIndexProductList(Integer type, PageParamRequest pageParamRequest); - /** * 获取颜色配置 * @return SystemConfig diff --git a/food-front/src/main/java/com/zbkj/front/service/ProductService.java b/food-front/src/main/java/com/zbkj/front/service/ProductService.java index 595e556..83bb807 100644 --- a/food-front/src/main/java/com/zbkj/front/service/ProductService.java +++ b/food-front/src/main/java/com/zbkj/front/service/ProductService.java @@ -50,10 +50,11 @@ public interface ProductService { * 商品评论列表 * @param proId 商品编号 * @param type 评价等级|0=全部,1=好评,2=中评,3=差评 + * @param tag 评价标签名称 * @param pageParamRequest 分页参数 * @return PageInfo */ - PageInfo getReplyList(Integer proId, Integer type, PageParamRequest pageParamRequest); + PageInfo getReplyList(Integer proId, Integer type, String tag, PageParamRequest pageParamRequest); /** * 商品评论数量 @@ -62,13 +63,6 @@ public interface ProductService { */ StoreProductReplayCountResponse getReplyCount(Integer id); - /** - * 获取热门推荐商品列表 - * @param pageRequest 分页参数 - * @return CommonPage - */ - CommonPage getHotProductList(PageParamRequest pageRequest); - /** * 商品详情评论 * @param id 商品id @@ -76,12 +70,6 @@ public interface ProductService { */ ProductDetailReplyResponse getProductReply(Integer id); - /** - * 优选商品推荐 - * @return CommonPage - */ - CommonPage getGoodProductList(PageParamRequest pageRequest); - /** * 商品列表(个别分类模型使用) * @param request 列表请求参数 @@ -96,17 +84,17 @@ public interface ProductService { */ List getLeaderboard(); - /** - * 促销单品(非遗抹茶) - * @param pageParamRequest - * @return - */ - CommonPage getSalesProductList(PageParamRequest pageParamRequest); - /** * 产品一级分类 * @return */ List getCategoryTop(); + /** + * 根据类型查询商品 + * @param type + * @param pageParamRequest + * @return + */ + CommonPage getProductListByType(Integer type, PageParamRequest pageParamRequest); } diff --git a/food-front/src/main/java/com/zbkj/front/service/impl/IndexServiceImpl.java b/food-front/src/main/java/com/zbkj/front/service/impl/IndexServiceImpl.java index 7e790ac..3a54777 100644 --- a/food-front/src/main/java/com/zbkj/front/service/impl/IndexServiceImpl.java +++ b/food-front/src/main/java/com/zbkj/front/service/impl/IndexServiceImpl.java @@ -103,72 +103,6 @@ public class IndexServiceImpl implements IndexService { return map; } - /** - * 获取首页商品列表 - * @param type 类型 【1 精品推荐 2 热门榜单 3首发新品 4促销单品】 - * @param pageParamRequest 分页参数 - * @return List - */ - @Override - public CommonPage findIndexProductList(Integer type, PageParamRequest pageParamRequest) { - if (type < Constants.INDEX_RECOMMEND_BANNER || type > Constants.INDEX_BENEFIT_BANNER) { - return CommonPage.restPage(new ArrayList<>()); - } - List storeProductList = storeProductService.getIndexProduct(type, pageParamRequest); - if(CollUtil.isEmpty(storeProductList)) { - return CommonPage.restPage(new ArrayList<>()); - } - CommonPage storeProductCommonPage = CommonPage.restPage(storeProductList); - - List productResponseArrayList = new ArrayList<>(); - for (StoreProduct storeProduct : storeProductList) { - IndexProductResponse productResponse = new IndexProductResponse(); - List activityList = CrmebUtil.stringToArrayInt(storeProduct.getActivity()); - // 活动类型默认:直接跳过 - if (activityList.get(0).equals(Constants.PRODUCT_TYPE_NORMAL)) { - BeanUtils.copyProperties(storeProduct, productResponse); - productResponseArrayList.add(productResponse); - continue; - } - // 根据参与活动添加对应商品活动标示 - HashMap activityByProduct = - productUtils.getActivityByProduct(storeProduct.getId(), storeProduct.getActivity()); - if (CollUtil.isNotEmpty(activityByProduct)) { - for (Integer activity : activityList) { - if (activity.equals(Constants.PRODUCT_TYPE_NORMAL)) { - break; - } - if (activity.equals(Constants.PRODUCT_TYPE_SECKILL)) { - ProductActivityItemResponse itemResponse = activityByProduct.get(Constants.PRODUCT_TYPE_SECKILL); - if (ObjectUtil.isNotNull(itemResponse)) { - productResponse.setActivityH5(itemResponse); - break; - } - } - if (activity.equals(Constants.PRODUCT_TYPE_BARGAIN)) { - ProductActivityItemResponse itemResponse = activityByProduct.get(Constants.PRODUCT_TYPE_BARGAIN); - if (ObjectUtil.isNotNull(itemResponse)) { - productResponse.setActivityH5(itemResponse); - break; - } - } - if (activity.equals(Constants.PRODUCT_TYPE_PINGTUAN)) { - ProductActivityItemResponse itemResponse = activityByProduct.get(Constants.PRODUCT_TYPE_PINGTUAN); - if (ObjectUtil.isNotNull(itemResponse)) { - productResponse.setActivityH5(itemResponse); - break; - } - } - } - } - BeanUtils.copyProperties(storeProduct, productResponse); - productResponseArrayList.add(productResponse); - } - CommonPage productResponseCommonPage = CommonPage.restPage(productResponseArrayList); - BeanUtils.copyProperties(storeProductCommonPage, productResponseCommonPage, "list"); - return productResponseCommonPage; - } - /** * 获取颜色配置 * @return SystemConfig diff --git a/food-front/src/main/java/com/zbkj/front/service/impl/ProductServiceImpl.java b/food-front/src/main/java/com/zbkj/front/service/impl/ProductServiceImpl.java index 41b4c8c..347dc1c 100644 --- a/food-front/src/main/java/com/zbkj/front/service/impl/ProductServiceImpl.java +++ b/food-front/src/main/java/com/zbkj/front/service/impl/ProductServiceImpl.java @@ -27,7 +27,10 @@ import com.zbkj.common.response.*; import com.zbkj.common.utils.CrmebUtil; import com.zbkj.common.utils.RedisUtil; import com.zbkj.common.vo.CategoryTreeVo; +import com.zbkj.common.vo.HomeProductVo; import com.zbkj.common.vo.MyRecord; +import com.zbkj.common.vo.ReplyReviewTagsVo; +import com.zbkj.common.vo.product.ProductDetailVo; import com.zbkj.front.service.ProductService; import com.zbkj.service.delete.ProductUtils; import com.zbkj.service.service.*; @@ -38,6 +41,7 @@ import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.*; +import java.util.stream.Collectors; /** * IndexServiceImpl 接口实现 @@ -114,67 +118,6 @@ public class ProductServiceImpl implements ProductService { return listTree; } - /** - * 商品列表 - * @return CommonPage - */ - @Override - public CommonPage getList(ProductRequest request, PageParamRequest pageRequest) { - List storeProductList = storeProductService.findH5List(request, pageRequest); - if (CollUtil.isEmpty(storeProductList)) { - return CommonPage.restPage(new ArrayList<>()); - } - CommonPage storeProductCommonPage = CommonPage.restPage(storeProductList); - - List productResponseArrayList = new ArrayList<>(); - for (StoreProduct storeProduct : storeProductList) { - IndexProductResponse productResponse = new IndexProductResponse(); - List activityList = CrmebUtil.stringToArrayInt(storeProduct.getActivity()); - // 活动类型默认:直接跳过 - if (activityList.get(0).equals(Constants.PRODUCT_TYPE_NORMAL)) { - BeanUtils.copyProperties(storeProduct, productResponse); - productResponseArrayList.add(productResponse); - continue; - } - // 根据参与活动添加对应商品活动标示 - HashMap activityByProduct = - productUtils.getActivityByProduct(storeProduct.getId(), storeProduct.getActivity()); - if (CollUtil.isNotEmpty(activityByProduct)) { - for (Integer activity : activityList) { - if (activity.equals(Constants.PRODUCT_TYPE_NORMAL)) { - break; - } - if (activity.equals(Constants.PRODUCT_TYPE_SECKILL)) { - ProductActivityItemResponse itemResponse = activityByProduct.get(Constants.PRODUCT_TYPE_SECKILL); - if (ObjectUtil.isNotNull(itemResponse)) { - productResponse.setActivityH5(itemResponse); - break; - } - } - if (activity.equals(Constants.PRODUCT_TYPE_BARGAIN)) { - ProductActivityItemResponse itemResponse = activityByProduct.get(Constants.PRODUCT_TYPE_BARGAIN); - if (ObjectUtil.isNotNull(itemResponse)) { - productResponse.setActivityH5(itemResponse); - break; - } - } - if (activity.equals(Constants.PRODUCT_TYPE_PINGTUAN)) { - ProductActivityItemResponse itemResponse = activityByProduct.get(Constants.PRODUCT_TYPE_PINGTUAN); - if (ObjectUtil.isNotNull(itemResponse)) { - productResponse.setActivityH5(itemResponse); - break; - } - } - } - } - BeanUtils.copyProperties(storeProduct, productResponse); - productResponseArrayList.add(productResponse); - } - CommonPage productResponseCommonPage = CommonPage.restPage(productResponseArrayList); - BeanUtils.copyProperties(storeProductCommonPage, productResponseCommonPage, "list"); - return productResponseCommonPage; - } - /** * 获取商品详情 * @param id 商品编号 @@ -305,8 +248,8 @@ public class ProductServiceImpl implements ProductService { * @return PageInfo */ @Override - public PageInfo getReplyList(Integer proId, Integer type, PageParamRequest pageParamRequest) { - return storeProductReplyService.getH5List(proId, type, pageParamRequest); + public PageInfo getReplyList(Integer proId, Integer type, String tag, PageParamRequest pageParamRequest) { + return storeProductReplyService.getH5List(proId, type, tag, pageParamRequest); } /** @@ -322,7 +265,8 @@ public class ProductServiceImpl implements ProductService { Long poorCount = myRecord.getLong("poorCount"); String replyChance = myRecord.getStr("replyChance"); Integer replyStar = myRecord.getInt("replyStar"); - return new StoreProductReplayCountResponse(sumCount, goodCount, inCount, poorCount, replyChance, replyStar); + List tags = myRecord.get("tags"); + return new StoreProductReplayCountResponse(sumCount, goodCount, inCount, poorCount, replyChance, replyStar, tags); } /** @@ -365,35 +309,55 @@ public class ProductServiceImpl implements ProductService { } /** - * 获取热门推荐商品列表 + * 更具类型查询商品 * @param pageRequest 分页参数 * @return CommonPage */ @Override - public CommonPage getHotProductList(PageParamRequest pageRequest) { - List storeProductList = storeProductService.getIndexProduct(Constants.INDEX_HOT_BANNER, pageRequest); + public CommonPage getProductListByType(Integer type, PageParamRequest pageRequest) { + if (type < Constants.INDEX_RECOMMEND_BANNER || type > Constants.INDEX_GOOD_BANNER) { + return CommonPage.restPage(new ArrayList<>()); + } + List storeProductList = storeProductService.getIndexProduct(type, pageRequest); if (CollUtil.isEmpty(storeProductList)) { return CommonPage.restPage(new ArrayList<>()); } - CommonPage storeProductCommonPage = CommonPage.restPage(storeProductList); + return resultIndexProductResponse(storeProductList); + } + /** + * 商品列表 + * @return CommonPage + */ + @Override + public CommonPage getList(ProductRequest request, PageParamRequest pageRequest) { + List storeProductList = storeProductService.findH5List(request, pageRequest); + if (CollUtil.isEmpty(storeProductList)) { + return CommonPage.restPage(new ArrayList<>()); + } + return resultIndexProductResponse(storeProductList); + } + + private CommonPage resultIndexProductResponse(List storeProductList) { + CommonPage storeProductCommonPage = CommonPage.restPage(storeProductList); + Map skuDetails = storeProductService.getSkuDetails(storeProductList.stream().map(StoreProduct::getId).collect(Collectors.toList())); List productResponseArrayList = new ArrayList<>(); for (StoreProduct storeProduct : storeProductList) { - - IndexProductResponse productResponse = new IndexProductResponse(); - productResponse.setTags(storeProduct.getTags()); + BeanUtils.copyProperties(storeProduct, productResponse); + + ProductDetailVo skuDetail = skuDetails.get(storeProduct.getId()); + productResponse.setProductValue(skuDetail.getProductValue()); + productResponse.setProductAttr(skuDetail.getProductAttr()); List activityList = CrmebUtil.stringToArrayInt(storeProduct.getActivity()); // 活动类型默认:直接跳过 if (activityList.get(0).equals(Constants.PRODUCT_TYPE_NORMAL)) { - BeanUtils.copyProperties(storeProduct, productResponse); productResponseArrayList.add(productResponse); continue; } // 根据参与活动添加对应商品活动标示 - HashMap activityByProduct = - productUtils.getActivityByProduct(storeProduct.getId(), storeProduct.getActivity()); + HashMap activityByProduct = productUtils.getActivityByProduct(storeProduct.getId(), storeProduct.getActivity()); if (CollUtil.isNotEmpty(activityByProduct)) { for (Integer activity : activityList) { if (activity.equals(Constants.PRODUCT_TYPE_NORMAL)) { @@ -422,7 +386,6 @@ public class ProductServiceImpl implements ProductService { } } } - BeanUtils.copyProperties(storeProduct, productResponse); productResponseArrayList.add(productResponse); } CommonPage productResponseCommonPage = CommonPage.restPage(productResponseArrayList); @@ -443,71 +406,6 @@ public class ProductServiceImpl implements ProductService { return storeProductReplyService.getH5ProductReply(id); } - /** - * 优选商品推荐 - * @return CommonPage - */ - @Override - public CommonPage getGoodProductList(PageParamRequest pageRequest) { - //获取商品列表 - List storeProductList = storeProductService.getIndexProduct(Constants.INDEX_RECOMMEND_BANNER, pageRequest); - //为空返回 - if (CollUtil.isEmpty(storeProductList)) { - return CommonPage.restPage(new ArrayList<>()); - } - //分页 - CommonPage storeProductCommonPage = CommonPage.restPage(storeProductList); - List productResponseArrayList = new ArrayList<>(); - for (StoreProduct storeProduct : storeProductList) { - IndexProductResponse productResponse = new IndexProductResponse(); - productResponse.setTags(storeProduct.getTags()); - - List activityList = CrmebUtil.stringToArrayInt(storeProduct.getActivity()); - // 活动类型默认:直接跳过 - if (activityList.get(0).equals(Constants.PRODUCT_TYPE_NORMAL)) { - BeanUtils.copyProperties(storeProduct, productResponse); - productResponseArrayList.add(productResponse); - continue; - } - // 根据参与活动添加对应商品活动标示 - HashMap activityByProduct = - productUtils.getActivityByProduct(storeProduct.getId(), storeProduct.getActivity()); - if (CollUtil.isNotEmpty(activityByProduct)) { - for (Integer activity : activityList) { - if (activity.equals(Constants.PRODUCT_TYPE_NORMAL)) { - break; - } - if (activity.equals(Constants.PRODUCT_TYPE_SECKILL)) { - ProductActivityItemResponse itemResponse = activityByProduct.get(Constants.PRODUCT_TYPE_SECKILL); - if (ObjectUtil.isNotNull(itemResponse)) { - productResponse.setActivityH5(itemResponse); - break; - } - } - if (activity.equals(Constants.PRODUCT_TYPE_BARGAIN)) { - ProductActivityItemResponse itemResponse = activityByProduct.get(Constants.PRODUCT_TYPE_BARGAIN); - if (ObjectUtil.isNotNull(itemResponse)) { - productResponse.setActivityH5(itemResponse); - break; - } - } - if (activity.equals(Constants.PRODUCT_TYPE_PINGTUAN)) { - ProductActivityItemResponse itemResponse = activityByProduct.get(Constants.PRODUCT_TYPE_PINGTUAN); - if (ObjectUtil.isNotNull(itemResponse)) { - productResponse.setActivityH5(itemResponse); - break; - } - } - } - } - BeanUtils.copyProperties(storeProduct, productResponse); - productResponseArrayList.add(productResponse); - } - CommonPage productResponseCommonPage = CommonPage.restPage(productResponseArrayList); - BeanUtils.copyProperties(storeProductCommonPage, productResponseCommonPage, "list"); - return productResponseCommonPage; - } - /** * 商品列表(个别分类模型使用) * @param request 列表请求参数 @@ -526,6 +424,7 @@ public class ProductServiceImpl implements ProductService { User user = userService.getInfo(); List productResponseArrayList = new ArrayList<>(); + Map skuDetails = storeProductService.getSkuDetails(storeProductList.stream().map(StoreProduct::getId).collect(Collectors.toList())); for (StoreProduct storeProduct : storeProductList) { IndexProductResponse productResponse = new IndexProductResponse(); // 获取商品购物车数量 @@ -533,6 +432,9 @@ public class ProductServiceImpl implements ProductService { productResponse.setCartNum(cartService.getProductNumByUidAndProductId(user.getUid(), storeProduct.getId())); } BeanUtils.copyProperties(storeProduct, productResponse); + ProductDetailVo skuDetail = skuDetails.get(storeProduct.getId()); + productResponse.setProductValue(skuDetail.getProductValue()); + productResponse.setProductAttr(skuDetail.getProductAttr()); productResponseArrayList.add(productResponse); } CommonPage productResponseCommonPage = CommonPage.restPage(productResponseArrayList); @@ -548,73 +450,6 @@ public class ProductServiceImpl implements ProductService { public List getLeaderboard() { return storeProductService.getLeaderboard(); } - - /** - * 获取热门推荐商品列表 - * @param pageRequest 分页参数 - * @return CommonPage - */ - @Override - public CommonPage getSalesProductList(PageParamRequest pageRequest) { - List storeProductList = storeProductService.getIndexProduct(Constants.INDEX_BENEFIT_BANNER, pageRequest); - if (CollUtil.isEmpty(storeProductList)) { - return CommonPage.restPage(new ArrayList<>()); - } - CommonPage storeProductCommonPage = CommonPage.restPage(storeProductList); - - List productResponseArrayList = new ArrayList<>(); - for (StoreProduct storeProduct : storeProductList) { - - - IndexProductResponse productResponse = new IndexProductResponse(); - productResponse.setTags(storeProduct.getTags()); - - List activityList = CrmebUtil.stringToArrayInt(storeProduct.getActivity()); - // 活动类型默认:直接跳过 - if (activityList.get(0).equals(Constants.PRODUCT_TYPE_NORMAL)) { - BeanUtils.copyProperties(storeProduct, productResponse); - productResponseArrayList.add(productResponse); - continue; - } - // 根据参与活动添加对应商品活动标示 - HashMap activityByProduct = - productUtils.getActivityByProduct(storeProduct.getId(), storeProduct.getActivity()); - if (CollUtil.isNotEmpty(activityByProduct)) { - for (Integer activity : activityList) { - if (activity.equals(Constants.PRODUCT_TYPE_NORMAL)) { - break; - } - if (activity.equals(Constants.PRODUCT_TYPE_SECKILL)) { - ProductActivityItemResponse itemResponse = activityByProduct.get(Constants.PRODUCT_TYPE_SECKILL); - if (ObjectUtil.isNotNull(itemResponse)) { - productResponse.setActivityH5(itemResponse); - break; - } - } - if (activity.equals(Constants.PRODUCT_TYPE_BARGAIN)) { - ProductActivityItemResponse itemResponse = activityByProduct.get(Constants.PRODUCT_TYPE_BARGAIN); - if (ObjectUtil.isNotNull(itemResponse)) { - productResponse.setActivityH5(itemResponse); - break; - } - } - if (activity.equals(Constants.PRODUCT_TYPE_PINGTUAN)) { - ProductActivityItemResponse itemResponse = activityByProduct.get(Constants.PRODUCT_TYPE_PINGTUAN); - if (ObjectUtil.isNotNull(itemResponse)) { - productResponse.setActivityH5(itemResponse); - break; - } - } - } - } - BeanUtils.copyProperties(storeProduct, productResponse); - productResponseArrayList.add(productResponse); - } - CommonPage productResponseCommonPage = CommonPage.restPage(productResponseArrayList); - BeanUtils.copyProperties(storeProductCommonPage, productResponseCommonPage, "list"); - return productResponseCommonPage; - } - } diff --git a/food-service/pom.xml b/food-service/pom.xml index 66e43dd..7435392 100644 --- a/food-service/pom.xml +++ b/food-service/pom.xml @@ -3,7 +3,7 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - yzy + prepare_food com.zbkj 0.0.1-SNAPSHOT diff --git a/food-service/src/main/java/com/zbkj/service/dao/DeliverySetFeeDao.java b/food-service/src/main/java/com/zbkj/service/dao/DeliverySetFeeDao.java deleted file mode 100644 index f14ecd1..0000000 --- a/food-service/src/main/java/com/zbkj/service/dao/DeliverySetFeeDao.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.zbkj.service.dao; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.zbkj.common.model.deliveryset.DeliverySetFee; - -public interface DeliverySetFeeDao extends BaseMapper { - -} diff --git a/food-service/src/main/java/com/zbkj/service/dao/StoreProductReplyDao.java b/food-service/src/main/java/com/zbkj/service/dao/StoreProductReplyDao.java index 7737fc3..2ccd707 100644 --- a/food-service/src/main/java/com/zbkj/service/dao/StoreProductReplyDao.java +++ b/food-service/src/main/java/com/zbkj/service/dao/StoreProductReplyDao.java @@ -2,6 +2,9 @@ package com.zbkj.service.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.zbkj.common.model.product.StoreProductReply; +import com.zbkj.common.vo.ReplyReviewTagsVo; + +import java.util.List; /** * 评论表 Mapper 接口 @@ -9,4 +12,6 @@ import com.zbkj.common.model.product.StoreProductReply; */ public interface StoreProductReplyDao extends BaseMapper { + List getReviewTags(Integer productId); + } diff --git a/food-service/src/main/java/com/zbkj/service/delete/OrderUtils.java b/food-service/src/main/java/com/zbkj/service/delete/OrderUtils.java index 6081196..aeebb99 100644 --- a/food-service/src/main/java/com/zbkj/service/delete/OrderUtils.java +++ b/food-service/src/main/java/com/zbkj/service/delete/OrderUtils.java @@ -119,52 +119,67 @@ public class OrderUtils { return payTypeStr; } + public static void main(String[] args) { + Integer status = null; + switch (status) { + case Constants.ORDER_STATUS_H5_UNPAID: // 未支付 + System.out.println("111"); + break; + case Constants.ORDER_STATUS_H5_NOT_SHIPPED: // 待发货 + System.out.println("222"); + break; + } + System.out.println("出来"); + } + /** * h5 订单查询 where status 封装 * @param queryWrapper 查询条件 * @param status 状态 */ public void statusApiByWhere(LambdaQueryWrapper queryWrapper, Integer status){ - switch (status){ - case Constants.ORDER_STATUS_H5_UNPAID: // 未支付 - queryWrapper.eq(StoreOrder::getPaid, false); - queryWrapper.eq(StoreOrder::getStatus, 0); - queryWrapper.eq(StoreOrder::getRefundStatus, 0); - queryWrapper.eq(StoreOrder::getType, 0); - break; - case Constants.ORDER_STATUS_H5_NOT_SHIPPED: // 待发货 - queryWrapper.eq(StoreOrder::getPaid, true); - queryWrapper.eq(StoreOrder::getStatus, 0); - queryWrapper.eq(StoreOrder::getRefundStatus, 0); + if (null != status) { + switch (status) { + case Constants.ORDER_STATUS_H5_UNPAID: // 未支付 + queryWrapper.eq(StoreOrder::getPaid, false); + queryWrapper.eq(StoreOrder::getStatus, 0); + queryWrapper.eq(StoreOrder::getRefundStatus, 0); + queryWrapper.eq(StoreOrder::getType, 0); + break; + case Constants.ORDER_STATUS_H5_NOT_SHIPPED: // 待发货 + queryWrapper.eq(StoreOrder::getPaid, true); + queryWrapper.eq(StoreOrder::getStatus, 0); + queryWrapper.eq(StoreOrder::getRefundStatus, 0); // queryWrapper.eq(StoreOrder::getShippingType, 1); - break; - case Constants.ORDER_STATUS_H5_SPIKE: // 待收货 - queryWrapper.eq(StoreOrder::getPaid, true); - queryWrapper.eq(StoreOrder::getStatus, 1); - queryWrapper.eq(StoreOrder::getRefundStatus, 0); - break; - case Constants.ORDER_STATUS_H5_JUDGE: // 已支付 已收货 待评价 - queryWrapper.eq(StoreOrder::getPaid, true); - queryWrapper.eq(StoreOrder::getStatus, 2); - queryWrapper.eq(StoreOrder::getRefundStatus, 0); - break; - case Constants.ORDER_STATUS_H5_COMPLETE: // 已完成 - queryWrapper.eq(StoreOrder::getPaid, true); - queryWrapper.eq(StoreOrder::getStatus, 3); - queryWrapper.eq(StoreOrder::getRefundStatus, 0); - break; - case Constants.ORDER_STATUS_H5_REFUNDING: // 退款中 - queryWrapper.eq(StoreOrder::getPaid, true); - queryWrapper.in(StoreOrder::getRefundStatus, 1, 3); - break; - case Constants.ORDER_STATUS_H5_REFUNDED: // 已退款 - queryWrapper.eq(StoreOrder::getPaid, true); - queryWrapper.eq(StoreOrder::getRefundStatus, 2); - break; - case Constants.ORDER_STATUS_H5_REFUND: // 包含已退款和退款中 - queryWrapper.eq(StoreOrder::getPaid, true); - queryWrapper.in(StoreOrder::getRefundStatus, 1,2,3); - break; + break; + case Constants.ORDER_STATUS_H5_SPIKE: // 待收货 + queryWrapper.eq(StoreOrder::getPaid, true); + queryWrapper.eq(StoreOrder::getStatus, 1); + queryWrapper.eq(StoreOrder::getRefundStatus, 0); + break; + case Constants.ORDER_STATUS_H5_JUDGE: // 已支付 已收货 待评价 + queryWrapper.eq(StoreOrder::getPaid, true); + queryWrapper.eq(StoreOrder::getStatus, 2); + queryWrapper.eq(StoreOrder::getRefundStatus, 0); + break; + case Constants.ORDER_STATUS_H5_COMPLETE: // 已完成 + queryWrapper.eq(StoreOrder::getPaid, true); + queryWrapper.eq(StoreOrder::getStatus, 3); + queryWrapper.eq(StoreOrder::getRefundStatus, 0); + break; + case Constants.ORDER_STATUS_H5_REFUNDING: // 退款中 + queryWrapper.eq(StoreOrder::getPaid, true); + queryWrapper.in(StoreOrder::getRefundStatus, 1, 3); + break; + case Constants.ORDER_STATUS_H5_REFUNDED: // 已退款 + queryWrapper.eq(StoreOrder::getPaid, true); + queryWrapper.eq(StoreOrder::getRefundStatus, 2); + break; + case Constants.ORDER_STATUS_H5_REFUND: // 包含已退款和退款中 + queryWrapper.eq(StoreOrder::getPaid, true); + queryWrapper.in(StoreOrder::getRefundStatus, 1, 2, 3); + break; + } } queryWrapper.eq(StoreOrder::getIsDel, false); queryWrapper.eq(StoreOrder::getIsSystemDel, false); diff --git a/food-service/src/main/java/com/zbkj/service/service/DeliverySetFeeService.java b/food-service/src/main/java/com/zbkj/service/service/DeliverySetFeeService.java deleted file mode 100644 index 256a880..0000000 --- a/food-service/src/main/java/com/zbkj/service/service/DeliverySetFeeService.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.zbkj.service.service; - -import com.baomidou.mybatisplus.extension.service.IService; -import com.zbkj.common.model.deliveryset.DeliverySetFee; - -public interface DeliverySetFeeService extends IService { - - -} - diff --git a/food-service/src/main/java/com/zbkj/service/service/DeliverySetTimeService.java b/food-service/src/main/java/com/zbkj/service/service/DeliverySetTimeService.java index a37ec10..25ed10e 100644 --- a/food-service/src/main/java/com/zbkj/service/service/DeliverySetTimeService.java +++ b/food-service/src/main/java/com/zbkj/service/service/DeliverySetTimeService.java @@ -3,8 +3,14 @@ package com.zbkj.service.service; import com.baomidou.mybatisplus.extension.service.IService; import com.zbkj.common.model.deliveryset.DeliverySetTime; +import com.zbkj.common.response.DeliveryTimeResponse; + +import java.util.List; +import java.util.Map; public interface DeliverySetTimeService extends IService { + List getDeliveryTime(); + } diff --git a/food-service/src/main/java/com/zbkj/service/service/StoreCartService.java b/food-service/src/main/java/com/zbkj/service/service/StoreCartService.java index b8be485..0423dbc 100644 --- a/food-service/src/main/java/com/zbkj/service/service/StoreCartService.java +++ b/food-service/src/main/java/com/zbkj/service/service/StoreCartService.java @@ -24,7 +24,7 @@ public interface StoreCartService extends IService { * @param isValid 是否失效 * @return 购物车列表 */ - PageInfo getList(PageParamRequest pageParamRequest, boolean isValid); + PageInfo getList(PageParamRequest pageParamRequest, Boolean isValid); /** * 获取当前购物车数量 diff --git a/food-service/src/main/java/com/zbkj/service/service/StoreProductReplyService.java b/food-service/src/main/java/com/zbkj/service/service/StoreProductReplyService.java index 56986b7..07c8d23 100644 --- a/food-service/src/main/java/com/zbkj/service/service/StoreProductReplyService.java +++ b/food-service/src/main/java/com/zbkj/service/service/StoreProductReplyService.java @@ -69,7 +69,7 @@ public interface StoreProductReplyService extends IService { * @param pageParamRequest 分页参数 * @return PageInfo */ - PageInfo getH5List(Integer proId, Integer type, PageParamRequest pageParamRequest); + PageInfo getH5List(Integer proId, Integer type, String tag, PageParamRequest pageParamRequest); /** * 删除评论 diff --git a/food-service/src/main/java/com/zbkj/service/service/impl/DeliverySetFeeServiceImpl.java b/food-service/src/main/java/com/zbkj/service/service/impl/DeliverySetFeeServiceImpl.java deleted file mode 100644 index 2435c62..0000000 --- a/food-service/src/main/java/com/zbkj/service/service/impl/DeliverySetFeeServiceImpl.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.zbkj.service.service.impl; - -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.zbkj.common.model.deliveryset.DeliverySetFee; -import com.zbkj.service.dao.DeliverySetFeeDao; -import com.zbkj.service.service.DeliverySetFeeService; -import org.springframework.stereotype.Service; - -@Service -public class DeliverySetFeeServiceImpl extends ServiceImpl implements DeliverySetFeeService { - -} diff --git a/food-service/src/main/java/com/zbkj/service/service/impl/DeliverySetTimeServiceImpl.java b/food-service/src/main/java/com/zbkj/service/service/impl/DeliverySetTimeServiceImpl.java index 807f6b3..b59b094 100644 --- a/food-service/src/main/java/com/zbkj/service/service/impl/DeliverySetTimeServiceImpl.java +++ b/food-service/src/main/java/com/zbkj/service/service/impl/DeliverySetTimeServiceImpl.java @@ -1,12 +1,44 @@ package com.zbkj.service.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.zbkj.common.constants.Constants; import com.zbkj.common.model.deliveryset.DeliverySetTime; +import com.zbkj.common.response.DeliveryTimeResponse; +import com.zbkj.common.utils.DeliveryUtil; import com.zbkj.service.dao.DeliverySetTimeDao; import com.zbkj.service.service.DeliverySetTimeService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.time.LocalDate; +import java.time.LocalTime; +import java.util.*; + @Service public class DeliverySetTimeServiceImpl extends ServiceImpl implements DeliverySetTimeService { + @Autowired private DeliverySetTimeDao dao; + + @Override + public List getDeliveryTime() { + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.eq(DeliverySetTime::getType, 1); + lqw.eq(DeliverySetTime::getStatus, Constants.COMMON_SWITCH_CLOSE); + DeliverySetTime deliverySetTime = dao.selectOne(lqw); + // 设置起始日期和天数 + LocalDate startDate = LocalDate.now();; // 起始日期 + int numberOfDays = deliverySetTime.getAppointDay(); // 需要生成的天数 + int splitMin = deliverySetTime.getSendSplit(); // 间隔分钟数 + String[] amSplit = deliverySetTime.getAmSendHour().split("-"); + String[] pmSplit = deliverySetTime.getPmSendHour().split("-"); + // 定义上午和下午的时间区间 + LocalTime morningStart = LocalTime.of(Integer.parseInt(amSplit[0]), 0); // 上午开始时间 + LocalTime morningEnd = LocalTime.of(Integer.parseInt(amSplit[1]), 0); // 上午结束时间 + LocalTime afternoonStart = LocalTime.of(Integer.parseInt(pmSplit[0]), 0); // 下午开始时间 + LocalTime afternoonEnd = LocalTime.of(Integer.parseInt(pmSplit[1]), 0); // 下午结束时间 + // 获取时间段 + return DeliveryUtil.getHourlyTimeIntervals(startDate, numberOfDays, splitMin, morningStart, morningEnd, afternoonStart, afternoonEnd); + } + } diff --git a/food-service/src/main/java/com/zbkj/service/service/impl/EbHomeServiceImpl.java b/food-service/src/main/java/com/zbkj/service/service/impl/EbHomeServiceImpl.java index ae0e3ab..98299d3 100644 --- a/food-service/src/main/java/com/zbkj/service/service/impl/EbHomeServiceImpl.java +++ b/food-service/src/main/java/com/zbkj/service/service/impl/EbHomeServiceImpl.java @@ -37,10 +37,10 @@ public class EbHomeServiceImpl extends ServiceImpl implements EbH public List getIndexHomeList(Integer storeId) { List homeVos = dao.selectHomeType(Constants.HOME_TYPE_1, storeId); for (HomeVo homeVo : homeVos) { - // 默认展示99个 + // 默认展示5个 PageParamRequest fpPage = new PageParamRequest(); fpPage.setPage(1); - fpPage.setLimit(99); + fpPage.setLimit(5); SetMealFloorProRequest fp = new SetMealFloorProRequest(); fp.setHomeId(homeVo.getId().toString()); List fpResult = selectPageSetMealFloorPro(fp, fpPage); diff --git a/food-service/src/main/java/com/zbkj/service/service/impl/OrderServiceImpl.java b/food-service/src/main/java/com/zbkj/service/service/impl/OrderServiceImpl.java index 09ee8aa..9168604 100644 --- a/food-service/src/main/java/com/zbkj/service/service/impl/OrderServiceImpl.java +++ b/food-service/src/main/java/com/zbkj/service/service/impl/OrderServiceImpl.java @@ -34,9 +34,7 @@ import com.zbkj.common.model.user.UserAddress; import com.zbkj.common.page.CommonPage; import com.zbkj.common.request.*; import com.zbkj.common.response.*; -import com.zbkj.common.utils.CrmebUtil; -import com.zbkj.common.utils.DateUtil; -import com.zbkj.common.utils.RedisUtil; +import com.zbkj.common.utils.*; import com.zbkj.common.vo.*; import com.zbkj.service.delete.OrderUtils; import com.zbkj.service.service.*; @@ -53,6 +51,8 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.support.TransactionTemplate; import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.*; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @@ -476,7 +476,7 @@ public class OrderServiceImpl implements OrderService { return "退款中"; } if (storeOrder.getStatus().equals(0)) { - return "待发货"; + return "备货中"; } if (storeOrder.getStatus().equals(1)) { return "待收货"; @@ -818,7 +818,7 @@ public class OrderServiceImpl implements OrderService { UserAddress userAddress = userAddressService.getDefaultByUid(user.getUid()); if (ObjectUtil.isNotNull(userAddress)) { // 计算运费 - getFreightFee(orderInfoVo, userAddress); + getFreightFeeRider(orderInfoVo, userAddress); orderInfoVo.setAddressId(userAddress.getId()); orderInfoVo.setRealName(userAddress.getRealName()); orderInfoVo.setPhone(userAddress.getPhone()); @@ -833,6 +833,7 @@ public class OrderServiceImpl implements OrderService { orderInfoVo.setPayFee(orderInfoVo.getProTotalFee().add(orderInfoVo.getFreightFee())); orderInfoVo.setUserIntegral(user.getIntegral()); orderInfoVo.setUserBalance(user.getNowMoney()); + orderInfoVo.setMerId(request.getMerId()); // 缓存订单 String key = user.getUid() + DateUtil.getNowTime().toString()+CrmebUtil.getUuid(); redisUtil.set("user_order:" + key, JSONObject.toJSONString(orderInfoVo), Constants.ORDER_CASH_CONFIRM, TimeUnit.MINUTES); @@ -937,7 +938,7 @@ public class OrderServiceImpl implements OrderService { request.setRealName(userAddress.getRealName()); request.setPhone(userAddress.getPhone()); userAddressStr = userAddress.getProvince() + userAddress.getCity() + userAddress.getDistrict() + userAddress.getDetail(); - }else if (request.getShippingType() == 2) { // 到店自提 + } else if (request.getShippingType() == 2) { // 到店自提 if (StringUtils.isBlank(request.getRealName()) || StringUtils.isBlank(request.getPhone())) { throw new CrmebException("请填写姓名和电话"); } @@ -950,8 +951,31 @@ public class OrderServiceImpl implements OrderService { if (ObjectUtil.isNull(systemStore) || systemStore.getIsDel() || !systemStore.getIsShow()) { throw new CrmebException("暂无门店无法选择门店自提"); } - verifyCode = CrmebUtil.randomCount(1000000000L, 9999999999L)+""; + verifyCode = CrmebUtil.randomCount(1000000000L, 9999999999L) + ""; userAddressStr = systemStore.getName(); + } else if (request.getShippingType() == 3) { // 骑手配送 + String deliveryTime = request.getDeliveryTime(); + if (request.getAddressId() <= 0) throw new CrmebException("请选择配送地址"); + if (StringUtils.isEmpty(deliveryTime)) throw new CrmebException("请选择配送时间"); + + UserAddress userAddress = userAddressService.getById(request.getAddressId()); + if (ObjectUtil.isNull(userAddress) || userAddress.getIsDel()) { + throw new CrmebException("地址有误"); + } + request.setRealName(userAddress.getRealName()); + request.setPhone(userAddress.getPhone()); + userAddressStr = userAddress.getProvince() + userAddress.getCity() + userAddress.getDistrict() + userAddress.getDetail(); + + DateTimeFormatter ymdHmFor = DateTimeFormatter.ofPattern(Constants.DATE_FORMAT_HHMM); + LocalDateTime dTime = LocalDateTime.parse(deliveryTime, ymdHmFor); + LocalDateTime now = LocalDateTime.now(); + Integer isNowDay = DeliveryUtil.isNowDay(dTime); + // 选择配送的时间满足条件才可通过 + // 配送时间不是今天 通过 + // 配送时间是今天下午 && 当前时间是上午 通过 + if (!(isNowDay == 0 || (isNowDay == 1 && DeliveryUtil.isAmOrPm(dTime) == 1 && DeliveryUtil.isAmOrPm(now) == 0))) { + throw new CrmebException("请重新选择配送时间"); + } } // 活动商品校验 @@ -1888,11 +1912,78 @@ public class OrderServiceImpl implements OrderService { return storeOrder; } + /** + * 骑手配送费用 + */ + private void getFreightFeeRider(OrderInfoVo orderInfoVo, UserAddress userAddress) { + // 判断是否满额包邮 type=1按件数 2按重量 3按体积 4按距离 + // 全场满额骑手开关 + String riderSwitchString = systemConfigService.getValueByKey(SysConfigConstants.STORE_FEE_RIDER_SWITCH); + // 全场满额骑手金额 + String storeFreeRiderString = systemConfigService.getValueByKey(SysConfigConstants.STORE_FEE_RIDER); + BigDecimal storePostage = BigDecimal.ZERO; + if ("true".equals(riderSwitchString) && ("0".equals(storeFreeRiderString) || orderInfoVo.getProTotalFee().compareTo(new BigDecimal(storeFreeRiderString)) >= 0)) { + storePostage = BigDecimal.ZERO; + } else if (ObjectUtil.isNull(userAddress) || userAddress.getCityId() <= 0) { + // 用户地址不存在,默认运费为0元 + storePostage = BigDecimal.ZERO; + } else { + // 有用户地址的情况下 + // 运费根据商品计算 + Integer merId = orderInfoVo.getMerId(); + SystemStore store = systemStoreService.getById(merId); + // 门店经度 + String storeLatitude = store.getLatitude(); + // 门店纬度 + String storeLongitude = store.getLongitude(); + // 用户经度 + String userLongitude = userAddress.getLongitude(); + // 用户纬度 + String userLatitude = userAddress.getLatitude(); + // 模板 + Integer tempId = orderInfoVo.getOrderDetailList().get(0).getTempId(); + // 指定包邮(单品运费模板)> 指定区域配送(单品运费模板) + int cityId = userAddress.getCityId(); + // 门店和用户距离 km + BigDecimal km = BigDecimal.valueOf(DistanceUtil.haversineDistance(new Double(storeLatitude), new Double(storeLongitude), new Double(userLatitude), new Double(userLongitude))); + + ShippingTemplates shippingTemplate = shippingTemplatesService.getById(tempId); + if (shippingTemplate.getAppoint()) { // 指定包邮 + // 必须满足件数 [公里数小于等于 免费公里数] 才能包邮 + ShippingTemplatesFree shippingTemplatesFree = shippingTemplatesFreeService.getByTempIdAndCityId(tempId, cityId); + if (ObjectUtil.isNotNull(shippingTemplatesFree)) { // 在包邮区域内 + BigDecimal freeNum = shippingTemplatesFree.getNumber(); + // 在免费公里数以内 = 包邮 + if (freeNum.compareTo(km) >= 0) { + orderInfoVo.setFreightFee(storePostage); + return; + } + } + } + // 不满足指定包邮条件,走指定区域配送 + ShippingTemplatesRegion shippingTemplatesRegion = shippingTemplatesRegionService.getByTempIdAndCityId(tempId, cityId); + if (ObjectUtil.isNull(shippingTemplatesRegion)) { + throw new CrmebException("计算配送费时,未找到全国配送配置"); + } + // 判断距离是否超过首公里数 + if (km.compareTo(shippingTemplatesRegion.getFirst()) <= 0) { + storePostage = storePostage.add(shippingTemplatesRegion.getFirstPrice()); + } else { // 超过首公里数的需要计算续费 + BigDecimal exceedKm = km.subtract(shippingTemplatesRegion.getFirst()); + // 剩余公里数 / 续公里数 = 需要计算的续公里数费用的次数 + BigDecimal divide = exceedKm.divide(shippingTemplatesRegion.getRenewal(), 0, BigDecimal.ROUND_UP); + BigDecimal renewalPrice = shippingTemplatesRegion.getRenewalPrice().multiply(divide); + storePostage = storePostage.add(shippingTemplatesRegion.getFirstPrice()).add(renewalPrice); + } + } + orderInfoVo.setFreightFee(storePostage); + } + /** * 计算订单运费 */ private void getFreightFee(OrderInfoVo orderInfoVo, UserAddress userAddress) { - // 判断是否满额包邮 type=1按件数 2按重量 3按体积 + // 判断是否满额包邮 type=1按件数 2按重量 3按体积 4按距离 // 全场满额包邮开关 String postageSwitchString = systemConfigService.getValueByKey(SysConfigConstants.STORE_FEE_POSTAGE_SWITCH); // 全场满额包邮金额 @@ -2012,6 +2103,14 @@ public class OrderServiceImpl implements OrderService { } else if (ObjectUtil.isNull(request.getAddressId()) || request.getAddressId() <= 0) { // 快递配送,无地址 priceResponse.setFreightFee(BigDecimal.ZERO); + } else if (request.getShippingType().equals(3)) { // 骑手配送,计算距离公里数 + UserAddress userAddress = userAddressService.getById(request.getAddressId()); + if (ObjectUtil.isNull(userAddress)) { + priceResponse.setFreightFee(BigDecimal.ZERO); + } else { + getFreightFeeRider(orderInfoVo, userAddress); + priceResponse.setFreightFee(orderInfoVo.getFreightFee()); + } } else {// 快递配送,有地址 UserAddress userAddress = userAddressService.getById(request.getAddressId()); if (ObjectUtil.isNull(userAddress)) { diff --git a/food-service/src/main/java/com/zbkj/service/service/impl/ShippingTemplatesFreeServiceImpl.java b/food-service/src/main/java/com/zbkj/service/service/impl/ShippingTemplatesFreeServiceImpl.java index e619084..e5c72ec 100644 --- a/food-service/src/main/java/com/zbkj/service/service/impl/ShippingTemplatesFreeServiceImpl.java +++ b/food-service/src/main/java/com/zbkj/service/service/impl/ShippingTemplatesFreeServiceImpl.java @@ -2,6 +2,8 @@ package com.zbkj.service.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.zbkj.common.model.express.ShippingTemplatesRegion; +import com.zbkj.common.request.ShippingTemplatesRegionRequest; import com.zbkj.common.utils.CrmebUtil; import com.zbkj.common.model.express.ShippingTemplatesFree; import com.zbkj.common.request.ShippingTemplatesFreeRequest; @@ -16,6 +18,8 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; /** * ShippingTemplatesFreeServiceImpl 接口实现 @@ -140,7 +144,24 @@ public class ShippingTemplatesFreeServiceImpl extends ServiceImpl getListGroup(Integer tempId) { - return dao.getListGroup(tempId); + List resList = new ArrayList<>(); + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(ShippingTemplatesFree::getTempId, tempId); + lambdaQueryWrapper.eq(ShippingTemplatesFree::getStatus, true); + lambdaQueryWrapper.orderByAsc(ShippingTemplatesFree::getId); + List list = dao.selectList(lambdaQueryWrapper); + Map> listMap = list.stream().collect(Collectors.groupingBy(ShippingTemplatesFree::getUniqid)); + // 遍历分组结果 + listMap.forEach((uniqId, value) -> { + String cityIds = value.stream().map(i -> i.getCityId().toString()).distinct().collect(Collectors.joining(",")); + ShippingTemplatesFreeRequest res = new ShippingTemplatesFreeRequest(); + res.setCityId(cityIds); + res.setTitle(value.get(0).getTitle()); + res.setNumber(value.get(0).getNumber()); + res.setPrice(value.get(0).getPrice()); + resList.add(res); + }); + return resList; //dao.getListGroup(tempId); } } diff --git a/food-service/src/main/java/com/zbkj/service/service/impl/ShippingTemplatesRegionServiceImpl.java b/food-service/src/main/java/com/zbkj/service/service/impl/ShippingTemplatesRegionServiceImpl.java index a61e217..c97f521 100644 --- a/food-service/src/main/java/com/zbkj/service/service/impl/ShippingTemplatesRegionServiceImpl.java +++ b/food-service/src/main/java/com/zbkj/service/service/impl/ShippingTemplatesRegionServiceImpl.java @@ -2,6 +2,9 @@ package com.zbkj.service.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.zbkj.common.model.product.StoreProductAttrValue; +import com.zbkj.common.model.user.UserGroup; +import com.zbkj.common.model.user.UserTag; import com.zbkj.common.utils.CrmebUtil; import com.zbkj.common.model.express.ShippingTemplatesRegion; import com.zbkj.common.request.ShippingTemplatesRegionRequest; @@ -18,6 +21,8 @@ import java.io.Serializable; import java.util.ArrayList; import java.util.Collection; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; /** * ShippingTemplatesRegionServiceImpl 接口实现 @@ -83,7 +88,6 @@ public class ShippingTemplatesRegionServiceImpl extends ServiceImpl getListGroup(Integer tempId) { - return dao.getListGroup(tempId); + List resList = new ArrayList<>(); + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(ShippingTemplatesRegion::getTempId, tempId); + lambdaQueryWrapper.eq(ShippingTemplatesRegion::getStatus, true); + lambdaQueryWrapper.orderByAsc(ShippingTemplatesRegion::getId); + List list = dao.selectList(lambdaQueryWrapper); + Map> listMap = list.stream().collect(Collectors.groupingBy(ShippingTemplatesRegion::getUniqid)); + // 遍历分组结果 + listMap.forEach((uniqId, value) -> { + String cityIds = value.stream().map(i -> i.getCityId().toString()).distinct().collect(Collectors.joining(",")); + ShippingTemplatesRegionRequest res = new ShippingTemplatesRegionRequest(); + res.setCityId(cityIds); + res.setTitle(value.get(0).getTitle()); + res.setFirst(value.get(0).getFirst()); + res.setFirstPrice(value.get(0).getFirstPrice()); + res.setRenewal(value.get(0).getRenewal()); + res.setRenewalPrice(value.get(0).getRenewalPrice()); + res.setUniqid(uniqId); + resList.add(res); + }); + return resList; //dao.getListGroup(tempId); } } diff --git a/food-service/src/main/java/com/zbkj/service/service/impl/ShippingTemplatesServiceImpl.java b/food-service/src/main/java/com/zbkj/service/service/impl/ShippingTemplatesServiceImpl.java index 63222b4..cad913a 100644 --- a/food-service/src/main/java/com/zbkj/service/service/impl/ShippingTemplatesServiceImpl.java +++ b/food-service/src/main/java/com/zbkj/service/service/impl/ShippingTemplatesServiceImpl.java @@ -77,21 +77,18 @@ public class ShippingTemplatesServiceImpl extends ServiceImpl shippingTemplatesRegionRequestList = request.getShippingTemplatesRegionRequestList(); if (CollUtil.isEmpty(shippingTemplatesRegionRequestList)) { - throw new CrmebException("区域运费最少需要一条默认的全国区域"); + throw new CrmebException("区域配送最少需要一条默认的全国区域"); } - ShippingTemplates shippingTemplates = new ShippingTemplates(); shippingTemplates.setName(request.getName()); shippingTemplates.setSort(request.getSort()); shippingTemplates.setType(request.getType()); shippingTemplates.setAppoint(request.getAppoint()); - save(shippingTemplates); //区域运费 shippingTemplatesRegionService.saveAll(shippingTemplatesRegionRequestList, request.getType(), shippingTemplates.getId()); - List shippingTemplatesFreeRequestList = request.getShippingTemplatesFreeRequestList(); if(null != shippingTemplatesFreeRequestList && shippingTemplatesFreeRequestList.size() > 0 && request.getAppoint()){ shippingTemplatesFreeService.saveAll(shippingTemplatesFreeRequestList, request.getType(), shippingTemplates.getId()); diff --git a/food-service/src/main/java/com/zbkj/service/service/impl/StoreCartServiceImpl.java b/food-service/src/main/java/com/zbkj/service/service/impl/StoreCartServiceImpl.java index 38f2d3d..54d2670 100644 --- a/food-service/src/main/java/com/zbkj/service/service/impl/StoreCartServiceImpl.java +++ b/food-service/src/main/java/com/zbkj/service/service/impl/StoreCartServiceImpl.java @@ -73,7 +73,7 @@ public class StoreCartServiceImpl extends ServiceImpl i * @return List */ @Override - public PageInfo getList(PageParamRequest pageParamRequest, boolean isValid) { + public PageInfo getList(PageParamRequest pageParamRequest, Boolean isValid) { Integer userId = userService.getUserIdException(); Page page = PageHelper.startPage(pageParamRequest.getPage(), pageParamRequest.getLimit()); //带 StoreCart 类的多条件查询 @@ -102,7 +102,7 @@ public class StoreCartServiceImpl extends ServiceImpl i cartInfoResponse.setImage(storeProduct.getImage()); cartInfoResponse.setStoreName(storeProduct.getStoreName()); - if (!isValid) {// 失效商品直接掠过 + if (!isValid) { // 失效商品直接掠过 cartInfoResponse.setAttrStatus(false); response.add(cartInfoResponse); continue ; @@ -179,7 +179,6 @@ public class StoreCartServiceImpl extends ServiceImpl i storeCartPram.setProductAttrUnique(storeCartRequest.getProductAttrUnique()); storeCartPram.setUid(currentUser.getUid()); List existCarts = getByEntity(storeCartPram); // 这里仅仅能获取一条以信息 - String todayStr = DateUtil.date().toString(Constants.DATE_FORMAT_DATE); if (existCarts.size() > 0) { // 购物车添加数量 StoreCart forUpdateStoreCart = existCarts.get(0); forUpdateStoreCart.setCartNum(forUpdateStoreCart.getCartNum() + storeCartRequest.getCartNum()); @@ -341,12 +340,14 @@ public class StoreCartServiceImpl extends ServiceImpl i * @param status Boolean 商品类型:true-有效商品,false-无效商品 * @return Integer */ - private Integer getUserCountByStatus(Integer userId, Boolean status) { + private Integer getUserCountByStatus(Integer userId, Integer status) { //购物车商品种类数量 LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); lambdaQueryWrapper.eq(StoreCart::getUid, userId); - lambdaQueryWrapper.eq(StoreCart::getStatus, status); lambdaQueryWrapper.eq(StoreCart::getIsNew, false); + if (null != status) { + lambdaQueryWrapper.eq(StoreCart::getStatus, (status == Constants.STATUS_NORMAL ? true : false)); + } return dao.selectCount(lambdaQueryWrapper); } @@ -356,12 +357,14 @@ public class StoreCartServiceImpl extends ServiceImpl i * @param status 商品类型:true-有效商品,false-无效商品 * @return Integer */ - private Integer getUserSumByStatus(Integer userId, Boolean status) { + private Integer getUserSumByStatus(Integer userId, Integer status) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.select("ifnull(sum(cart_num), 0) as cart_num"); queryWrapper.eq("uid", userId); queryWrapper.eq("is_new", false); - queryWrapper.eq("status", status); + if (null != status) { + queryWrapper.eq("status", (status == Constants.STATUS_NORMAL ? true : false)); + } StoreCart storeCart = dao.selectOne(queryWrapper); if (ObjectUtil.isNull(storeCart)) { return 0; diff --git a/food-service/src/main/java/com/zbkj/service/service/impl/StoreOrderServiceImpl.java b/food-service/src/main/java/com/zbkj/service/service/impl/StoreOrderServiceImpl.java index 3c5c9a7..b1da133 100644 --- a/food-service/src/main/java/com/zbkj/service/service/impl/StoreOrderServiceImpl.java +++ b/food-service/src/main/java/com/zbkj/service/service/impl/StoreOrderServiceImpl.java @@ -152,7 +152,7 @@ public class StoreOrderServiceImpl extends ServiceImpl 0) { replyStar = getSumStar(productId); - } + List tags = dao.getReviewTags(productId); MyRecord record = new MyRecord(); record.set("sumCount", sumCount); record.set("goodCount", goodCount); @@ -250,6 +251,7 @@ public class StoreProductReplyServiceImpl extends ServiceImpl */ @Override - public PageInfo getH5List(Integer proId, Integer type, PageParamRequest pageParamRequest) { + public PageInfo getH5List(Integer proId, Integer type, String tag, PageParamRequest pageParamRequest) { Page startPage = PageHelper.startPage(pageParamRequest.getPage(), pageParamRequest.getLimit()); //带 StoreProductReply 类的多条件查询 @@ -341,6 +344,9 @@ public class StoreProductReplyServiceImpl extends ServiceImpl replyList = dao.selectList(lqw); List responseList = new ArrayList<>(); diff --git a/food-service/src/main/java/com/zbkj/service/service/impl/WeChatPayServiceImpl.java b/food-service/src/main/java/com/zbkj/service/service/impl/WeChatPayServiceImpl.java index fc73cdb..7f1cf74 100644 --- a/food-service/src/main/java/com/zbkj/service/service/impl/WeChatPayServiceImpl.java +++ b/food-service/src/main/java/com/zbkj/service/service/impl/WeChatPayServiceImpl.java @@ -12,9 +12,7 @@ import com.zbkj.common.exception.CrmebException; import com.zbkj.common.model.combination.StoreCombination; import com.zbkj.common.model.combination.StorePink; import com.zbkj.common.model.finance.UserRecharge; -import com.zbkj.common.model.game.GameTreeOrder; import com.zbkj.common.model.order.StoreOrder; -import com.zbkj.common.model.teaplant.TeaPlantOrder; import com.zbkj.common.model.user.User; import com.zbkj.common.model.user.UserToken; import com.zbkj.common.model.wechat.WechatPayInfo; diff --git a/food-service/src/main/resources/mapper/express/ShippingTemplatesFreeMapper.xml b/food-service/src/main/resources/mapper/express/ShippingTemplatesFreeMapper.xml index cfdb8ac..31055f6 100644 --- a/food-service/src/main/resources/mapper/express/ShippingTemplatesFreeMapper.xml +++ b/food-service/src/main/resources/mapper/express/ShippingTemplatesFreeMapper.xml @@ -3,6 +3,6 @@ diff --git a/food-service/src/main/resources/mapper/store/StoreProductReplyMapper.xml b/food-service/src/main/resources/mapper/store/StoreProductReplyMapper.xml index 57d98fb..605ff1d 100644 --- a/food-service/src/main/resources/mapper/store/StoreProductReplyMapper.xml +++ b/food-service/src/main/resources/mapper/store/StoreProductReplyMapper.xml @@ -2,4 +2,14 @@ + +