diff --git a/hiver-core/src/main/java/cc/hiver/core/common/constant/SettingConstant.java b/hiver-core/src/main/java/cc/hiver/core/common/constant/SettingConstant.java
index c2a68111..c12fddb3 100644
--- a/hiver-core/src/main/java/cc/hiver/core/common/constant/SettingConstant.java
+++ b/hiver-core/src/main/java/cc/hiver/core/common/constant/SettingConstant.java
@@ -101,10 +101,14 @@ public interface SettingConstant {
SMS_ACTIVITI,
// 鏃犱汉鎺ュ崟鐢ㄦ埛閫氱煡
SMS_NO_ORDER,
+ //閰嶉佸憳涓嬬嚎
+ SMS_WORKEROUT,
// 鎷掔粷鎺ュ崟閫氱煡
SMS_REJECT_ORDER,
// 琚寚瀹氭湭澶勭悊閫氱煡
- SMS_TIMEOUT
+ SMS_TIMEOUT,
+ //璁㈠崟閫娆
+ SMS_ORDERRETURN
}
/**
diff --git a/hiver-core/src/main/java/cc/hiver/core/entity/Worker.java b/hiver-core/src/main/java/cc/hiver/core/entity/Worker.java
index 9b670646..f5593495 100644
--- a/hiver-core/src/main/java/cc/hiver/core/entity/Worker.java
+++ b/hiver-core/src/main/java/cc/hiver/core/entity/Worker.java
@@ -67,6 +67,13 @@ public class Worker implements Serializable {
@ApiModelProperty("鎺ュ崟鐘舵 1-鍙姠鍗 2-涓嶅彲鎺ュ崟() 3-宸茬鐢(鎵嬪伐棰勭疆鐘舵)")
private Integer workerStatus = 1;
+ /**
+ * 閰嶉佸崟閲
+ */
+ @Column(name = "order_count")
+ @ApiModelProperty("閰嶉佸崟閲")
+ private Integer orderCount = 1;
+
@ApiModelProperty("閰嶉佸憳鍒涘缓浜")
@CreatedBy
diff --git a/hiver-core/src/main/java/cc/hiver/core/serviceimpl/WorkerServiceImpl.java b/hiver-core/src/main/java/cc/hiver/core/serviceimpl/WorkerServiceImpl.java
index 9520c456..8dd05eb5 100644
--- a/hiver-core/src/main/java/cc/hiver/core/serviceimpl/WorkerServiceImpl.java
+++ b/hiver-core/src/main/java/cc/hiver/core/serviceimpl/WorkerServiceImpl.java
@@ -63,6 +63,8 @@ public class WorkerServiceImpl implements WorkerService {
final Path
workerIdField = root.get("workerId");
final Path workerNameField = root.get("workerName");
final Path workerStatusField = root.get("workerStatus");
+ final Path regionField = root.get("region");
+ final Path getPushOrderField = root.get("getPushOrder");
final Path mobileField = root.get("mobile");
final Path createTimeField = root.get("createTime");
//final Path signPersonField = root.get("signPerson");
@@ -75,7 +77,9 @@ public class WorkerServiceImpl implements WorkerService {
if (CharSequenceUtil.isNotBlank(worker.getWorkerId())) {
list.add(cb.equal(workerIdField, worker.getWorkerId()));
}
-
+ if (CharSequenceUtil.isNotBlank(worker.getRegion())) {
+ list.add(cb.equal(regionField, worker.getRegion()));
+ }
if (CharSequenceUtil.isNotBlank(worker.getUserId())) {
list.add(cb.equal(userIdField, worker.getUserId()));
}
@@ -101,6 +105,11 @@ public class WorkerServiceImpl implements WorkerService {
list.add(cb.equal(isOnLineField, worker.getIsOnLine()));
}
+ // 鏄惁鎺ユ敹鎸囨淳鍗曠姸鎬
+ if (worker.getGetPushOrder() != null) {
+ list.add(cb.equal(getPushOrderField, worker.getGetPushOrder()));
+ }
+
// 妯$硦鎼滅礌
// 鏍规嵁閰嶉佸憳濮撳悕鍙婄數璇濓紝妯$硦鍖归厤
if (CharSequenceUtil.isNotEmpty(worker.getSearchStr())) {
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/AdminMallOrderGroupController.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/AdminMallOrderGroupController.java
new file mode 100644
index 00000000..b27b3ea4
--- /dev/null
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/AdminMallOrderGroupController.java
@@ -0,0 +1,106 @@
+package cc.hiver.mall.controller;
+
+import cc.hiver.core.common.utils.ResultUtil;
+import cc.hiver.core.common.vo.Result;
+import cc.hiver.mall.entity.MallOrder;
+import cc.hiver.mall.entity.MallOrderGroup;
+import cc.hiver.mall.service.mybatis.MallOrderGroupService;
+import cc.hiver.mall.service.mybatis.MallOrderService;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+@Slf4j
+@RestController
+@Api(tags = "鍚庡彴绠$悊绯荤粺鎷煎洟鏁版嵁鎺ュ彛")
+@RequestMapping("/hiver/mall/admin/orderGroup")
+public class AdminMallOrderGroupController {
+
+ @Autowired
+ private MallOrderGroupService mallOrderGroupService;
+
+ @Autowired
+ private MallOrderService mallOrderService;
+
+ @Data
+ public static class OrderGroupQuery {
+ private String shopId;
+ private String headUserId;
+ private Integer status;
+ private String productName;
+ private Integer isFace;
+ private int pageNumber = 1;
+ private int pageSize = 10;
+ }
+
+ @PostMapping("/page")
+ @ApiOperation(value = "鍒嗛〉鏌ヨ鎷煎洟鍒楄〃")
+ public Result> page(@RequestBody OrderGroupQuery query) {
+ LambdaQueryWrapper qw = new LambdaQueryWrapper<>();
+ if (StringUtils.isNotBlank(query.getShopId())) {
+ qw.eq(MallOrderGroup::getShopId, query.getShopId());
+ }
+ if (StringUtils.isNotBlank(query.getHeadUserId())) {
+ qw.eq(MallOrderGroup::getHeadUserId, query.getHeadUserId());
+ }
+ if (query.getStatus() != null) {
+ qw.eq(MallOrderGroup::getStatus, query.getStatus());
+ }
+ if (StringUtils.isNotBlank(query.getProductName())) {
+ qw.like(MallOrderGroup::getProductName, query.getProductName());
+ }
+ if (query.getIsFace() != null) {
+ qw.eq(MallOrderGroup::getIsFace, query.getIsFace());
+ }
+ qw.orderByDesc(MallOrderGroup::getCreateTime);
+
+ Page page = new Page<>(query.getPageNumber(), query.getPageSize());
+ Page result = mallOrderGroupService.page(page, qw);
+ return new ResultUtil>().setData(result);
+ }
+
+ @Data
+ public static class OrderGroupDetailVo {
+ private MallOrderGroup group;
+ private List childOrders;
+ }
+
+ @GetMapping("/detail/{id}")
+ @ApiOperation(value = "鑾峰彇鎷煎洟璇︽儏")
+ public Result detail(@PathVariable("id") String id) {
+ MallOrderGroup group = mallOrderGroupService.getById(id);
+ if (group == null) {
+ return ResultUtil.error("鎷煎洟涓嶅瓨鍦");
+ }
+
+ OrderGroupDetailVo vo = new OrderGroupDetailVo();
+ vo.setGroup(group);
+
+ // 鑾峰彇鎷煎洟鐨勫瓙璁㈠崟
+ if (StringUtils.isNotBlank(group.getGroupOrderIds())) {
+ List orderIds = Arrays.asList(group.getGroupOrderIds().split(","));
+ if (!orderIds.isEmpty()) {
+ LambdaQueryWrapper oqw = new LambdaQueryWrapper<>();
+ oqw.in(MallOrder::getId, orderIds);
+ List childOrders = mallOrderService.list(oqw);
+ vo.setChildOrders(childOrders);
+ } else {
+ vo.setChildOrders(new ArrayList<>());
+ }
+ } else {
+ vo.setChildOrders(new ArrayList<>());
+ }
+
+ return new ResultUtil().setData(vo);
+ }
+}
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/CommentController.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/CommentController.java
index 603b6805..8bfabcc5 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/CommentController.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/CommentController.java
@@ -16,12 +16,19 @@ limitations under the License.
package cc.hiver.mall.controller;
import cc.hiver.core.common.constant.ShopConstant;
+import cc.hiver.core.common.redis.RedisTemplateHelper;
import cc.hiver.core.common.utils.ResultUtil;
import cc.hiver.core.common.utils.StringUtils;
import cc.hiver.core.common.vo.Result;
+import cc.hiver.core.entity.Worker;
+import cc.hiver.core.serviceimpl.WorkerServiceImpl;
import cc.hiver.mall.entity.Comment;
+import cc.hiver.mall.entity.Shop;
+import cc.hiver.mall.pojo.dto.ShopCacheDTO;
import cc.hiver.mall.pojo.query.CommentQuery;
import cc.hiver.mall.service.CommentService;
+import cc.hiver.mall.service.ShopService;
+import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -29,6 +36,8 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@@ -47,6 +56,15 @@ public class CommentController {
@Autowired
private CommentService commentService;
+ @Autowired
+ private ShopService shopService;
+
+ @Autowired
+ private RedisTemplateHelper redisTemplateHelper;
+
+ @Autowired
+ private WorkerServiceImpl workerServiceImpl;
+
@RequestMapping(value = "/save", method = RequestMethod.POST)
@ApiOperation("淇濆瓨")
public Result save( @RequestBody List comment) {
@@ -57,6 +75,53 @@ public class CommentController {
}else{
e.setLevel(ShopConstant.SHOP_STATUS_NORMAL);
}
+ if(e.getShopId().toUpperCase().startsWith("W")){
+ //鏇存柊閰嶉佸憳璇勫垎
+ Worker worker = workerServiceImpl.findByWorkerId(e.getShopId());
+ Integer oldCount = worker.getOrderCount();
+ BigDecimal oldScore = worker.getScore();
+ BigDecimal score = e.getScore();
+
+ // 1. 鏇存柊鍗曢噺
+ int newCount = oldCount + 1;
+
+ // 2. 璁$畻鏂拌瘎鍒嗭細(鏃ф诲垎 + 鏈璇勫垎) / 鏂板崟閲
+ BigDecimal newScore = oldScore.multiply(new BigDecimal(oldCount))
+ .add(score)
+ .divide(new BigDecimal(newCount), 2, RoundingMode.HALF_UP); // 淇濈暀2浣嶅皬鏁
+
+ worker.setScore(newScore);
+
+ // 3. 淇濆瓨鏇存柊
+ workerServiceImpl.update(worker);
+
+ }else{
+ //鏇存柊搴楅摵璇勫垎
+ Shop shop = shopService.findById(e.getShopId());
+ Integer oldSaleCount = shop.getSaleCount() + 1;
+ BigDecimal oldScore = shop.getShopScore();
+ BigDecimal score = e.getScore();
+
+ int newCount = oldSaleCount + 1;
+
+ // 2. 璁$畻鏂拌瘎鍒嗭細(鏃ф诲垎 + 鏈璇勫垎) / 鏂板崟閲
+ BigDecimal newScore = oldScore.multiply(new BigDecimal(oldSaleCount))
+ .add(score)
+ .divide(new BigDecimal(newCount), 2, RoundingMode.HALF_UP); // 淇濈暀2浣嶅皬鏁
+
+ shop.setShopScore(newScore);
+ shopService.update(shop);
+
+ String shopCacheKey = "SHOP_CACHE:" + shop.getRegionId();
+ String shopJson = (String) redisTemplateHelper.hGet(shopCacheKey, shop.getId());
+ if (org.apache.commons.lang3.StringUtils.isNotBlank(shopJson)) {
+ ShopCacheDTO cacheDTO = JSONUtil.toBean(shopJson, ShopCacheDTO.class);
+ if (cacheDTO.getShop() != null) {
+ cacheDTO.getShop().setShopScore(newScore);
+ redisTemplateHelper.hPut(shopCacheKey, shop.getId(), JSONUtil.toJsonStr(cacheDTO));
+ }
+ }
+ }
});
if(comment != null && comment.get(0).getParentId()!=null){
Comment commentPar = commentService.getById(comment.get(0).getParentId());
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/ShopController.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/ShopController.java
index 66a66d23..cecf29c8 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/ShopController.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/ShopController.java
@@ -251,7 +251,7 @@ public class ShopController {
}
}
//宸茬鐢
- if(s.getStatus() < 1){
+ if(s.getStatus() < 1 && CharSequenceUtil.isBlank(shop.getShopIcon())){
continue;
}
if (CharSequenceUtil.isNotBlank(shop.getShopType())) {
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/WorkerController.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/WorkerController.java
index 478d0f49..3ec41620 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/WorkerController.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/WorkerController.java
@@ -126,7 +126,7 @@ public class WorkerController {
@RequestMapping(value = "/admin/edit", method = RequestMethod.POST)
@ApiOperation(value = "淇敼閰嶉佸憳淇℃伅", notes = "闇瑕侀氳繃涓嬪崟缂栧彿鑾峰彇璁㈠崟淇℃伅")
- public Result edit(Worker u) {
+ public Result edit(@RequestBody Worker u) {
if (StrUtil.isNotBlank(u.getRegion())) {
ShopArea d = shopAreaService.get(u.getRegion());
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/query/MallDeliveryOrderPageQuery.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/query/MallDeliveryOrderPageQuery.java
index 4c138143..1bd5d691 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/query/MallDeliveryOrderPageQuery.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/query/MallDeliveryOrderPageQuery.java
@@ -21,6 +21,9 @@ public class MallDeliveryOrderPageQuery extends HiverBasePageQuery {
@ApiModelProperty("搴楅摵ID")
private String shopId;
+ @ApiModelProperty("搴楅摵name")
+ private String shopName;
+
@ApiModelProperty("閰嶉佺姸鎬 0:寰呮帴鍗 1:寰呭彇璐 2:閰嶉佷腑 3:宸查佽揪 4:宸插彇娑")
private Integer status;
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/query/MallOrderPageQuery.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/query/MallOrderPageQuery.java
index b98004e2..972aa0f8 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/query/MallOrderPageQuery.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/query/MallOrderPageQuery.java
@@ -15,6 +15,9 @@ public class MallOrderPageQuery extends HiverBasePageQuery {
@ApiModelProperty("鐢ㄦ埛ID")
private String userId;
+ @ApiModelProperty("鐢ㄦ埛鐢佃瘽")
+ private String receiverPhone;
+
@ApiModelProperty("搴楅摵ID")
private String shopId;
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/ShopServiceImpl.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/ShopServiceImpl.java
index 26f75774..5fe81ced 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/ShopServiceImpl.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/ShopServiceImpl.java
@@ -117,6 +117,7 @@ public class ShopServiceImpl implements ShopService {
final Path regionField = root.get("regionId");
final Path shopAreaField = root.get("shopArea");
final Path isStudentField = root.get("isStudent");
+ final Path statusField = root.get("status");
final List list = new ArrayList<>();
@@ -147,6 +148,9 @@ public class ShopServiceImpl implements ShopService {
if (CharSequenceUtil.isNotBlank(shop.getShopName())) {
list.add(cb.like(ShopNameField, '%' + shop.getShopName() + '%'));
}
+ if (CharSequenceUtil.isBlank(shop.getShopIcon())) {
+ list.add(cb.notEqual(statusField, 0));
+ }
if (CharSequenceUtil.isNotBlank(shop.getRegionId())) {
list.add(cb.equal(regionField, shop.getRegionId()));
}
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/MallDeliveryOrderServiceImpl.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/MallDeliveryOrderServiceImpl.java
index 03f6fa55..b3ab1db8 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/MallDeliveryOrderServiceImpl.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/MallDeliveryOrderServiceImpl.java
@@ -31,6 +31,8 @@ import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
import java.sql.Timestamp;
import java.time.LocalDateTime;
import java.time.ZoneId;
@@ -325,7 +327,21 @@ public class MallDeliveryOrderServiceImpl extends ServiceImpl 鍘绘帀 workerId 杩涘叆鎶㈠崟澶у巺锛屼繚鐣欏師鏈夎ˉ璐撮噾
delivery.setWorkerId("");
+ smsUtil.sendCode(delivery.getReceiverPhone(), null, SettingConstant.SMS_TYPE.SMS_WORKEROUT.name());
}
}
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/MallOrderServiceImpl.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/MallOrderServiceImpl.java
index 7cf1c463..2db42df0 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/MallOrderServiceImpl.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/MallOrderServiceImpl.java
@@ -1,7 +1,11 @@
package cc.hiver.mall.serviceimpl.mybatis;
+import cc.hiver.core.common.constant.SettingConstant;
import cc.hiver.core.common.redis.RedisTemplateHelper;
+import cc.hiver.core.common.sms.SmsUtil;
+import cc.hiver.core.common.utils.SecurityUtil;
import cc.hiver.core.common.utils.SnowFlakeUtil;
+import cc.hiver.core.entity.User;
import cc.hiver.core.serviceimpl.JPushServiceImpl;
import cc.hiver.mall.dao.mapper.*;
import cc.hiver.mall.entity.*;
@@ -90,9 +94,15 @@ public class MallOrderServiceImpl extends ServiceImpl qw = new LambdaQueryWrapper<>();
+ qw.eq(MallDeliveryOrder::getOrderId, orderId);
+ MallDeliveryOrder delivery = mallDeliveryOrderMapper.selectOne(qw);
mallDeliveryOrderService.addDeliveryFee(order,delivery, totalFee,order.getDeliveryFee());
}
}
@@ -1229,9 +1241,11 @@ public class MallOrderServiceImpl extends ServiceImpl qw = new LambdaQueryWrapper<>();
+ qw.eq(MallDeliveryOrder::getOrderId, order.getId());
+ MallDeliveryOrder delivery = mallDeliveryOrderMapper.selectOne(qw);
+ smsUtil.sendCode(delivery.getWorkerPhone(), null, SettingConstant.SMS_TYPE.SMS_ORDERRETURN.name());
+ }
+ }
List goodsList = mallOrderGoodsMapper.selectByOrderId(order.getId());
if (goodsList == null || goodsList.isEmpty()) return;
diff --git a/hiver-modules/hiver-mall/src/main/resources/mapper/MallDeliveryOrderMapper.xml b/hiver-modules/hiver-mall/src/main/resources/mapper/MallDeliveryOrderMapper.xml
index ee05d285..1384b957 100644
--- a/hiver-modules/hiver-mall/src/main/resources/mapper/MallDeliveryOrderMapper.xml
+++ b/hiver-modules/hiver-mall/src/main/resources/mapper/MallDeliveryOrderMapper.xml
@@ -65,6 +65,11 @@
AND d.shop_id = #{q.shopId}
+
+ and (
+ d.shop_name like concat('%',#{q.shopName},'%')
+ )
+
AND d.status = #{q.status}
@@ -122,7 +127,7 @@
d.is_big,d.is_return,d.worker_name,d.arrive_time,d.new_worker
FROM mall_delivery_order d
- d.status not in (-1,4,0)
+ d.status not in (-1,4)
AND d.region_id = #{q.regionId}
diff --git a/hiver-modules/hiver-mall/src/main/resources/mapper/MallOrderMapper.xml b/hiver-modules/hiver-mall/src/main/resources/mapper/MallOrderMapper.xml
index cb116a26..ef992c7d 100644
--- a/hiver-modules/hiver-mall/src/main/resources/mapper/MallOrderMapper.xml
+++ b/hiver-modules/hiver-mall/src/main/resources/mapper/MallOrderMapper.xml
@@ -98,6 +98,11 @@
AND o.user_id = #{q.userId}
+
+ and (
+ o.receiver_phone like concat('%',#{q.receiverPhone},'%')
+ )
+
and (
o.shop_name like concat('%',#{q.shopName},'%')