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 5e14f4ef..cc723e42 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 @@ -120,8 +120,8 @@ public class MallDeliveryOrderController { */ @PostMapping("/accept") @ApiOperation(value = "配送员接单", notes = "抢单大厅单或指派单均通过此接口接单") - public Result accept(@RequestParam String deliveryId, - @RequestParam String workerId,@RequestParam String workerName,@RequestParam String regionId,@RequestParam String groupId) { + public Result accept(@RequestParam String deliveryId, + @RequestParam String workerId,@RequestParam String workerPhone,@RequestParam String workerName,@RequestParam String regionId,@RequestParam String groupId) { try { if(StrUtil.isBlank(workerId)){ //当前人没有注册兼职,先赋予兼职身份 @@ -137,7 +137,7 @@ public class MallDeliveryOrderController { worker.setScore(BigDecimal.valueOf(5)); workerService.save(worker); } - Integer result = mallDeliveryOrderService.workerAccept(deliveryId, workerId,workerName,groupId); + Integer result = mallDeliveryOrderService.workerAccept(user.getMobile(),deliveryId, workerId,workerName,groupId); if(result == 0){ return ResultUtil.success("配送单不存在"); }else if (result == 1){ @@ -145,10 +145,10 @@ public class MallDeliveryOrderController { }else if(result == 2){ return ResultUtil.success("该单已指定其他配送员,无法抢单"); }else{ - return ResultUtil.success("接单成功"); + return new ResultUtil().setData(worker); } }else{ - Integer result = mallDeliveryOrderService.workerAccept(deliveryId, workerId,workerName,groupId); + Integer result = mallDeliveryOrderService.workerAccept(workerPhone,deliveryId, workerId,workerName,groupId); if(result == 0){ return ResultUtil.success("配送单不存在"); }else if (result == 1){ 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 3c2625be..0b0eb7a6 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 @@ -17,7 +17,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; -import java.math.BigDecimal; import java.util.List; /** @@ -127,9 +126,10 @@ public class MallOrderController { @PostMapping("/cancel") @ApiOperation(value = "用户取消订单") public Result cancelOrder(@RequestParam String orderId, - @RequestParam String userId) { + @RequestParam String userId,@RequestParam Integer refundType, + @RequestParam Integer refundTypeStatus) { try { - mallOrderService.cancelOrder(orderId, userId); + mallOrderService.cancelOrder(orderId, userId, refundType, refundTypeStatus); return ResultUtil.success("已取消"); } catch (Exception e) { log.error("取消失败: {}", e.getMessage(), e); @@ -139,7 +139,7 @@ public class MallOrderController { /** * 申请退款 - */ + @PostMapping("/applyRefund") @ApiOperation("用户申请退款") public Result applyRefund(@RequestParam String orderId, @@ -154,7 +154,7 @@ public class MallOrderController { return ResultUtil.error(e.getMessage()); } } - + */ /** * 商家同意退款 */ diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/MallRefundRecordController.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/MallRefundRecordController.java index 302fa69b..77cc0996 100644 --- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/MallRefundRecordController.java +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/MallRefundRecordController.java @@ -13,6 +13,8 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + /** * 订单接口 */ @@ -25,9 +27,6 @@ public class MallRefundRecordController { @Autowired private MallRefundRecordService mallRefundRecordService; - /** - * 下单(普通购买 / 发起拼团 / 参团) - */ @PostMapping("/create") @ApiOperation(value = "售后提交接口") public Result create(@RequestBody MallRefundRecord mallRefundRecord) { @@ -40,4 +39,15 @@ public class MallRefundRecordController { } } + @PostMapping("/select") + @ApiOperation(value = "待售后信息查询接口") + public Result> select(@RequestBody MallRefundRecord mallRefundRecord) { + try { + return new ResultUtil>().setData(mallRefundRecordService.selectByLinkId(mallRefundRecord)); + } 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/entity/MallDeliveryOrder.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/entity/MallDeliveryOrder.java index 9005bb1a..a5e9fcbc 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 @@ -33,6 +33,8 @@ public class MallDeliveryOrder implements Serializable { private String groupId; @ApiModelProperty(value = "配送员ID") private String workerId; + @ApiModelProperty(value = "配送员电话") + private String workerPhone; @ApiModelProperty(value = "配送员名称") private String workerName; @ApiModelProperty(value = "店铺ID") 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 92fed091..75254d59 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 @@ -33,7 +33,7 @@ public class MallOrder implements Serializable { private Integer orderType; @ApiModelProperty(value = "配送方式 1:外卖配送 2:到店自取") private Integer deliveryType; - @ApiModelProperty(value = "订单状态 0:待支付 1:待商家接单 10:待成团 2待配送员接单 3:待取货(配送)/待消费(自取) 4:配送中 5:已完成 6:已取消 7:待商家同意退款 8:已退款 11: 售后中 售后处理后还变成4") + @ApiModelProperty(value = "订单状态 0:待支付 1:待商家接单 10:待成团 2待配送员接单 3:待取货(配送)/待消费(自取) 4:配送中 5:已完成 6:已取消 7:待商家同意退款 8:已退款 11: 售后中 12已售后") private Integer status; @ApiModelProperty(value = "结算状态 0 未结算 1已结算") private Integer settlementStatus; diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/entity/MallRefundRecord.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/entity/MallRefundRecord.java index 6afe6479..52d29bd1 100644 --- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/entity/MallRefundRecord.java +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/entity/MallRefundRecord.java @@ -1,6 +1,7 @@ package cc.hiver.mall.entity; import cc.hiver.core.common.utils.SnowFlakeUtil; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.annotations.ApiModel; @@ -29,6 +30,8 @@ public class MallRefundRecord implements Serializable { private String orderId; @ApiModelProperty(value = "用户ID") private String userId; + @ApiModelProperty(value = "关联的商家或者配送员ID 如果 refundType = 3 && refundTypeStatus == 3 MallRefundRecord存两条记录") + private String linkId; @ApiModelProperty(value = "退款金额") private BigDecimal refundAmount; @ApiModelProperty(value = "退款原因") @@ -47,5 +50,31 @@ public class MallRefundRecord implements Serializable { private Date successTime; @ApiModelProperty("售后商品列表") @Transient + @TableField(exist = false) private List items; + + @ApiModelProperty("店铺id") + @Transient + @TableField(exist = false) + private String shopId; + + @ApiModelProperty("配送员id") + @Transient + @TableField(exist = false) + private String workerId; + + @ApiModelProperty("商品总价") + @Transient + @TableField(exist = false) + private BigDecimal goodsAmount; + + @ApiModelProperty("餐盒费") + @Transient + @TableField(exist = false) + private BigDecimal packageFee; + + @ApiModelProperty("配送费") + @Transient + @TableField(exist = false) + private BigDecimal deliveryFee; } diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/vo/MallOrderVO.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/vo/MallOrderVO.java index 68303cdc..737480d6 100644 --- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/vo/MallOrderVO.java +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/vo/MallOrderVO.java @@ -1,9 +1,6 @@ package cc.hiver.mall.pojo.vo; -import cc.hiver.mall.entity.MallDeliveryOrder; -import cc.hiver.mall.entity.MallOrder; -import cc.hiver.mall.entity.MallOrderGoods; -import cc.hiver.mall.entity.MallOrderGroup; +import cc.hiver.mall.entity.*; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -30,4 +27,7 @@ public class MallOrderVO extends MallOrder { @ApiModelProperty("收货地址详情(冗余展示用)") private String addressDetail; + + @ApiModelProperty("售后信息") + private MallRefundRecord mallRefundRecord; } 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 28f8ce99..7678204a 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 @@ -26,7 +26,7 @@ public interface MallDeliveryOrderService extends IService { /** * 配送员接单(抢单大厅或指派单) */ - Integer workerAccept(String deliveryId, String workerId, String workerName,String groupId); + Integer workerAccept(String workerPhone,String deliveryId, String workerId, String workerName,String groupId); /** * 配送员取货 diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/mybatis/MallOrderService.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/mybatis/MallOrderService.java index aaeb2f3e..e608f297 100644 --- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/mybatis/MallOrderService.java +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/mybatis/MallOrderService.java @@ -46,12 +46,12 @@ public interface MallOrderService extends IService { /** * 用户取消订单(仅待支付/待成团状态可取消) */ - void cancelOrder(String orderId, String userId); + void cancelOrder(String orderId, String userId,Integer refundType, Integer refundTypeStatus); /** * 申请退款 */ - void applyRefund(String orderId, String userId, String reason, java.math.BigDecimal amount); + void applyRefund(String orderId, String userId, String reason, java.math.BigDecimal amount,Integer refundType,Integer refundTypeStatus); /** * 商家同意退款 diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/mybatis/MallRefundRecordService.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/mybatis/MallRefundRecordService.java index 92bc1ba6..bbab750f 100644 --- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/mybatis/MallRefundRecordService.java +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/mybatis/MallRefundRecordService.java @@ -3,10 +3,14 @@ package cc.hiver.mall.service.mybatis; import cc.hiver.mall.entity.MallRefundRecord; import com.baomidou.mybatisplus.extension.service.IService; +import java.util.List; + /** * 退款记录 Service 接口 */ public interface MallRefundRecordService extends IService { void create(MallRefundRecord mallRefundRecord); + + List selectByLinkId(MallRefundRecord mallRefundRecord); } 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 10bd3b06..8d6a2e2e 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 @@ -133,7 +133,7 @@ public class MallDeliveryOrderServiceImpl extends ServiceImpl uw = new LambdaUpdateWrapper<>(); uw.eq(MallDeliveryOrder::getId, deliveryId) .set(MallDeliveryOrder::getStatus, STATUS_WAIT_PICKUP) - .set(MallDeliveryOrder::getWorkerId, workerId).set(MallDeliveryOrder::getWorkerName, workerName) + .set(MallDeliveryOrder::getWorkerId, workerId).set(MallDeliveryOrder::getWorkerName, workerName).set(MallDeliveryOrder::getWorkerPhone, workerPhone) .set(MallDeliveryOrder::getAcceptTime, new Date()); MallOrder order = mallOrderService.getById(delivery.getOrderId()); @@ -249,13 +249,22 @@ public class MallDeliveryOrderServiceImpl extends ServiceImpl 已完成 - if (StringUtils.isNotBlank(delivery.getOrderId())) { - LambdaUpdateWrapper oUw = new LambdaUpdateWrapper<>(); - oUw.eq(MallOrder::getId, delivery.getOrderId()) - .set(MallOrder::getStatus, ORDER_STATUS_DONE); - mallOrderService.update(oUw); + //如果是有groupId证明是面对面配送,需要更新所有子订单状态为完成 + if(StringUtils.isNotBlank(delivery.getGroupId())){ + MallOrderGroup group = mallOrderGroupMapper.selectById(delivery.getGroupId()); + List orderIdList = Arrays.asList(group.getGroupOrderIds().split(",")); + + LambdaUpdateWrapper oqw = new LambdaUpdateWrapper<>(); + oqw.in(MallOrder::getId, orderIdList).set(MallOrder::getStatus,ORDER_STATUS_DONE); + mallOrderService.update(oqw); + }else{ + // 同步订单状态 -> 已完成 + if (StringUtils.isNotBlank(delivery.getOrderId())) { + LambdaUpdateWrapper oUw = new LambdaUpdateWrapper<>(); + oUw.eq(MallOrder::getId, delivery.getOrderId()) + .set(MallOrder::getStatus, ORDER_STATUS_DONE); + mallOrderService.update(oUw); + } } } 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 387a62ed..add7c0bf 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 @@ -20,6 +20,8 @@ import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.sql.Timestamp; +import java.time.LocalDateTime; +import java.time.ZoneId; import java.util.Arrays; import java.util.Date; import java.util.List; @@ -168,6 +170,13 @@ public class MallOrderGroupServiceImpl extends ServiceImpl duw = new LambdaUpdateWrapper<>(); duw.eq(MallDeliveryOrder::getOrderId, orderId) - .set(MallDeliveryOrder::getStatus, 0).set(MallDeliveryOrder::getCreateTime, createTime); + .set(MallDeliveryOrder::getStatus, 0).set(MallDeliveryOrder::getCreateTime, createTime).set(MallDeliveryOrder::getMustFinishTime, mustFinishTime); mallDeliveryOrderMapper.update(null, duw); } else { String latestSeq = merchantOrderSeqUtil.generateOrderSequence(order.getShopId(), 2); @@ -414,7 +426,7 @@ public class MallOrderServiceImpl extends ServiceImpl 改为待成团 updateOrderStatus(orderId, STATUS_WAIT_GROUP); @@ -469,12 +481,12 @@ public class MallOrderServiceImpl extends ServiceImpl= 1) { - applyMerchantRefund(order, "用户申请取消订单退款"); + applyMerchantRefund(delivery.getWorkerId(),order, "用户申请取消订单退款",refundType,refundTypeStatus); } // 10分钟冷却期 if (group.getSuccessTime() != null) { @@ -686,14 +698,14 @@ public class MallOrderServiceImpl extends ServiceImpl= 1) { - // 配送员已接单 → 走商家同意流程 - applyMerchantRefund(order, "用户申请取消订单,待商家同意"); + // 配送员已接单 → 走商家或者配送员同意流程 + applyMerchantRefund(delivery.getWorkerId(),order, "用户申请取消订单,待同意", refundType, refundTypeStatus); } else { // 未接单 → 直接取消并退款 cancelDeliveryOrderByOrderId(order.getId()); @@ -775,12 +787,12 @@ public class MallOrderServiceImpl extends ServiceImpl gq2 = new LambdaQueryWrapper<>(); @@ -901,6 +913,22 @@ public class MallOrderServiceImpl extends ServiceImpl rq = new LambdaQueryWrapper<>(); + rq.eq(MallRefundRecord::getOrderId, orderId) + .last("LIMIT 1"); + MallRefundRecord sallRefundRecord = mallRefundRecordMapper.selectOne(rq); + if(sallRefundRecord != null){ + if(sallRefundRecord.getRefundType() == 1){ + //售后商品详情 + sallRefundRecord.setItems(mallReturnOrderGoodsMapper.selectList(new LambdaQueryWrapper() + .eq(MallReturnOrderGoods::getOrderId, orderId))); + + } + } + vo.setMallRefundRecord(sallRefundRecord); + } return vo; } @@ -1122,17 +1150,36 @@ public class MallOrderServiceImpl extends ServiceImpl { + for(MallReturnOrderGoods item : mallRefundRecord.getItems()){ mallReturnOrderGoodsMapper.insert(item); - }); + } } + } + @Override + public List selectByLinkId(MallRefundRecord mallRefundRecord) { + LambdaUpdateWrapper uw = new LambdaUpdateWrapper<>(); + uw.eq(MallRefundRecord::getLinkId, mallRefundRecord.getLinkId()).eq(MallRefundRecord::getStatus, mallRefundRecord.getStatus()); + List mallRefundRecords = this.list(uw); + return mallRefundRecords; } } diff --git a/hiver-modules/hiver-mall/src/main/resources/mapper/MallRefundRecordMapper.xml b/hiver-modules/hiver-mall/src/main/resources/mapper/MallRefundRecordMapper.xml index fe203d42..14c000c5 100644 --- a/hiver-modules/hiver-mall/src/main/resources/mapper/MallRefundRecordMapper.xml +++ b/hiver-modules/hiver-mall/src/main/resources/mapper/MallRefundRecordMapper.xml @@ -15,6 +15,7 @@ + diff --git a/hiver-modules/hiver-social/src/main/java/cc/hiver/social/controller/WechatController.java b/hiver-modules/hiver-social/src/main/java/cc/hiver/social/controller/WechatController.java index d99904cf..4747b6c8 100644 --- a/hiver-modules/hiver-social/src/main/java/cc/hiver/social/controller/WechatController.java +++ b/hiver-modules/hiver-social/src/main/java/cc/hiver/social/controller/WechatController.java @@ -8,6 +8,7 @@ import cc.hiver.core.common.redis.RedisTemplateHelper; 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.config.properties.HiverTokenProperties; import cc.hiver.core.entity.User; import cc.hiver.core.service.UserService; import cc.hiver.mall.service.mybatis.CustomerService; @@ -20,6 +21,7 @@ import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.http.HttpUtil; import com.google.gson.Gson; +import com.google.gson.GsonBuilder; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import io.swagger.annotations.Api; @@ -99,9 +101,15 @@ public class WechatController { @Autowired private CustomerService customerService; + @Autowired + private HiverTokenProperties tokenProperties; + @Autowired private WechatPhoneService wechatPhoneService; + @Autowired + private RedisTemplateHelper redisTemplateHelper; + /** * 微信认证服务器地址 */ @@ -143,7 +151,11 @@ public class WechatController { u.setUsername(phoneNumber); userService.update(u); // 删除缓存 - //redisTemplate.delete(USER + u.getUsername()); + redisTemplate.delete("username::" + u.getUsername()); + final String key = "username::" + u.getUsername(); + // 缓存 + final Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd hh:mm:ss").create(); + redisTemplateHelper.set(key, gson.toJson(u), tokenProperties.getSaveLoginTime(), TimeUnit.DAYS); return ResultUtil.data(phoneNumber); } else { return ResultUtil.error(401,"获取手机号失败");