diff --git a/hiver-admin/test-output/test-report.html b/hiver-admin/test-output/test-report.html index e916a29e..efceba0a 100644 --- a/hiver-admin/test-output/test-report.html +++ b/hiver-admin/test-output/test-report.html @@ -35,7 +35,7 @@ Hiver
  • -四月 27, 2026 15:09:48 +五月 06, 2026 18:07:29
  • @@ -84,7 +84,7 @@

    passTest

    -

    15:09:49 下午 / 0.015 secs

    +

    18:07:30 下午 / 0.016 secs

    @@ -92,9 +92,9 @@
    #test-id=1
    passTest
    -04.27.2026 15:09:49 -04.27.2026 15:09:49 -0.015 secs +05.06.2026 18:07:30 +05.06.2026 18:07:30 +0.016 secs
    @@ -104,7 +104,7 @@ Pass - 15:09:49 + 18:07:30 Test passed @@ -128,13 +128,13 @@

    Started

    -

    四月 27, 2026 15:09:48

    +

    五月 06, 2026 18:07:29

    Ended

    -

    四月 27, 2026 15:09:49

    +

    五月 06, 2026 18:07:30

    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 a94723a8..3dc6c4f1 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 @@ -112,7 +112,7 @@ public class User extends HiverBaseEntity { @ApiModelProperty(value = "瀵煎叆鏁版嵁鏃朵娇鐢") private Integer defaultRole; - @ApiModelProperty(value = "閭璇蜂汉ID") + @ApiModelProperty(value = "鏄惁涓烘柊鐢ㄦ埛 no 涓嶆槸") private String inviteCode; @ApiModelProperty(value = "璁惧缂栧彿 鎺ㄩ佺敤") @@ -137,4 +137,7 @@ public class User extends HiverBaseEntity { @ApiModelProperty(value = "寰俊鏄电О") private String wechatName; + + @ApiModelProperty(value = "閭璇蜂汉Id") + private String inviterId; } diff --git a/hiver-core/src/main/java/cc/hiver/core/vo/WechatVo.java b/hiver-core/src/main/java/cc/hiver/core/vo/WechatVo.java index bb15a0dd..3677d9cf 100644 --- a/hiver-core/src/main/java/cc/hiver/core/vo/WechatVo.java +++ b/hiver-core/src/main/java/cc/hiver/core/vo/WechatVo.java @@ -14,8 +14,8 @@ public class WechatVo { @ApiModelProperty(value = "grantType") private String grantType = "authorization_code"; - @ApiModelProperty(value = "customId") - private String customId; + @ApiModelProperty(value = "inviterId") + private String inviterId; @ApiModelProperty(value = "wechatName") private String wechatName; 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 3faf9e62..0839cf66 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 @@ -642,6 +642,10 @@ public class UserController { final String encryptPass = new BCryptPasswordEncoder().encode("123456"); wechatUser.setPassword(encryptPass); wechatUser.setType(UserConstant.USER_TYPE_NORMAL); + //璁剧疆閭璇蜂汉 + if(wechatVo.getInviterId() != null){ + wechatUser.setInviterId(wechatVo.getInviterId()); + } wechatUser = userService.save(wechatUser); // 璁剧疆鐢ㄦ埛瑙掕壊 // 榛樿瑙掕壊 @@ -653,10 +657,10 @@ public class UserController { } } // 鏇存柊瀹㈡埛淇℃伅锛岀粦瀹氱櫥褰曠敤鎴 - customerService.updateUserId(wechatVo.getCustomId(), wechatUser.getId()); + //customerService.updateUserId(wechatVo.getCustomId(), wechatUser.getId()); // 杩斿洖褰撳墠鐧诲綍浜虹殑淇℃伅 resultMap.put("msg", "鏂板鐢ㄦ埛淇℃伅锛屽苟缁戝畾鎴愬姛锛"); - resultMap.put("customId", wechatVo.getCustomId()); + //resultMap.put("customId", wechatVo.getCustomId()); } catch (Exception e) { return ResultUtil.error(e.getMessage()); } diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/MallCouponController.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/MallCouponController.java index e6e3426f..b83628f1 100644 --- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/MallCouponController.java +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/MallCouponController.java @@ -47,6 +47,7 @@ public class MallCouponController { @PostMapping("/add") @ApiOperation(value = "娣诲姞/鍙戣浼樻儬鍒") public Result addCoupon(@RequestBody MallCoupon coupon) { + coupon.setRemainCount(coupon.getTotalCount()); mallCouponService.save(coupon); return ResultUtil.success("鍙戣鎴愬姛"); } 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 2177e124..35cd46b5 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 @@ -171,9 +171,17 @@ public class MallDeliveryOrderController { */ @PostMapping("/accept") @ApiOperation(value = "閰嶉佸憳鎺ュ崟", notes = "鎶㈠崟澶у巺鍗曟垨鎸囨淳鍗曞潎閫氳繃姝ゆ帴鍙f帴鍗") - public Result accept(@RequestParam String deliveryId, + public Result accept(@RequestParam String deliveryId,@RequestParam String geolocation, @RequestParam String workerId,@RequestParam String workerPhone,@RequestParam String workerName,@RequestParam String regionId,@RequestParam String groupId) { try { + Worker worker1 = workerService.findByWorkerId(workerId); + worker1.setGeolocation(geolocation); + workerService.update(worker1); + WorkerRedisVo workerRedisVo = workerRedisCacheUtil.get(regionId, workerId); + if(workerRedisVo != null){ + workerRedisVo.setWorker(worker1); + } + workerRedisCacheUtil.update(regionId, workerRedisVo); if(StrUtil.isBlank(workerId)){ //褰撳墠浜烘病鏈夋敞鍐屽吋鑱岋紝鍏堣祴浜堝吋鑱岃韩浠 final User user = securityUtil.getCurrUser(); @@ -226,9 +234,17 @@ public class MallDeliveryOrderController { */ @PostMapping("/arriveShop") @ApiOperation("閰嶉佸憳鍒板簵锛") - public Result arriveShop(@RequestParam String deliveryId, - @RequestParam String workerId) { + public Result arriveShop(@RequestParam String deliveryId,@RequestParam String geolocation, + @RequestParam String regionId,@RequestParam String workerId) { try { + Worker worker1 = workerService.findByWorkerId(workerId); + worker1.setGeolocation(geolocation); + workerService.update(worker1); + WorkerRedisVo workerRedisVo = workerRedisCacheUtil.get(regionId, workerId); + if(workerRedisVo != null){ + workerRedisVo.setWorker(worker1); + } + workerRedisCacheUtil.update(regionId, workerRedisVo); mallDeliveryOrderService.arriveShop(deliveryId, workerId); return ResultUtil.success("鍒板簵鎴愬姛"); } catch (Exception e) { @@ -257,9 +273,17 @@ public class MallDeliveryOrderController { */ @PostMapping("/pickup") @ApiOperation("閰嶉佸憳鍙栬揣锛堝緟鍙栬揣 -> 閰嶉佷腑锛") - public Result pickup(@RequestParam String deliveryId, - @RequestParam String workerId) { + public Result pickup(@RequestParam String deliveryId,@RequestParam String geolocation, + @RequestParam String regionId,@RequestParam String workerId) { try { + Worker worker1 = workerService.findByWorkerId(workerId); + worker1.setGeolocation(geolocation); + workerService.update(worker1); + WorkerRedisVo workerRedisVo = workerRedisCacheUtil.get(regionId, workerId); + if(workerRedisVo != null){ + workerRedisVo.setWorker(worker1); + } + workerRedisCacheUtil.update(regionId, workerRedisVo); mallDeliveryOrderService.workerPickup(deliveryId, workerId); return ResultUtil.success("鍙栬揣鎴愬姛"); } catch (Exception e) { @@ -273,9 +297,17 @@ public class MallDeliveryOrderController { */ @PostMapping("/complete") @ApiOperation("閰嶉佸憳纭閫佽揪锛堥厤閫佷腑 -> 宸查佽揪锛") - public Result complete(@RequestParam String deliveryId, - @RequestParam String workerId) { + public Result complete(@RequestParam String deliveryId,@RequestParam String geolocation, + @RequestParam String regionId,@RequestParam String workerId) { try { + Worker worker1 = workerService.findByWorkerId(workerId); + worker1.setGeolocation(geolocation); + workerService.update(worker1); + WorkerRedisVo workerRedisVo = workerRedisCacheUtil.get(regionId, workerId); + if(workerRedisVo != null){ + workerRedisVo.setWorker(worker1); + } + workerRedisCacheUtil.update(regionId, workerRedisVo); mallDeliveryOrderService.workerComplete(deliveryId, workerId); return ResultUtil.success("閫佽揪鎴愬姛"); } catch (Exception e) { @@ -291,8 +323,12 @@ public class MallDeliveryOrderController { @ApiOperation("閰嶉佸憳鎷掔粷鎺ユ寚娲惧崟") public Result reject(@RequestParam String deliveryId) { try { - mallDeliveryOrderService.rejectDelivery(deliveryId); - return ResultUtil.success("宸叉嫆缁"); + Integer result = mallDeliveryOrderService.rejectDelivery(deliveryId); + if(result == -1){ + return ResultUtil.error("浠婃棩鎷掑崟娆℃暟宸茶揪涓婇檺锛屾棤娉曠户缁嫆鍗曪紒"); + }else{ + return ResultUtil.success("鎷掑崟鎴愬姛锛佷粖鏃ュ墿浣欐嫆鍗曟鏁帮細" + result); + } } 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/ReturnCommissionController.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/ReturnCommissionController.java index d8a93fe3..a0a84b25 100644 --- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/ReturnCommissionController.java +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/ReturnCommissionController.java @@ -8,7 +8,7 @@ import cc.hiver.mall.entity.ReturnCommission; import cc.hiver.mall.entity.Shop; import cc.hiver.mall.service.ShopService; import cc.hiver.mall.service.mybatis.ReturnCommissionService; -import cc.hiver.mall.utils.AliPayUtil; +import cc.hiver.mall.utils.AliPayNewUtil; import com.alipay.api.AlipayApiException; import com.alipay.api.response.AlipayFundTransUniTransferResponse; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -98,7 +98,7 @@ public class ReturnCommissionController { @RequestMapping(value = "/handleReturn", method = RequestMethod.POST) @ApiOperation("鎻愮幇澶勭悊") public Result handleReturn(@RequestBody ReturnCommission returnCommission) { - final String shopId = securityUtil.getShopId(); + //final String shopId = securityUtil.getShopId(); if(returnCommission.getCommission() == null ){ return ResultUtil.error("鎻愮幇閲戦涓嶈兘涓虹┖锛"); @@ -115,9 +115,10 @@ public class ReturnCommissionController { boolean result = false; String aliResult = ""; - final Shop shop = shopService.findById(shopId); - if(shop.getYearFee() == null || shop.getYearFee().compareTo(BigDecimal.ZERO) == 0){ - return ResultUtil.error("搴楅摵澶勪簬璇曠敤鏈燂紝涓嶈兘鎻愮幇锛"); + final Shop shop = shopService.findById(returnCommission.getShopId()); + if (shop.getBalance().compareTo(returnCommission.getCommission()) < 0) { + // 濡傛灉鎻愮幇閲戦澶т簬杩斾剑浣欓锛屽垯涓嶅厑璁告彁鐜 + return ResultUtil.error("鎻愮幇閲戦涓嶅彲澶т簬浣i噾浣欓锛"); } //鏀粯瀹濇埛鍚嶏紙濮撳悕锛 final String name = returnCommission.getAliName(); //shop.getAliName(); @@ -134,7 +135,7 @@ public class ReturnCommissionController { return ResultUtil.error("鎻愮幇閲戦涓嶅彲澶т簬浣i噾浣欓锛"); }*/ try { - final AlipayFundTransUniTransferResponse payResult = AliPayUtil.pay(phoneNumber, name, String.valueOf(commission), returnCommission.getId()); + final AlipayFundTransUniTransferResponse payResult = AliPayNewUtil.pay(phoneNumber, name, String.valueOf(commission), returnCommission.getId()); if ("SUCCESS".equals(payResult.getStatus())) { returnCommission.setStatus("1"); aliResult = "鏀粯瀹濊浆璐︽垚鍔"; 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 5e582e0b..464e9536 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 @@ -397,6 +397,7 @@ public class WorkerController { matchVO.setRebateAmount(w.getRebateAmount()); matchVO.setHighFloorFee(w.getHighFloorFee()); matchVO.setOrderBkge(matchedRule.getOrderBkge()); + matchVO.setRemark(matchedRule.getRemark()); matchVO.setOrderWaitCount(orderWaitCount); matchVO.setOrderGetCount(orderGetCount); matchVO.setOrderPutCount(orderPutCount); diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/entity/MallCoupon.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/entity/MallCoupon.java index 77ca5b30..2e308352 100644 --- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/entity/MallCoupon.java +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/entity/MallCoupon.java @@ -32,6 +32,9 @@ public class MallCoupon extends HiverBaseEntity { @ApiModelProperty(value = "浼樻儬鍒哥被鍨嬶細1-婊″噺鍒革紝2-鏃犻棬妲涚洿鍑忓埜") private Integer type; + @ApiModelProperty(value = "瑙勫垯绫诲瀷 0 鏂扮敤鎴 1 鍏朵粬") + private Integer ruleType; + @ApiModelProperty(value = "浣跨敤闂ㄦ閲戦") private BigDecimal minAmount; diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/mq/OrderAsyncProducer.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/mq/OrderAsyncProducer.java index 1f738d2e..6c27cecb 100644 --- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/mq/OrderAsyncProducer.java +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/mq/OrderAsyncProducer.java @@ -39,6 +39,28 @@ public class OrderAsyncProducer { rabbitTemplate.convertAndSend(OrderQueueConfig.ORDER_DIRECT_EXCHANGE, OrderQueueConfig.ASYNC_CACHE_ROUTING, JSON.toJSONString(params)); } + /** + * 鍙戦侀娆/鍞悗鐢宠瓒呮椂寤舵椂娑堟伅锛堥粯璁1灏忔椂鍚庤嚜鍔ㄥ悓鎰忥級 + * @param refundId 閫娆捐褰旾D锛圡allRefundRecord.id锛 + * @param orderId 璁㈠崟ID锛堢敤浜庢棩蹇楄拷韪級 + */ + public void sendRefundDelayMessage(String refundId, String orderId) { + Map msgBody = new HashMap<>(); + msgBody.put("refundId", refundId); + msgBody.put("orderId", orderId); + msgBody.put("delayType", "Refund_Auto_Agree_1h"); + msgBody.put("timestamp", System.currentTimeMillis()); + + final long delayMillis = 60 * 60 * 1000L; // 1灏忔椂 + rabbitTemplate.convertAndSend(OrderQueueConfig.DELAY_EXCHANGE, OrderQueueConfig.DELAY_ROUTING, + JSON.toJSONString(msgBody), + message -> { + message.getMessageProperties().setExpiration(String.valueOf(delayMillis)); + return message; + }); + log.info("銆愰娆綧Q銆戝凡鍙戦侀娆捐秴鏃跺欢鏃舵秷鎭紝1灏忔椂鍚庤嚜鍔ㄥ鐞嗭紝refundId={}, orderId={}", refundId, orderId); + } + /** * 鍙戦佸欢杩(姝讳俊)瓒呮椂娑堟伅 * @param orderId 璁㈠崟ID diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/mq/OrderDelayConsumer.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/mq/OrderDelayConsumer.java index 621f8ec6..0d63ea99 100644 --- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/mq/OrderDelayConsumer.java +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/mq/OrderDelayConsumer.java @@ -8,7 +8,9 @@ import cc.hiver.mall.dao.mapper.MallOrderMapper; import cc.hiver.mall.dao.mapper.ShopMapper; import cc.hiver.mall.entity.MallDeliveryOrder; import cc.hiver.mall.entity.MallOrder; +import cc.hiver.mall.entity.MallRefundRecord; import cc.hiver.mall.entity.Shop; +import cc.hiver.mall.service.mybatis.MallRefundRecordService; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -31,7 +33,10 @@ public class OrderDelayConsumer { @Autowired private MallOrderMapper mallOrderMapper; - + + @Autowired + private MallRefundRecordService mallRefundRecordService; + @Autowired private ShopMapper shopMapper; @@ -41,6 +46,12 @@ public class OrderDelayConsumer { @Autowired private JPushServiceImpl jPushService; + @Autowired + private cc.hiver.mall.dao.mapper.MallRefundRecordMapper mallRefundRecordMapper; + + @Autowired + private cc.hiver.mall.utils.RefundOrderCacheUtil refundOrderCacheUtil; + @RabbitListener(queues = OrderQueueConfig.DEAD_QUEUE) public void processDelayMessage(String messageBody) { log.info("銆愯鍗曞欢鏃跺鐞嗐戞帴鏀跺埌姝讳俊瓒呮椂娑堟伅: {}", messageBody); @@ -62,6 +73,10 @@ public class OrderDelayConsumer { case "Shop_Cook_Timeout": handleShopCookTimeout(orderId); break; + case "Refund_Auto_Agree_1h": + String refundId = msg.getString("refundId"); + handleRefundAutoAgree(refundId); + break; default: log.warn("銆愯鍗曞欢鏃跺鐞嗐戞湭鐭ョ殑寤惰繜绫诲瀷: {}", delayType); } @@ -133,4 +148,44 @@ public class OrderDelayConsumer { qw.eq(MallDeliveryOrder::getOrderId, orderId); return mallDeliveryOrderMapper.selectOne(qw); } + + /** + * 閫娆/鍞悗鐢宠1灏忔椂鏈鐞嗭紝鑷姩榛樿鍚屾剰 + * + * 骞傜瓑鍒ゆ柇锛歴tatus == 0锛堥娆惧緟鍚屾剰锛 鎴 status == 3锛堝敭鍚庣敵璇蜂腑锛夛紝鎵嶈Е鍙戣嚜鍔ㄥ鐞嗭紱 + * 濡傛灉宸蹭富鍔ㄥ鐞嗭紙鍟嗗/閰嶉佸憳鎿嶄綔杩囷級鍒 status 宸插彉锛岀洿鎺ヨ烦杩囥 + */ + private void handleRefundAutoAgree(String refundId) { + if (org.apache.commons.lang3.StringUtils.isBlank(refundId)) { + log.warn("銆愰娆捐秴鏃惰嚜鍔ㄥ鐞嗐憆efundId 涓虹┖锛岃烦杩"); + return; + } + MallRefundRecord record = mallRefundRecordMapper.selectById(refundId); + if (record == null) { + log.warn("銆愰娆捐秴鏃惰嚜鍔ㄥ鐞嗐戦娆捐褰曚笉瀛樺湪, refundId={}", refundId); + return; + } + // 骞傜瓑鍒ゆ柇锛0=閫娆惧緟鍟嗗/閰嶉佸憳鍚屾剰锛3=鍞悗鐢宠涓 + if (record.getStatus() != 0 && record.getStatus() != 3) { + log.info("銆愰娆捐秴鏃惰嚜鍔ㄥ鐞嗐戝凡琚富鍔ㄥ鐞嗭紝璺宠繃銆 refundId={}, status={}", refundId, record.getStatus()); + return; + } + MallRefundRecord mallRefundRecord1 = new MallRefundRecord(); + MallOrder order = mallOrderMapper.selectById(record.getOrderId()); + mallRefundRecord1.setId(record.getId()); + mallRefundRecord1.setLinkId(record.getLinkId()); + mallRefundRecord1.setOrderId(record.getOrderId()); + if(record.getStatus() < 3){ + mallRefundRecord1.setStatus(1); + }else if(record.getStatus() >= 3){ + mallRefundRecord1.setStatus(4); + } + mallRefundRecord1.setDeliveryType(order.getDeliveryType()); + mallRefundRecord1.setOrderType(order.getOrderType()); + mallRefundRecord1.setRefundAmount(record.getRefundAmount()); + mallRefundRecord1.setRefundType(record.getRefundType()); + mallRefundRecord1.setRefundTypeStatus(record.getRefundTypeStatus()); + mallRefundRecordService.updateStatus(mallRefundRecord1); + log.info("銆愰娆捐秴鏃惰嚜鍔ㄥ鐞嗐戣秴鏃1灏忔椂鏈鐞嗭紝鑷姩鍚屾剰閫娆/鍞悗銆 refundId={}, orderId={}", refundId, record.getOrderId()); + } } diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/query/MallCouponQuery.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/query/MallCouponQuery.java index b58198aa..c15365e1 100644 --- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/query/MallCouponQuery.java +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/query/MallCouponQuery.java @@ -30,6 +30,9 @@ public class MallCouponQuery extends HiverBasePageQuery { @ApiModelProperty(value = "浼樻儬鍒哥被鍨嬶細1-婊″噺鍒革紝2-鏃犻棬妲涚洿鍑忓埜") private Integer type; + @ApiModelProperty(value = "瑙勫垯绫诲瀷 0 鏂扮敤鎴 1 鍏朵粬") + private Integer ruleType; + @ApiModelProperty(value = "浣跨敤闂ㄦ閲戦") private BigDecimal minAmount; diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/vo/WorkerMatchVO.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/vo/WorkerMatchVO.java index 78afe87b..f12bca7c 100644 --- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/vo/WorkerMatchVO.java +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/vo/WorkerMatchVO.java @@ -25,6 +25,9 @@ public class WorkerMatchVO { @ApiModelProperty("澶村儚") private String icon; + @ApiModelProperty("澶囨敞") + private String remark; + @ApiModelProperty("瀹氫綅") private String geolocation; 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 c0a70fa4..4ee8f009 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 @@ -53,7 +53,7 @@ public interface MallDeliveryOrderService extends IService { /** * 鎷掔粷閰嶉佸崟 */ - void rejectDelivery(String deliveryId); + Integer rejectDelivery(String deliveryId); /** * 缁熻鎶㈠崟澶у巺鏈鎺ュ崟鐨勬暟閲 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 4b3f8263..6c8f325b 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 @@ -78,6 +78,9 @@ public class MallDeliveryOrderServiceImpl extends ServiceImpl uw = new LambdaUpdateWrapper<>(); - uw.eq(MallDeliveryOrder::getId, deliveryId) - .set(MallDeliveryOrder::getWorkerId, null).set(MallDeliveryOrder::getWorkerName, (String)null) - .set(MallDeliveryOrder::getWorkerPhone, (String)null); - this.update(uw); - //鏇存柊鎶㈠崟澶у巺缂撳瓨 - MallDeliveryOrder delivery1 = waitOrderCacheUtil.get(delivery.getRegionId(), deliveryId); - if(delivery1 != null){ - delivery1.setWorkerId(null); - delivery1.setWorkerName(null); - delivery1.setWorkerPhone(null); - waitOrderCacheUtil.update(delivery1.getRegionId(), delivery1); + Integer result = deliveryRejectUtil.handleRejectOrder(delivery.getWorkerId(), delivery.getOrderId()); + if(result == -1){ + return -1; + }else{ + if (delivery == null) throw new RuntimeException("閰嶉佸崟涓嶅瓨鍦"); + LambdaUpdateWrapper uw = new LambdaUpdateWrapper<>(); + uw.eq(MallDeliveryOrder::getId, deliveryId) + .set(MallDeliveryOrder::getWorkerId, null).set(MallDeliveryOrder::getWorkerName, (String)null) + .set(MallDeliveryOrder::getWorkerPhone, (String)null); + this.update(uw); + //鏇存柊鎶㈠崟澶у巺缂撳瓨 + MallDeliveryOrder delivery1 = waitOrderCacheUtil.get(delivery.getRegionId(), deliveryId); + if(delivery1 != null){ + delivery1.setWorkerId(null); + delivery1.setWorkerName(null); + delivery1.setWorkerPhone(null); + waitOrderCacheUtil.update(delivery1.getRegionId(), delivery1); + } + //缁欑敤鎴峰彂閫佺煭淇¢氱煡琚嫆缁 + smsUtil.sendCode(delivery.getReceiverPhone(), null, SettingConstant.SMS_TYPE.SMS_REJECT_ORDER.name()); + return result; } - //缁欑敤鎴峰彂閫佺煭淇¢氱煡琚嫆缁 - smsUtil.sendCode(delivery.getReceiverPhone(), null, SettingConstant.SMS_TYPE.SMS_REJECT_ORDER.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 f378de74..56f89638 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 @@ -1612,6 +1612,8 @@ public class MallOrderServiceImpl extends ServiceImpl transferSceneReportInfos = new ArrayList(); + TransferSceneReportInfo transferSceneReportInfos0 = new TransferSceneReportInfo(); + transferSceneReportInfos0.setInfoType("缁撶畻娆鹃」鍚嶇О"); + transferSceneReportInfos0.setInfoContent("涓氬姟缁撶畻"); + transferSceneReportInfos.add(transferSceneReportInfos0); + model.setTransferSceneReportInfos(transferSceneReportInfos); + + // 璁剧疆杞处涓氬姟璇锋眰鐨勬墿灞曞弬鏁 + model.setBusinessParams("{\"payer_show_name_use_alias\":\"true\"}"); + + request.setBizModel(model); + AlipayFundTransUniTransferResponse response = alipayClient.certificateExecute(request); + System.out.println(response.getBody()); + + if (response.isSuccess()) { + System.out.println("璋冪敤鎴愬姛"); + } else { + System.out.println("璋冪敤澶辫触"); + // sdk鐗堟湰鏄"4.38.0.ALL"鍙婁互涓,鍙互鍙傝冧笅闈㈢殑绀轰緥鑾峰彇璇婃柇閾炬帴 + // String diagnosisUrl = DiagnosisUtils.getDiagnosisUrl(response); + // System.out.println(diagnosisUrl); + } + return response; + } + + private static AlipayConfig getAlipayConfig() { + String privateKey = "MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCE5qCd8aPXAVtlvYupJkZSin4KkDzDdxsOwXtXACJW1Oyx8Q0M2i0PAfALCe8PPinM4mZzUzp57yw/Lipyu7usLTXiPMtyutGvqHshYE/rC4rBT991hq/1fiIOjRrB9RuZEIjS7BtwDYsZh+vfggiR5FXn4VeSSpXYuVROIAt9irpMYxuAfU6QXc1p6afrBWUCPp/LSES4XfP6of0nmjbxfqorfXXkjPultGJtjyH6C9GPshCHkRYgmbOsp89A565qJ9CnQOYv/1hpHf1wj76oaAj9vPZis/w2J+YwPODa29VMsHEsKPUKIc32xwPW68caS/WF1YHKnXBLSr/KytLLAgMBAAECggEADcTvQy3z8aS8WXAn9iB3DLo4kNOc2AuRDBhTtRHYfPKWi2EUHw7DuFhVDG+9CvE/13BlePFYj6WOCgW4dCarLQ2KFaSC16Ivc2mbSDv4S7voZlrmJgEMXfzxflx0N0Az2cnywxefSB6/GKgSchfA14y2sc2RCyEbIVciOu3rAtikeAQClQgr1XB/UIzMFEAESQaNgYkoRKjcfoSPhgixTxuCCVjEVv+me7kT35knzCvNKhzi/MH4X0XjPLHNf5Gz6bPvFdAEPbCrgbMgjflwVefiuCR4kbFehcVea0qnmQVfocdbRK00IiduWTvgJeKrMaCDYJzSCNUwjyAcWD1+gQKBgQC4htY/wx1BZDmvKo+3xc59z6YvcJBO2ov0SSltKtKxOiTcbWBlcJq6y5PFsVo5oLed6A8fcHNNPVA94TxCCYTW1gRlDjSIcgQWM864ceScvPuFay/kRu+CC5AmoEg3Oo4hzKYK/jb0b6TzJ1EYh2mLaGi/ZL4guHdvfsINeGfqqwKBgQC4YLc2o47rtRBotUfRMJjVg3kzf8r4SU4luITtZE1kF9ahmTXPFeqoLjh0mB/RJkt61yPEdsTqPtGfUiEx7LCarH/86bCr8rsLOVuNCltEVDp/MqqaSKLDV3Z8zdKfFOsfSS8U949+LVFTvCYDX7CkWIstCcihyA34y01fcEC4YQKBgDKn2VMBthtIb0l17qQtaiVBhsaJKSRsfHUgTH4KfnJmms3kPM08H03eKv/fUvx08VMo7FXeIdj3VvrVxRv/zvbHI8e2IZe/bP3HVR1vLqoUexvCNBB/pKpXkEf6QjjfGzuOGZr09JMfvvF9Ppb0PXYmwHKiLkt/OFJkQtM91ZEnAoGARd9BD0/EZcbkRQoOAVStVpzQXZfcT2NYXisjFOOiAICYMf1hyuy/VKTPeD/+LsCYciD9yQJJdYwA3KO/OLA97R/aEPpunXsLLyG5dCWsmKRi1rlYtcc5B1Yp7PoDC45d3Clb0lJO6r45x8XRkg29X0q+036VrdmmkdZZqAVeQYECgYA8LixZQDsgC7gwud60xmP8EIy9LHOJezA305zDcvXkIn3gyoPxedA+ZpjjxWYbZcbo7LTn0Wb36cEbUP/9eB5wSODs186wRmShb9F3uc8SgbFYcDmIdKx0LBQ5qOkKUwrI3yitrGHDP02zTsbpYWQ8i0yfi0Di6a+h9iqyP8slog=="; + AlipayConfig alipayConfig = new AlipayConfig(); + alipayConfig.setPrivateKey(privateKey); + alipayConfig.setServerUrl("https://openapi.alipay.com/gateway.do"); + alipayConfig.setAppId("2021005179691569"); + alipayConfig.setCharset("UTF-8"); + alipayConfig.setSignType("RSA2"); + alipayConfig.setFormat("json"); + alipayConfig.setAppCertPath("/home/mingzhu/alipay/appCertPublicKey_2021005179691569.crt"); + alipayConfig.setAlipayPublicCertPath("/home/mingzhu/alipay/alipayCertPublicKey_RSA2.crt"); + alipayConfig.setRootCertPath("/home/mingzhu/alipay/alipayRootCert.crt"); + return alipayConfig; + } +} diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/utils/AliPayUtil.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/utils/AliPayUtil.java index 25fba6f1..07039f43 100644 --- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/utils/AliPayUtil.java +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/utils/AliPayUtil.java @@ -19,23 +19,23 @@ public class AliPayUtil { public static AlipayFundTransUniTransferResponse pay(String phoneNumber, String name, String transAmount, String orderNo) throws AlipayApiException { //搴旂敤绉侀挜 - String privateKey = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCPjWS3hfusQ3/w0chhZpxHM/DZtMvC+cfXs3xysaJWhVt+6uvyKhtBoYCDDCcKD5vvTx4SB0uC0U98lcusrcV9SCtzvum1gbfYBBYiuNruCb9HRRFIVVe4nn54QDcgVZseHiGdJSr49m23o+S9pTacoplaWNvdwC0B5MSP5ufjabtXYo1DeXMGGS1qgqOJxfuUG+ihs3Fpz+QAkApDd1wSytLhh9svwvC/oJMrX/uA/ZhbUqq812iPJ5bW67jY2dzDCPNO97Gk8f5zPHirsqowQjwAXICn91fwEMb7BO+K8iJm6jv8iIIuB4D+4UUG8VhaK0PF88qX5lq8TwN/q7SfAgMBAAECggEAfVdg9JmJST1azePuSZV1qPoiN4UUUTcVljKC3AZcD527aRMoVzcKu4CPnF0VDUTZy9dSEz3JYfzuoYKN50WHZb+JKTQuDiyoYHYY+dJcXnGmUU1uLLFPucSx+r9fIt18Zoy6nuKgJefNnwX8qNZD2/phWjCyMWomIjwkoN1l5frNuTP0h5FAcr/bEnoHLFXXiAXtioI4ffHnQ5c8AM/z9bqw/49kJ9QOOBVSwuHgZggsbvLVKASSBKWbDoCwB+AIgYuJKzC0iXY7rfsVnxqI2+0fruca36KwCOlwWrYaWglQvGv9706r6SA5Ux2zyEMOm0TQHJNiwliblzVqb2mLAQKBgQDht/B4DYQzUItJnGpKi8dCiQPYEw+n0DMzBKV9a6L0/Aig1n6Ev42zrWq7UYEFMnLSfT/fDOaIeu/kkiTeTRwuERXm/1kjXX4yhkaF7bA//woQlHGuhyTSbhNywNNE1UCeqJ3OVy/FHa+Ro5RYXOceJR/3J4XZC4rhXeXgYlOuHwKBgQCiz4tJ/Uybc66H7ToxY52ZTYf/zjwgdg6/f8N8xxkhC5JD5GQEUU+8eShC+lxa3PcNil1GFagh4vIVANgqJPPMopq2EDNMpz2EKDvzS87VOoLsP3np9yNc+2nOhTmsrXRNOSX1B0c7W6dRuTDA/esmJB4/kBNV73ZNpdxMA6IpgQKBgQDPt0vNzvJ3nolvpkeSbmtiaWBmObRQhCJ5sq7wals+A6mVCY7IbtbiIJZ15x1KQRC1b5mVk/OaaTfWKj9Pa7qhEgwL1bSb/O+jYzoHCaMGYZdLhq/PIoLaO34ePiCt2WlsGFOQjV9ikFz/M3/SiTwO26887NwZzqtxlc1z3kiPlQKBgCtSrM7Yby0iYDvdPVHtHv+vKNRB7a/5mj0M41jtpdssOBSGzrJzbJNLbhI8ipzHFZptyhofIyk5OY+rNNoqERHP5vkxYGUyT2U+S42XC4ej1TjGP0uprqhMYkBJJSq00TDHVzlXYXYDEofljnqcVplEnSPu06ZXXRSWYQN9KAaBAoGATLuDMRsipdLujfo+CF9iyxXP2kAzRLRx6QFZ9SRu/9BLPnaiCntDENZaXYZmHSYZ13Ab8XpfK8ms75fUDg4LKEy6UyCsHv4288wtz4mjHnAFKLhQkrsimDx6byTTjVo5eF22WKVGw9tLyAzii160wmubjsU4XG5vtSwUoGYL73w="; + String privateKey = "MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCE5qCd8aPXAVtlvYupJkZSin4KkDzDdxsOwXtXACJW1Oyx8Q0M2i0PAfALCe8PPinM4mZzUzp57yw/Lipyu7usLTXiPMtyutGvqHshYE/rC4rBT991hq/1fiIOjRrB9RuZEIjS7BtwDYsZh+vfggiR5FXn4VeSSpXYuVROIAt9irpMYxuAfU6QXc1p6afrBWUCPp/LSES4XfP6of0nmjbxfqorfXXkjPultGJtjyH6C9GPshCHkRYgmbOsp89A565qJ9CnQOYv/1hpHf1wj76oaAj9vPZis/w2J+YwPODa29VMsHEsKPUKIc32xwPW68caS/WF1YHKnXBLSr/KytLLAgMBAAECggEADcTvQy3z8aS8WXAn9iB3DLo4kNOc2AuRDBhTtRHYfPKWi2EUHw7DuFhVDG+9CvE/13BlePFYj6WOCgW4dCarLQ2KFaSC16Ivc2mbSDv4S7voZlrmJgEMXfzxflx0N0Az2cnywxefSB6/GKgSchfA14y2sc2RCyEbIVciOu3rAtikeAQClQgr1XB/UIzMFEAESQaNgYkoRKjcfoSPhgixTxuCCVjEVv+me7kT35knzCvNKhzi/MH4X0XjPLHNf5Gz6bPvFdAEPbCrgbMgjflwVefiuCR4kbFehcVea0qnmQVfocdbRK00IiduWTvgJeKrMaCDYJzSCNUwjyAcWD1+gQKBgQC4htY/wx1BZDmvKo+3xc59z6YvcJBO2ov0SSltKtKxOiTcbWBlcJq6y5PFsVo5oLed6A8fcHNNPVA94TxCCYTW1gRlDjSIcgQWM864ceScvPuFay/kRu+CC5AmoEg3Oo4hzKYK/jb0b6TzJ1EYh2mLaGi/ZL4guHdvfsINeGfqqwKBgQC4YLc2o47rtRBotUfRMJjVg3kzf8r4SU4luITtZE1kF9ahmTXPFeqoLjh0mB/RJkt61yPEdsTqPtGfUiEx7LCarH/86bCr8rsLOVuNCltEVDp/MqqaSKLDV3Z8zdKfFOsfSS8U949+LVFTvCYDX7CkWIstCcihyA34y01fcEC4YQKBgDKn2VMBthtIb0l17qQtaiVBhsaJKSRsfHUgTH4KfnJmms3kPM08H03eKv/fUvx08VMo7FXeIdj3VvrVxRv/zvbHI8e2IZe/bP3HVR1vLqoUexvCNBB/pKpXkEf6QjjfGzuOGZr09JMfvvF9Ppb0PXYmwHKiLkt/OFJkQtM91ZEnAoGARd9BD0/EZcbkRQoOAVStVpzQXZfcT2NYXisjFOOiAICYMf1hyuy/VKTPeD/+LsCYciD9yQJJdYwA3KO/OLA97R/aEPpunXsLLyG5dCWsmKRi1rlYtcc5B1Yp7PoDC45d3Clb0lJO6r45x8XRkg29X0q+036VrdmmkdZZqAVeQYECgYA8LixZQDsgC7gwud60xmP8EIy9LHOJezA305zDcvXkIn3gyoPxedA+ZpjjxWYbZcbo7LTn0Wb36cEbUP/9eB5wSODs186wRmShb9F3uc8SgbFYcDmIdKx0LBQ5qOkKUwrI3yitrGHDP02zTsbpYWQ8i0yfi0Di6a+h9iqyP8slog=="; CertAlipayRequest alipayConfig = new CertAlipayRequest();//鏀粯瀹濋厤缃 alipayConfig.setPrivateKey(privateKey); alipayConfig.setServerUrl("https://openapi.alipay.com/gateway.do"); - alipayConfig.setAppId("2021004134683124");//鏀粯瀹濆垎閰嶇粰寮鍙戣呯殑搴旂敤ID 鏄庣彔蹇皬搴 + alipayConfig.setAppId("2021005179691569");//鏀粯瀹濆垎閰嶇粰寮鍙戣呯殑搴旂敤ID 鏄庣彔蹇皬搴 alipayConfig.setCharset("UTF8"); alipayConfig.setSignType("RSA2"); alipayConfig.setEncryptor(""); alipayConfig.setFormat("json"); - alipayConfig.setCertPath("/home/mingzhu/alipay/appCertPublicKey_2021004134683124.crt");//搴旂敤鍏挜璇佷功鏂囦欢璺緞锛屼緥濡傦細/foo/appCertPublicKey_2019051064521003.crt + alipayConfig.setCertPath("/home/mingzhu/alipay/appCertPublicKey_2021005179691569.crt");//搴旂敤鍏挜璇佷功鏂囦欢璺緞锛屼緥濡傦細/foo/appCertPublicKey_2019051064521003.crt alipayConfig.setAlipayPublicCertPath("/home/mingzhu/alipay/alipayCertPublicKey_RSA2.crt");//鏀粯瀹濆叕閽ヨ瘉涔︽枃浠惰矾寰勶紝渚嬪锛/foo/alipayCertPublicKey_RSA2.crt alipayConfig.setRootCertPath("/home/mingzhu/alipay/alipayRootCert.crt");//鏀粯瀹濇牴璇佷功鏂囦欢璺緞锛屼緥濡傦細/foo/alipayRootCert.crt AlipayClient alipayClient = new DefaultAlipayClient(alipayConfig); AlipayFundTransUniTransferRequest request = new AlipayFundTransUniTransferRequest();//杞处绫诲瀷璇锋眰 AlipayFundTransUniTransferModel model = new AlipayFundTransUniTransferModel();//杞处璇锋眰鍙傛暟 model.setOutBizNo(orderNo);//鍟嗗渚у敮涓璁㈠崟鍙 - model.setRemark("杩斾剑");// + model.setRemark("浣欓鎻愮幇");// model.setBusinessParams("{\"payer_show_name_use_alias\":\"true\"}"); model.setBizScene("DIRECT_TRANSFER");//鍗曠瑪鏃犲瘑杞处鍥哄畾涓 DIRECT_TRANSFER Participant payeeInfo = new Participant();//鏀舵鏂逛俊鎭 @@ -45,7 +45,7 @@ public class AliPayUtil { model.setPayeeInfo(payeeInfo); model.setTransAmount(transAmount); model.setProductCode("TRANS_ACCOUNT_NO_PWD"); - model.setOrderTitle("杞欢杩斾剑"); + model.setOrderTitle("浣欓鎻愮幇"); request.setBizModel(model); AlipayFundTransUniTransferResponse response = alipayClient.certificateExecute(request); // Result result = new Result(); diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/utils/DeliveryRejectUtil.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/utils/DeliveryRejectUtil.java new file mode 100644 index 00000000..ae50f814 --- /dev/null +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/utils/DeliveryRejectUtil.java @@ -0,0 +1,65 @@ +package cc.hiver.mall.utils; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.stereotype.Service; + +import java.time.LocalDate; +import java.time.temporal.ChronoUnit; +import java.util.Collections; + +@Service +public class DeliveryRejectUtil { + + @Autowired + private StringRedisTemplate stringRedisTemplate; + + @Autowired + private RedisLuaScripts redisLuaScripts; + + // 姣忔棩鏈澶ф嫆鍗曟鏁伴檺鍒 + private static final int MAX_DAILY_REJECT_COUNT = 5; + // Redis Key 鐨勫墠缂 + private static final String REJECT_KEY_PREFIX = "reject_limit:"; + + /** + * 澶勭悊閰嶉佸憳鎷掔粷鎺ュ崟 + * @param riderId 閰嶉佸憳ID + * @param orderId 璁㈠崟ID + * @return 澶勭悊缁撴灉鎻愮ず璇 + */ + public Integer handleRejectOrder(String riderId, String orderId) { + // 1. 鏋勫缓 Redis Key锛歳eject_limit:{riderId}:{yyyy-MM-dd} + String today = LocalDate.now().toString(); + String redisKey = REJECT_KEY_PREFIX + riderId + ":" + today; + + // 2. 璁$畻鍒板綋澶 23:59:59 鐨勫墿浣欑鏁帮紙姣斿浐瀹24灏忔椂鏇翠弗璋級 + long secondsUntilMidnight = ChronoUnit.SECONDS.between( + java.time.LocalDateTime.now(), + LocalDate.now().plusDays(1).atStartOfDay() + ); + + // 3. 鎵ц Lua 鑴氭湰杩涜鍘熷瓙鍒ゆ柇涓庤鏁 + Long result = stringRedisTemplate.execute( + redisLuaScripts.getRejectLimitScript(), + Collections.singletonList(redisKey), + String.valueOf(MAX_DAILY_REJECT_COUNT), + String.valueOf(secondsUntilMidnight) + ); + + // 4. 鏍规嵁鑴氭湰杩斿洖鍊煎鐞嗕笟鍔 + if (result == -1) { + // 杈惧埌鎷掑崟涓婇檺锛岀洿鎺ユ嫤鎴 + return -1; + } else { + // 鏈揪涓婇檺锛屽厑璁告嫆鍗曘 + // 杩欓噷鍙互缁х画鎵ц鍚庣画鐨勮鍗曠姸鎬佹洿鏂般丮Q娑堟伅鍙戦佺瓑閫昏緫 + System.out.println("閰嶉佸憳 " + riderId + " 鎷掑崟鎴愬姛锛屼粖鏃ュ凡鎷掑崟 " + result + " 娆°"); + + // 鍙互鍦ㄨ繖閲屽紓姝ヨ褰曟嫆鍗曟祦姘村埌 MySQL锛岀敤浜庡悗缁殑鏁版嵁缁熻 + // asyncSaveRejectRecord(riderId, orderId); + + return Math.toIntExact(MAX_DAILY_REJECT_COUNT - result); + } + } +} \ No newline at end of file diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/utils/RedisLuaScripts.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/utils/RedisLuaScripts.java new file mode 100644 index 00000000..c264dc16 --- /dev/null +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/utils/RedisLuaScripts.java @@ -0,0 +1,37 @@ +package cc.hiver.mall.utils; + +import org.springframework.data.redis.core.script.DefaultRedisScript; +import org.springframework.stereotype.Component; + +@Component +public class RedisLuaScripts { + + // 灏佽鎷掑崟娆℃暟闄愬埗鐨 Lua 鑴氭湰 + // 閫昏緫锛氳幏鍙栧綋鍓嶅 -> 鍒ゆ柇鏄惁瓒呴檺 -> 鏈秴闄愬垯鑷骞惰缃繃鏈熸椂闂 -> 杩斿洖褰撳墠娆℃暟鎴栭敊璇爜 + private static final String REJECT_LIMIT_SCRIPT = + "local key = KEYS[1] " + + "local limit = tonumber(ARGV[1]) " + + "local expireSeconds = tonumber(ARGV[2]) " + + "local current = tonumber(redis.call('GET', key) or '0') " + + "if current >= limit then " + + " return -1 " + // 杩斿洖 -1 浠h〃浠婃棩鎷掑崟娆℃暟宸茶揪涓婇檺 + "else " + + " local newCount = redis.call('INCR', key) " + + " if newCount == 1 then " + + " redis.call('EXPIRE', key, expireSeconds) " + + " end " + + " return newCount " + // 杩斿洖褰撳墠鐨勬嫆鍗曟鏁 + "end"; + + private final DefaultRedisScript rejectLimitScript; + + public RedisLuaScripts() { + this.rejectLimitScript = new DefaultRedisScript<>(); + this.rejectLimitScript.setScriptText(REJECT_LIMIT_SCRIPT); + this.rejectLimitScript.setResultType(Long.class); + } + + public DefaultRedisScript getRejectLimitScript() { + return rejectLimitScript; + } +} \ No newline at end of file diff --git a/hiver-modules/hiver-mall/src/main/resources/mapper/MallCouponMapper.xml b/hiver-modules/hiver-mall/src/main/resources/mapper/MallCouponMapper.xml index b61339da..7fecb386 100644 --- a/hiver-modules/hiver-mall/src/main/resources/mapper/MallCouponMapper.xml +++ b/hiver-modules/hiver-mall/src/main/resources/mapper/MallCouponMapper.xml @@ -20,6 +20,7 @@ + @@ -39,7 +40,8 @@ valid_end_time, valid_days, status, - region_id + region_id, + rule_type UPDATE t_mall_coupon @@ -64,6 +66,9 @@ AND type = #{q.type} + + AND rule_type = #{q.ruleType} + AND issuer_type = #{q.issuerType} diff --git a/pom.xml b/pom.xml index f98e74cf..0bff5002 100644 --- a/pom.xml +++ b/pom.xml @@ -45,7 +45,7 @@ 5.22.0 1.5.2.Final 4.2.0 - 4.31.7.ALL + 4.40.626.ALL 1.6.1 1.0.6 2.0 @@ -221,7 +221,7 @@ com.alipay.sdk alipay-sdk-java - ${alipay.version} + 4.40.626.ALL @@ -379,6 +379,11 @@ 3.8.1 ${maven.compiler.source} + + + -XDignore.symbol.file + + true ${maven.compiler.target}