From d37e6a6f9b320fa9e67f437186611dad5891e068 Mon Sep 17 00:00:00 2001 From: wangfukang <15630117759@163.com> Date: Fri, 27 Mar 2026 18:02:07 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=B9=E6=8E=A5=E6=8B=BC=E5=9B=A2=E6=95=B0?= =?UTF-8?q?=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/cc/hiver/core/entity/User.java | 5 - .../controller/manage/AuthController.java | 4 +- .../controller/manage/UserController.java | 2 +- .../MallDeliveryOrderController.java | 101 ++++++++++++++++-- .../mall/controller/MallOrderController.java | 14 +++ .../controller/ProductCategoryController.java | 32 +++--- .../main/java/cc/hiver/mall/dao/ShopDao.java | 2 +- .../dao/mapper/MallDeliveryOrderMapper.java | 3 + .../mall/dao/mapper/MallOrderGroupMapper.java | 5 + .../hiver/mall/entity/MallDeliveryOrder.java | 6 ++ .../java/cc/hiver/mall/entity/MallOrder.java | 4 + .../cc/hiver/mall/entity/MallOrderGroup.java | 8 ++ .../hiver/mall/pojo/dto/CreateOrderDTO.java | 9 ++ .../query/MallDeliveryOrderPageQuery.java | 3 + .../cc/hiver/mall/pojo/vo/ProductPageVO.java | 2 +- .../cc/hiver/mall/service/ShopService.java | 2 +- .../mybatis/MallDeliveryOrderService.java | 7 +- .../mybatis/MallOrderGroupService.java | 4 + .../mall/serviceimpl/ShopServiceImpl.java | 2 +- .../mybatis/MallDeliveryOrderServiceImpl.java | 101 ++++++++++++++---- .../mybatis/MallOrderGroupServiceImpl.java | 21 +++- .../mybatis/MallOrderServiceImpl.java | 44 +++++++- .../mall/utils/MerchantOrderSeqUtil.java | 58 ++++++++++ .../mapper/MallDeliveryOrderMapper.xml | 24 ++++- .../resources/mapper/MallOrderGroupMapper.xml | 24 +++++ .../main/resources/mapper/MallOrderMapper.xml | 6 +- 26 files changed, 422 insertions(+), 71 deletions(-) create mode 100644 hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/utils/MerchantOrderSeqUtil.java diff --git a/hiver-core/src/main/java/cc/hiver/core/entity/User.java b/hiver-core/src/main/java/cc/hiver/core/entity/User.java index 94356244..a94723a8 100644 --- a/hiver-core/src/main/java/cc/hiver/core/entity/User.java +++ b/hiver-core/src/main/java/cc/hiver/core/entity/User.java @@ -126,11 +126,6 @@ public class User extends HiverBaseEntity { @ApiModelProperty(value = "入库员标识:0:不是(数据库默认);1:是;") private String warehouseKeeperFlag; - @Transient - @ApiModelProperty(value = "店铺id") - private String shopId; - - @ApiModelProperty(value = "小程序id") private String miniProgramOpenid; diff --git a/hiver-modules/hiver-base/src/main/java/cc/hiver/base/controller/manage/AuthController.java b/hiver-modules/hiver-base/src/main/java/cc/hiver/base/controller/manage/AuthController.java index b06a6cb5..bfe7a842 100644 --- a/hiver-modules/hiver-base/src/main/java/cc/hiver/base/controller/manage/AuthController.java +++ b/hiver-modules/hiver-base/src/main/java/cc/hiver/base/controller/manage/AuthController.java @@ -502,8 +502,8 @@ public class AuthController { customer.setUserName("sanke"); customer.setShopId(shop.getId()); customerService.addCustomer(customer);*/ - byMobileAndType.setShopId(shop.getId()); - return ResultUtil.data(byMobileAndType); + List shops = shopService.getShopByUserid(byMobileAndType.getId()); + return ResultUtil.data(shops); } @RequestMapping(value = "/chooseShop", method = RequestMethod.POST) diff --git a/hiver-modules/hiver-base/src/main/java/cc/hiver/base/controller/manage/UserController.java b/hiver-modules/hiver-base/src/main/java/cc/hiver/base/controller/manage/UserController.java index da9d1305..eefed6d7 100644 --- a/hiver-modules/hiver-base/src/main/java/cc/hiver/base/controller/manage/UserController.java +++ b/hiver-modules/hiver-base/src/main/java/cc/hiver/base/controller/manage/UserController.java @@ -666,7 +666,7 @@ public class UserController { // 返回当前登录人的信息 resultMap.put("user", wechatUser); - Shop shop = shopService.getShopByUserid(wechatUser.getId()); + List shop = shopService.getShopByUserid(wechatUser.getId()); if(shop != null){ resultMap.put("shop", shop); } diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/MallDeliveryOrderController.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/MallDeliveryOrderController.java index 071a6bfa..f7b3712a 100644 --- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/MallDeliveryOrderController.java +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/MallDeliveryOrderController.java @@ -1,10 +1,16 @@ package cc.hiver.mall.controller; +import cc.hiver.core.common.constant.CommonConstant; import cc.hiver.core.common.utils.ResultUtil; +import cc.hiver.core.common.utils.SecurityUtil; import cc.hiver.core.common.vo.Result; +import cc.hiver.core.entity.User; +import cc.hiver.core.entity.Worker; +import cc.hiver.core.service.WorkerService; import cc.hiver.mall.entity.MallDeliveryOrder; import cc.hiver.mall.pojo.query.MallDeliveryOrderPageQuery; import cc.hiver.mall.service.mybatis.MallDeliveryOrderService; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -12,6 +18,8 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import java.math.BigDecimal; + /** * 配送订单接口 */ @@ -24,6 +32,11 @@ public class MallDeliveryOrderController { @Autowired private MallDeliveryOrderService mallDeliveryOrderService; + @Autowired + private SecurityUtil securityUtil; + + @Autowired + private WorkerService workerService; /** * 分页查询配送单 * hallOnly=true 时查询抢单大厅(未被接单的单) @@ -31,7 +44,14 @@ public class MallDeliveryOrderController { @PostMapping("/page") @ApiOperation(value = "分页查询配送单", notes = "hallOnly=true 查询抢单大厅") public Result page(@RequestBody MallDeliveryOrderPageQuery q) { - if (Boolean.TRUE.equals(q.getHallOnly())) { + if (q.getDeliveryType() == 4 && StrUtil.isNotBlank(q.getWorkerId())) { + //先查当前用户指派单未确认接单数量 + q.setHallOnly(false); + q.setGetAreaId(null); + q.setPutAreaId(null); + q.setPageSize(100); + //随便给个值,指派单不区分类型 + q.setDeliveryType(null); IPage page = mallDeliveryOrderService.pageDelivery(q); java.util.Map result = new java.util.HashMap<>(); result.put("records", page.getRecords()); @@ -39,9 +59,44 @@ public class MallDeliveryOrderController { result.put("size", page.getSize()); result.put("current", page.getCurrent()); result.put("pages", page.getPages()); - result.put("waimaiCount", mallDeliveryOrderService.countWaitGrabOrders(1)); - result.put("kuaidiCount", mallDeliveryOrderService.countWaitGrabOrders(2)); + //外卖、快递、跑腿待接数 + result.put("orderCount", mallDeliveryOrderService.countOrdersByType(q.getRegionId())); return new ResultUtil().setData(result); + }else{ + if (Boolean.TRUE.equals(q.getHallOnly())) { + java.util.Map result = new java.util.HashMap<>(); + Integer deliveryType = q.getDeliveryType(); + String getAreaId = q.getGetAreaId(); + String putAreaId = q.getPutAreaId(); + if(StrUtil.isNotBlank(q.getWorkerId())){ + //先查当前用户指派单未确认接单数量 + q.setHallOnly(false); + q.setGetAreaId(null); + q.setPutAreaId(null); + //随便给个值,指派单不区分类型 + q.setDeliveryType(null); + //随便给个值,指派单不区分类型 + q.setPageSize(100); + IPage page = mallDeliveryOrderService.pageDelivery(q); + result.put("zhipaiCount", page.getTotal()); + } + //其他类型外卖、快递、跑腿待接数据 + q.setHallOnly(true); + q.setGetAreaId(getAreaId); + q.setPutAreaId(putAreaId); + q.setDeliveryType(deliveryType); + q.setWorkerId(null); + IPage page1 = mallDeliveryOrderService.pageDelivery(q); + + result.put("records", page1.getRecords()); + result.put("total", page1.getTotal()); + result.put("size", page1.getSize()); + result.put("current", page1.getCurrent()); + result.put("pages", page1.getPages()); + //外卖、快递、跑腿待接数 + result.put("orderCount", mallDeliveryOrderService.countOrdersByType(q.getRegionId())); + return new ResultUtil().setData(result); + } } return new ResultUtil().setData(mallDeliveryOrderService.pageDelivery(q)); } @@ -52,10 +107,44 @@ public class MallDeliveryOrderController { @PostMapping("/accept") @ApiOperation(value = "配送员接单", notes = "抢单大厅单或指派单均通过此接口接单") public Result accept(@RequestParam String deliveryId, - @RequestParam String workerId) { + @RequestParam String workerId,@RequestParam String regionId,@RequestParam String groupId) { try { - mallDeliveryOrderService.workerAccept(deliveryId, workerId); - return ResultUtil.success("接单成功"); + if(StrUtil.isBlank(workerId)){ + //当前人没有注册兼职,先赋予兼职身份 + final User user = securityUtil.getCurrUser(); + Worker worker = new Worker(); + if(worker == null){ + worker.setWorkerName(user.getNickname()); + worker.setUserId(user.getId()); + worker.setAvgTime(BigDecimal.valueOf(30)); + worker.setMobile(user.getMobile()); + worker.setRegion(regionId); + worker.setIsOnLine(CommonConstant.ON_LINE); + worker.setScore(BigDecimal.valueOf(5)); + workerService.save(worker); + } + Integer result = mallDeliveryOrderService.workerAccept(deliveryId, workerId,groupId); + if(result == 0){ + return ResultUtil.success("配送单不存在"); + }else if (result == 1){ + return ResultUtil.success("配送单已被接取或已取消"); + }else if(result == 2){ + return ResultUtil.success("该单已指定其他配送员,无法抢单"); + }else{ + return ResultUtil.success("接单成功"); + } + }else{ + Integer result = mallDeliveryOrderService.workerAccept(deliveryId, workerId,groupId); + if(result == 0){ + return ResultUtil.success("配送单不存在"); + }else if (result == 1){ + return ResultUtil.success("配送单已被接取或已取消"); + }else if(result == 2){ + return ResultUtil.success("该单已指定其他配送员,无法抢单"); + }else{ + return ResultUtil.success("接单成功"); + } + } } catch (Exception e) { log.error("配送员接单失败: {}", e.getMessage(), e); return ResultUtil.error(e.getMessage()); diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/MallOrderController.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/MallOrderController.java index c43e9285..b24e5d50 100644 --- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/MallOrderController.java +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/MallOrderController.java @@ -3,9 +3,11 @@ 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.pojo.dto.CreateOrderDTO; import cc.hiver.mall.pojo.query.MallOrderPageQuery; import cc.hiver.mall.pojo.vo.MallOrderVO; +import cc.hiver.mall.service.mybatis.MallOrderGroupService; import cc.hiver.mall.service.mybatis.MallOrderService; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; @@ -16,6 +18,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.math.BigDecimal; +import java.util.List; /** * 订单接口 @@ -29,6 +32,8 @@ public class MallOrderController { @Autowired private MallOrderService mallOrderService; + @Autowired + private MallOrderGroupService mallOrderGroupService; /** * 下单(普通购买 / 发起拼团 / 参团) */ @@ -53,6 +58,15 @@ public class MallOrderController { return new ResultUtil>().setData(mallOrderService.pageOrder(q)); } + /** + * 根据店铺id查询待成团订单 + */ + @PostMapping("/getMallOrderGroupByShopId") + @ApiOperation(value = "根据店铺id查询待成团订单") + public Result> getMallOrderGroupByShopId(@RequestBody MallOrderGroup group) { + return new ResultUtil>().setData(mallOrderGroupService.selectMallGroup(group)); + } + /** * 根据拼团id查询团长订单配送费信息 diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/ProductCategoryController.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/ProductCategoryController.java index 297d98c9..e8da4e72 100644 --- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/ProductCategoryController.java +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/ProductCategoryController.java @@ -47,15 +47,15 @@ public class ProductCategoryController { @ApiOperation(value = "新增货品类别") public Result save(ProductCategory productCategory) { // shopId从缓存中设置 - final String shopId = securityUtil.getShopId(); - productCategory.setShopId(shopId); - boolean result = productCategoryService.save(productCategory); - if (result) { - productCategoryService.refreshProductCategoryCache(shopId, productCategory.getId()); - return ResultUtil.success("添加成功"); + if (StringUtils.isEmpty(productCategory.getShopId())) { + final String shopId = securityUtil.getShopId(); + productCategory.setShopId(shopId); } else { - return ResultUtil.error("添加失败"); + productCategory.setShopId(productCategory.getShopId()); } + productCategoryService.save(productCategory); + productCategoryService.refreshProductCategoryCache(productCategory.getShopId(), productCategory.getId()); + return ResultUtil.success("添加成功"); } @RequestMapping(value = "/edit", method = RequestMethod.POST) @@ -68,13 +68,9 @@ public class ProductCategoryController { } else { productCategory.setShopId(productCategory.getShopId()); } - boolean result = productCategoryService.updateById(productCategory); - if (result) { - productCategoryService.refreshProductCategoryCache(productCategory.getShopId(), productCategory.getId()); - return ResultUtil.success("修改成功"); - } else { - return ResultUtil.error("修改失败"); - } + productCategoryService.updateById(productCategory); + productCategoryService.refreshProductCategoryCache(productCategory.getShopId(), productCategory.getId()); + return ResultUtil.success("修改成功"); } @RequestMapping(value = "/delById", method = RequestMethod.POST) @@ -87,12 +83,8 @@ public class ProductCategoryController { boolean result = productCategoryService.removeById(productCategory.getId()); // 将该分类下的商品id删除掉 productService.deleteProductByCategoryId(productCategory.getId()); - if (result) { - productCategoryService.removeProductCategoryCache(old.getShopId(), old.getId()); - return ResultUtil.success("删除成功"); - } else { - return ResultUtil.error("删除失败"); - } + productCategoryService.removeProductCategoryCache(old.getShopId(), old.getId()); + return ResultUtil.success("删除成功"); } @RequestMapping(value = "/list", method = RequestMethod.GET) diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/dao/ShopDao.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/dao/ShopDao.java index 0d29789d..00c901b6 100644 --- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/dao/ShopDao.java +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/dao/ShopDao.java @@ -58,7 +58,7 @@ public interface ShopDao extends HiverBaseDao { * @param userId */ @Query(value = "select * from t_shop where shop_owner_id = ?",nativeQuery = true) - Shop getShopByUserid(String userId); + List getShopByUserid(String userId); @Query(value = "select * from t_shop where id in (select shop_id from t_customer where user_id = ?)",nativeQuery = true) List getAllShopByCustomer(String userId); diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/dao/mapper/MallDeliveryOrderMapper.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/dao/mapper/MallDeliveryOrderMapper.java index e156510e..1d572f86 100644 --- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/dao/mapper/MallDeliveryOrderMapper.java +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/dao/mapper/MallDeliveryOrderMapper.java @@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; +import java.util.List; import java.util.Map; /** @@ -24,4 +25,6 @@ public interface MallDeliveryOrderMapper extends BaseMapper { * 统计配送员当前活跃单量(待取货+配送中) */ Map countActiveOrdersByWorker(@Param("workerId") String workerId); + + List> countOrdersByType(@Param("regionId") String regionId); } diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/dao/mapper/MallOrderGroupMapper.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/dao/mapper/MallOrderGroupMapper.java index 3f489a5f..9c0fe368 100644 --- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/dao/mapper/MallOrderGroupMapper.java +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/dao/mapper/MallOrderGroupMapper.java @@ -2,11 +2,16 @@ package cc.hiver.mall.dao.mapper; import cc.hiver.mall.entity.MallOrderGroup; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; +import java.util.List; + /** * 拼团主表 Mapper 接口 */ @Repository public interface MallOrderGroupMapper extends BaseMapper { + + List selectMallGroup(@Param("group") MallOrderGroup group); } diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/entity/MallDeliveryOrder.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/entity/MallDeliveryOrder.java index 76793492..19139681 100644 --- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/entity/MallDeliveryOrder.java +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/entity/MallDeliveryOrder.java @@ -54,6 +54,10 @@ public class MallDeliveryOrder implements Serializable { private String shopPhone; @ApiModelProperty(value = "商家地址(快照)") private String shopAddress; + @ApiModelProperty(value = "备注") + private String remark; + @ApiModelProperty(value = "学校id") + private String regionId; @ApiModelProperty(value = "加入大厅或指派时间") private Date createTime; @ApiModelProperty(value = "接单时间") @@ -66,4 +70,6 @@ public class MallDeliveryOrder implements Serializable { private Date finishTime; @ApiModelProperty(value = "订单类型 1:外卖 2:快递 3 跑腿") private Integer deliveryType; + @ApiModelProperty(value = "商家-订单序号") + private String numberCode; } diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/entity/MallOrder.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/entity/MallOrder.java index 9429f963..0978044f 100644 --- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/entity/MallOrder.java +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/entity/MallOrder.java @@ -35,6 +35,8 @@ public class MallOrder implements Serializable { private Integer deliveryType; @ApiModelProperty(value = "订单状态 0:待支付 1:待商家接单 01:待成团 2待配送员接单 3:待取货(配送)/待消费(自取) 4:配送中 5:已完成 6:已取消 7:待商家同意退款 8:已退款") private Integer status; + @ApiModelProperty(value = "商家-订单序号") + private String numberCode; @ApiModelProperty(value = "订单总金额(包含运费打包费等)") private BigDecimal totalAmount; @ApiModelProperty(value = "商品总金额") @@ -67,4 +69,6 @@ public class MallOrder implements Serializable { private Date createTime; @ApiModelProperty(value = "支付时间") private Date payTime; + @ApiModelProperty(value = "学校id") + private String regionId; } diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/entity/MallOrderGroup.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/entity/MallOrderGroup.java index 5621e394..2ec3d443 100644 --- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/entity/MallOrderGroup.java +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/entity/MallOrderGroup.java @@ -35,6 +35,8 @@ public class MallOrderGroup implements Serializable { private Integer targetMembers; @ApiModelProperty(value = "当前参团人数") private Integer currentMembers; + @ApiModelProperty(value = "0不是 1是面对面拼团") + private Integer isFace; @ApiModelProperty(value = "拼团状态 0:拼团中 1:拼团成功 2:拼团失败 3:面对面团(不公开)") private Integer status; @ApiModelProperty(value = "拼团价格") @@ -49,4 +51,10 @@ public class MallOrderGroup implements Serializable { private Date createTime; @ApiModelProperty(value = "过期时间") private Date expireTime; + @ApiModelProperty(value = "拼团商品名称") + private String productName; + @ApiModelProperty(value = "拼团商品图片") + private String productPicture; + @ApiModelProperty(value = "拼团商品id") + private String productId; } diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/dto/CreateOrderDTO.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/dto/CreateOrderDTO.java index e7e5b37a..93a6c3b9 100644 --- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/dto/CreateOrderDTO.java +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/dto/CreateOrderDTO.java @@ -21,6 +21,9 @@ public class CreateOrderDTO { @ApiModelProperty(value = "店铺ID", required = true) private String shopId; + @ApiModelProperty(value = "学校ID", required = true) + private String regionId; + @ApiModelProperty(value = "商品列表", required = true) private List items; @@ -61,12 +64,18 @@ public class CreateOrderDTO { public static class OrderItemDTO { @ApiModelProperty(value = "商品ID", required = true) private String productId; + @ApiModelProperty(value = "商品名称", required = false) + private String productName; + @ApiModelProperty(value = "商品图片", required = false) + private String productPicture; @ApiModelProperty(value = "商品规格JSON,格式:{\"specPrice\":\"11\",\"specNum\":9999}", required = true) private String specs; @ApiModelProperty(value = "下单价格(以此为准,由前端传入规格对应价格)", required = true) private BigDecimal price; @ApiModelProperty(value = "购买数量", required = true) private Integer quantity; + @ApiModelProperty(value = "是否是拼团商品", required = false) + private Integer isMain; } @Data 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 eed325d8..47e23968 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 @@ -36,6 +36,9 @@ public class MallDeliveryOrderPageQuery extends HiverBasePageQuery { @ApiModelProperty("是否只查询抢单大厅(workerId为空的)") private Boolean hallOnly; + @ApiModelProperty(value = "学校id") + private String regionId; + @ApiModelProperty("订单类型 1:外卖 2:快递") private Integer deliveryType; diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/vo/ProductPageVO.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/vo/ProductPageVO.java index 8e9d9fb9..531f7b52 100644 --- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/vo/ProductPageVO.java +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/vo/ProductPageVO.java @@ -98,7 +98,7 @@ public class ProductPageVO { private BigDecimal commission; @ApiModelProperty(value = "创建人") - private BigDecimal createBy; + private String createBy; @ApiModelProperty(value = "货品图片") private String productPicture; diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/ShopService.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/ShopService.java index 9d86952e..97fc363d 100644 --- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/ShopService.java +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/ShopService.java @@ -57,7 +57,7 @@ public interface ShopService extends HiverBaseService { */ void updateShopAreaTitle(String shopArea, String shopAreaTitle); - Shop getShopByUserid(String userId); + List getShopByUserid(String userId); /** * 根据用户id获取店铺信息 diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/mybatis/MallDeliveryOrderService.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/mybatis/MallDeliveryOrderService.java index 249214cb..36d8016d 100644 --- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/mybatis/MallDeliveryOrderService.java +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/mybatis/MallDeliveryOrderService.java @@ -5,6 +5,9 @@ import cc.hiver.mall.pojo.query.MallDeliveryOrderPageQuery; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; +import java.util.List; +import java.util.Map; + /** * 配送订单 Service 接口 */ @@ -18,7 +21,7 @@ public interface MallDeliveryOrderService extends IService { /** * 配送员接单(抢单大厅或指派单) */ - void workerAccept(String deliveryId, String workerId); + Integer workerAccept(String deliveryId, String workerId,String groupId); /** * 配送员取货 @@ -40,4 +43,6 @@ public interface MallDeliveryOrderService extends IService { * @param deliveryType 1:外卖 2:快递 */ long countWaitGrabOrders(int deliveryType); + + List> countOrdersByType(String regionId); } diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/mybatis/MallOrderGroupService.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/mybatis/MallOrderGroupService.java index 7add5fa9..79a133b1 100644 --- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/mybatis/MallOrderGroupService.java +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/mybatis/MallOrderGroupService.java @@ -3,6 +3,8 @@ package cc.hiver.mall.service.mybatis; import cc.hiver.mall.entity.MallOrderGroup; import com.baomidou.mybatisplus.extension.service.IService; +import java.util.List; + /** * 拼团主表 Service 接口 */ @@ -17,4 +19,6 @@ public interface MallOrderGroupService extends IService { * 拼团过期处理(发起退款,所有子订单设为已取消) */ void expireGroup(String groupId); + + List selectMallGroup(MallOrderGroup group); } 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 8a969923..6e94fa76 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 @@ -168,7 +168,7 @@ public class ShopServiceImpl implements ShopService { } @Override - public Shop getShopByUserid(String userId) { + public List getShopByUserid(String userId) { return shopDao.getShopByUserid(userId); } 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 0c2dd1bb..d360df33 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 @@ -1,11 +1,15 @@ package cc.hiver.mall.serviceimpl.mybatis; import cc.hiver.mall.dao.mapper.MallDeliveryOrderMapper; +import cc.hiver.mall.dao.mapper.MallOrderGroupMapper; import cc.hiver.mall.entity.MallDeliveryOrder; import cc.hiver.mall.entity.MallOrder; +import cc.hiver.mall.entity.MallOrderGroup; import cc.hiver.mall.pojo.query.MallDeliveryOrderPageQuery; import cc.hiver.mall.service.mybatis.MallDeliveryOrderService; import cc.hiver.mall.service.mybatis.MallOrderService; +import cc.hiver.mall.utils.MerchantOrderSeqUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -19,7 +23,10 @@ import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.math.RoundingMode; +import java.util.Arrays; import java.util.Date; +import java.util.List; +import java.util.Map; /** * 配送订单 Service 实现 @@ -45,13 +52,28 @@ public class MallDeliveryOrderServiceImpl extends ServiceImpl pageDelivery(MallDeliveryOrderPageQuery q) { if (Boolean.TRUE.equals(q.getHallOnly())) { q.setPageSize(20); } IPage page = new Page<>(q.getPageNum(), q.getPageSize()); - return this.baseMapper.selectPageVO(page, q); + page = this.baseMapper.selectPageVO(page, q); + + // 抢单大厅中,如果页码越界,使其循环回到前面的页 + if (Boolean.TRUE.equals(q.getHallOnly()) && page.getPages() > 0 && q.getPageNum() > page.getPages()) { + long actualPage = ((q.getPageNum() - 1) % page.getPages()) + 1; + page.setCurrent(actualPage); + page = this.baseMapper.selectPageVO(page, q); + } + + return page; } /** @@ -61,14 +83,14 @@ public class MallDeliveryOrderServiceImpl extends ServiceImpl gq = new LambdaQueryWrapper<>(); + gq.eq(MallOrderGroup::getId, delivery.getGroupId()); + MallOrderGroup group = mallOrderGroupMapper.selectOne(gq); + if(group.getIsFace() == 1){ + List orderIds = Arrays.asList(group.getGroupOrderIds().split(",")); + for (String orderId : orderIds) { + MallOrder orderInner = mallOrderService.getById(orderId); + if (orderInner != null) { + String latestSeq = merchantOrderSeqUtil.generateOrderSequence(order.getShopId(), 1); + LambdaUpdateWrapper oUw = new LambdaUpdateWrapper<>(); + oUw.eq(MallOrder::getId, orderId) + .set(MallOrder::getNumberCode, latestSeq).set(MallOrder::getStatus, 3); + mallOrderService.update(oUw); + numberCode+=latestSeq+"+"; + } + } + }else{ + // 同步更新关联订单状态:待配送员接单 -> 配送中(或待取货) + if (StringUtils.isNotBlank(delivery.getOrderId())) { + if (order != null && order.getStatus() == ORDER_STATUS_WAIT_DELIVERY) { + String latestSeq = merchantOrderSeqUtil.generateOrderSequence(order.getShopId(), 1); + LambdaUpdateWrapper oUw = new LambdaUpdateWrapper<>(); + oUw.eq(MallOrder::getId, delivery.getOrderId()) + .set(MallOrder::getNumberCode, latestSeq).set(MallOrder::getStatus, 3); // 待取货 + //缺少根据groupId更新面对面团所有订单状态 + mallOrderService.update(oUw); + numberCode = latestSeq; + } + } + } + }else{ + // 同步更新关联订单状态:待配送员接单 -> 配送中(或待取货) + if (StringUtils.isNotBlank(delivery.getOrderId())) { + if (order != null && order.getStatus() == ORDER_STATUS_WAIT_DELIVERY) { + String latestSeq = merchantOrderSeqUtil.generateOrderSequence(order.getShopId(), 1); + LambdaUpdateWrapper oUw = new LambdaUpdateWrapper<>(); + oUw.eq(MallOrder::getId, delivery.getOrderId()) + .set(MallOrder::getNumberCode, latestSeq).set(MallOrder::getStatus, 3); // 待取货 + //缺少根据groupId更新面对面团所有订单状态 + mallOrderService.update(oUw); + numberCode = latestSeq; + } + } + } // 若为指派单(直接购买),计算平台额外佣金 = 商品总价 * 2% if (StringUtils.isNotBlank(delivery.getOrderId())) { - MallOrder order = mallOrderService.getById(delivery.getOrderId()); if (order != null && order.getOrderType() == 1) { BigDecimal bonus = order.getGoodsAmount() .multiply(new BigDecimal("0.02")) .setScale(2, RoundingMode.HALF_UP); - uw.set(MallDeliveryOrder::getDeliveryFeeMarketplace, bonus); + uw.set(MallDeliveryOrder::getNumberCode, numberCode); } } this.update(uw); - - // 同步更新关联订单状态:待配送员接单 -> 配送中(或待取货) - if (StringUtils.isNotBlank(delivery.getOrderId())) { - MallOrder order = mallOrderService.getById(delivery.getOrderId()); - if (order != null && order.getStatus() == ORDER_STATUS_WAIT_DELIVERY) { - LambdaUpdateWrapper oUw = new LambdaUpdateWrapper<>(); - oUw.eq(MallOrder::getId, delivery.getOrderId()) - .set(MallOrder::getStatus, 3); // 待取货 - mallOrderService.update(oUw); - } - } - log.info("配送员 {} 接单成功,deliveryId={}", workerId, deliveryId); + return 3; } /** @@ -190,4 +248,9 @@ public class MallDeliveryOrderServiceImpl extends ServiceImpl> countOrdersByType(String regionId) { + return this.baseMapper.countOrdersByType(regionId); + } } diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/MallOrderGroupServiceImpl.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/MallOrderGroupServiceImpl.java index 840dccd4..950c28bc 100644 --- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/MallOrderGroupServiceImpl.java +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/MallOrderGroupServiceImpl.java @@ -9,6 +9,7 @@ import cc.hiver.mall.dao.mapper.WorkerRelaPriceMapper; import cc.hiver.mall.entity.*; import cc.hiver.mall.service.mybatis.MallOrderGroupService; import cc.hiver.mall.service.mybatis.MallOrderService; +import cc.hiver.mall.utils.MerchantOrderSeqUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -46,6 +47,9 @@ public class MallOrderGroupServiceImpl extends ServiceImpl ouw = new LambdaUpdateWrapper<>(); - ouw.eq(MallOrder::getId, order.getId()) - .set(MallOrder::getStatus, targetStatus); + //代表该拼团子订单订单选择到店 + if(targetStatus == 3){ + String latestSeq = merchantOrderSeqUtil.generateOrderSequence(order.getShopId(), 2); + ouw.eq(MallOrder::getId, order.getId()) + .set(MallOrder::getStatus, targetStatus) + .set(MallOrder::getNumberCode, latestSeq); + }else{ + ouw.eq(MallOrder::getId, order.getId()) + .set(MallOrder::getStatus, targetStatus); + } mallOrderService.update(ouw); if (order.getDeliveryType() != null && order.getDeliveryType() == 1) { @@ -201,4 +213,9 @@ public class MallOrderGroupServiceImpl extends ServiceImpl selectMallGroup(MallOrderGroup group) { + return this.baseMapper.selectMallGroup(group); + } } 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 4f6034f0..c492613f 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 @@ -9,6 +9,7 @@ import cc.hiver.mall.service.mybatis.MallDeliveryOrderService; import cc.hiver.mall.service.mybatis.MallOrderGroupService; import cc.hiver.mall.service.mybatis.MallOrderService; import cc.hiver.mall.service.mybatis.MallRefundRecordService; +import cc.hiver.mall.utils.MerchantOrderSeqUtil; import cn.hutool.json.JSONArray; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; @@ -62,6 +63,7 @@ public class MallOrderServiceImpl extends ServiceImpl 0){ + dto.getItems().forEach(item -> { + if(item.getIsMain() != null){ + if(item.getIsMain() == 0){ + group.setProductName(item.getProductName()); + group.setProductPicture(item.getProductPicture()); + group.setGroupPrice(item.getPrice()); + group.setProductId(item.getProductId()); + } + } + }); } group.setHeadOrderId(order.getId()); - group.setStatus(isFace2Face ? GROUP_STATUS_FACE2FACE : GROUP_STATUS_FORMING); + group.setStatus(isFace2Face ? GROUP_STATUS_FACE2FACE : GROUP_STATUS_WAITPAY); group.setGroupOrderIds(order.getId()); group.setCreateTime(new Date()); @@ -321,6 +342,7 @@ public class MallOrderServiceImpl extends ServiceImpl uw = new LambdaUpdateWrapper<>(); + uw.eq(MallOrder::getId, orderId).set(MallOrder::getStatus, STATUS_WAIT_PICKUP).set(MallOrder::getNumberCode, latestSeq); + this.update(uw); } } else if (order.getOrderType() == ORDER_TYPE_GROUP) { // 拼团订单支付成功 -> 改为待成团 @@ -394,6 +419,14 @@ public class MallOrderServiceImpl extends ServiceImpl guw = new LambdaUpdateWrapper<>(); + guw.eq(MallOrderGroup::getId, group.getId()) + .set(MallOrderGroup::getStatus, GROUP_STATUS_FORMING); + mallOrderGroupMapper.update(group,guw); + } } if (group != null) { mallOrderGroupService.checkAndActivateGroup(group.getId()); @@ -634,8 +667,11 @@ public class MallOrderServiceImpl extends ServiceImpl + + + @@ -35,9 +38,13 @@ d.get_area_id, d.put_area_id, d.delivery_fee, d.delivery_fee_marketplace, d.status, d.create_time, d.accept_time, d.get_time, d.must_finish_time, d.finish_time, d.receiver_name, d.receiver_phone, d.receiver_address, - d.shop_name, d.shop_phone, d.shop_address, d.delivery_type + d.shop_name, d.shop_phone, d.shop_address, d.delivery_type, d.number_code, + d.region_id,d.remark FROM mall_delivery_order d + + AND d.region_id = #{q.regionId} + AND d.worker_id = #{q.workerId} @@ -68,6 +75,9 @@ ORDER BY + + d.delivery_fee DESC, + (CASE @@ -83,10 +93,8 @@ ELSE 0 END) DESC, - - d.delivery_fee DESC, - - d.create_time DESC + (CASE WHEN d.must_finish_time IS NULL THEN 1 ELSE 0 END) ASC, + d.must_finish_time ASC,d.delivery_fee DESC @@ -34,7 +36,7 @@ o.status, o.total_amount, o.goods_amount, o.delivery_fee, o.package_fee, o.address_id, o.remark, o.create_time, o.pay_time, o.receiver_name, o.receiver_phone, o.receiver_address, - o.shop_name, o.shop_phone, o.shop_address + o.shop_name, o.shop_phone, o.shop_address,o.number_code,region_id FROM mall_order o @@ -68,7 +70,7 @@ o.status, o.total_amount, o.goods_amount, o.delivery_fee, o.package_fee, o.address_id, o.remark, o.create_time, o.pay_time, o.receiver_name, o.receiver_phone, o.receiver_address, - o.shop_name, o.shop_phone, o.shop_address + o.shop_name, o.shop_phone, o.shop_address,o.number_code,o.region_id FROM mall_order o LEFT JOIN mall_order_group og ON o.id = og.head_order_id