From ba821a83728bf46beaac3b45e79a8c89e56a66a4 Mon Sep 17 00:00:00 2001 From: bynt <13586541001@163.com> Date: Wed, 3 Apr 2024 13:20:34 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=AE=A1=E7=B2=89=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- admin/pom.xml | 5 + .../java/com/baiye/constant/PayConstants.java | 26 ++ .../constant/WeChatRequestConstants.java | 100 ++++++++ .../controller/AliPayController.java | 57 +++++ .../controller/LoginEquipmentController.java | 45 ++++ .../controller/PayOrderController.java | 36 +++ .../controller/WeChatController.java | 83 +++++++ .../controller/WechatCallbackController.java | 36 +++ .../converter/PayOrderConverter.java | 23 ++ .../converter/WeChatAccountConverter.java | 23 ++ .../modules/distribute/dto/AliPayPcDTO.java | 34 +++ .../modules/distribute/dto/CreateCodeDTO.java | 21 ++ .../modules/distribute/dto/EquipmentDTO.java | 33 +++ .../modules/distribute/dto/PushCodeDTO.java | 18 ++ .../distribute/dto/WeChatAddFriendDTO.java | 32 +++ .../distribute/dto/WeChatFriendDTO.java | 42 ++++ .../distribute/dto/WeChatUserLoginDTO.java | 24 ++ .../distribute/entity/LoginEquipment.java | 47 ++++ .../modules/distribute/entity/PayOrder.java | 72 ++++++ .../distribute/entity/WeChatAccount.java | 76 ++++++ .../distribute/entity/WeChatEquipment.java | 39 +++ .../distribute/entity/WeChatFriedRecord.java | 53 ++++ .../mapper/LoginEquipmentMapper.java | 53 ++++ .../distribute/mapper/PayOrderMapper.java | 58 +++++ .../mapper/WeChatAccountMapper.java | 60 +++++ .../distribute/mapper/WeChatFriendMapper.java | 15 ++ .../modules/distribute/qo/AccountQo.java | 30 +++ .../modules/distribute/qo/PayOrderQo.java | 21 ++ .../distribute/service/AliPayService.java | 42 ++++ .../service/LoginEquipmentService.java | 51 ++++ .../distribute/service/PayOrderService.java | 23 ++ .../distribute/service/WeChatService.java | 95 +++++++ .../service/WechatCallbackService.java | 17 ++ .../service/WechatFriendService.java | 18 ++ .../service/impl/AliPayServiceImpl.java | 189 ++++++++++++++ .../impl/LoginEquipmentServiceImpl.java | 62 +++++ .../service/impl/PayOrderServiceImpl.java | 29 +++ .../service/impl/WeChatServiceImpl.java | 235 ++++++++++++++++++ .../impl/WechatCallbackServiceImpl.java | 82 ++++++ .../service/impl/WechatFriendServiceImpl.java | 38 +++ .../modules/distribute/vo/AddFriendVo.java | 49 ++++ .../modules/distribute/vo/PayOrderVO.java | 45 ++++ .../distribute/vo/WeChatAccountVO.java | 79 ++++++ .../distribute/vo/WeChatAddFriendVo.java | 18 ++ .../java/com/baiye/properties/PayConfig.java | 40 +++ admin/src/main/resources/application-dev.yml | 21 +- admin/src/main/resources/application-prod.yml | 20 +- admin/src/main/resources/application.yml | 9 +- .../resources/mapper/LoginEquipmentMapper.xml | 52 ++++ .../constant/DefaultNumberConstants.java | 5 + .../constant/WechatCallbackConstant.java | 46 ++++ .../baiye/constant/enums/ResponseCode.java | 225 +++++++++++++++++ .../java/com/baiye/enums/ChannelTypeEnum.java | 4 +- .../java/com/baiye/enums/ClueSourceEnum.java | 46 ---- .../java/com/baiye/enums/MailRequestEnum.java | 45 ---- .../java/com/baiye/enums/PackageEnum.java | 43 ++++ .../main/java/com/baiye/util/RedisUtils.java | 20 -- .../java/com/baiye/result/WeChatResponse.java | 29 +++ .../handler/NotifyInfoDelegateHandler.java | 55 ++-- .../notify/handler/NotifyInfoHandler.java | 1 - .../system/properties/AliPayProperties.java | 30 +++ .../system/properties/WeChatProperties.java | 23 ++ .../system/model/dto/SysUserNameRoleDTO.java | 4 +- pom.xml | 10 + 64 files changed, 2816 insertions(+), 146 deletions(-) create mode 100644 admin/src/main/java/com/baiye/constant/PayConstants.java create mode 100644 admin/src/main/java/com/baiye/constant/WeChatRequestConstants.java create mode 100644 admin/src/main/java/com/baiye/modules/distribute/controller/AliPayController.java create mode 100644 admin/src/main/java/com/baiye/modules/distribute/controller/LoginEquipmentController.java create mode 100644 admin/src/main/java/com/baiye/modules/distribute/controller/PayOrderController.java create mode 100644 admin/src/main/java/com/baiye/modules/distribute/controller/WeChatController.java create mode 100644 admin/src/main/java/com/baiye/modules/distribute/controller/WechatCallbackController.java create mode 100644 admin/src/main/java/com/baiye/modules/distribute/converter/PayOrderConverter.java create mode 100644 admin/src/main/java/com/baiye/modules/distribute/converter/WeChatAccountConverter.java create mode 100644 admin/src/main/java/com/baiye/modules/distribute/dto/AliPayPcDTO.java create mode 100644 admin/src/main/java/com/baiye/modules/distribute/dto/CreateCodeDTO.java create mode 100644 admin/src/main/java/com/baiye/modules/distribute/dto/EquipmentDTO.java create mode 100644 admin/src/main/java/com/baiye/modules/distribute/dto/PushCodeDTO.java create mode 100644 admin/src/main/java/com/baiye/modules/distribute/dto/WeChatAddFriendDTO.java create mode 100644 admin/src/main/java/com/baiye/modules/distribute/dto/WeChatFriendDTO.java create mode 100644 admin/src/main/java/com/baiye/modules/distribute/dto/WeChatUserLoginDTO.java create mode 100644 admin/src/main/java/com/baiye/modules/distribute/entity/LoginEquipment.java create mode 100644 admin/src/main/java/com/baiye/modules/distribute/entity/PayOrder.java create mode 100644 admin/src/main/java/com/baiye/modules/distribute/entity/WeChatAccount.java create mode 100644 admin/src/main/java/com/baiye/modules/distribute/entity/WeChatEquipment.java create mode 100644 admin/src/main/java/com/baiye/modules/distribute/entity/WeChatFriedRecord.java create mode 100644 admin/src/main/java/com/baiye/modules/distribute/mapper/LoginEquipmentMapper.java create mode 100644 admin/src/main/java/com/baiye/modules/distribute/mapper/PayOrderMapper.java create mode 100644 admin/src/main/java/com/baiye/modules/distribute/mapper/WeChatAccountMapper.java create mode 100644 admin/src/main/java/com/baiye/modules/distribute/mapper/WeChatFriendMapper.java create mode 100644 admin/src/main/java/com/baiye/modules/distribute/qo/AccountQo.java create mode 100644 admin/src/main/java/com/baiye/modules/distribute/qo/PayOrderQo.java create mode 100644 admin/src/main/java/com/baiye/modules/distribute/service/AliPayService.java create mode 100644 admin/src/main/java/com/baiye/modules/distribute/service/LoginEquipmentService.java create mode 100644 admin/src/main/java/com/baiye/modules/distribute/service/PayOrderService.java create mode 100644 admin/src/main/java/com/baiye/modules/distribute/service/WeChatService.java create mode 100644 admin/src/main/java/com/baiye/modules/distribute/service/WechatCallbackService.java create mode 100644 admin/src/main/java/com/baiye/modules/distribute/service/WechatFriendService.java create mode 100644 admin/src/main/java/com/baiye/modules/distribute/service/impl/AliPayServiceImpl.java create mode 100644 admin/src/main/java/com/baiye/modules/distribute/service/impl/LoginEquipmentServiceImpl.java create mode 100644 admin/src/main/java/com/baiye/modules/distribute/service/impl/PayOrderServiceImpl.java create mode 100644 admin/src/main/java/com/baiye/modules/distribute/service/impl/WeChatServiceImpl.java create mode 100644 admin/src/main/java/com/baiye/modules/distribute/service/impl/WechatCallbackServiceImpl.java create mode 100644 admin/src/main/java/com/baiye/modules/distribute/service/impl/WechatFriendServiceImpl.java create mode 100644 admin/src/main/java/com/baiye/modules/distribute/vo/AddFriendVo.java create mode 100644 admin/src/main/java/com/baiye/modules/distribute/vo/PayOrderVO.java create mode 100644 admin/src/main/java/com/baiye/modules/distribute/vo/WeChatAccountVO.java create mode 100644 admin/src/main/java/com/baiye/modules/distribute/vo/WeChatAddFriendVo.java create mode 100644 admin/src/main/java/com/baiye/properties/PayConfig.java create mode 100644 admin/src/main/resources/mapper/LoginEquipmentMapper.xml create mode 100644 marketing-platform-common/common-core/src/main/java/com/baiye/constant/WechatCallbackConstant.java create mode 100644 marketing-platform-common/common-core/src/main/java/com/baiye/constant/enums/ResponseCode.java delete mode 100644 marketing-platform-common/common-core/src/main/java/com/baiye/enums/ClueSourceEnum.java delete mode 100644 marketing-platform-common/common-core/src/main/java/com/baiye/enums/MailRequestEnum.java create mode 100644 marketing-platform-common/common-core/src/main/java/com/baiye/enums/PackageEnum.java create mode 100644 marketing-platform-common/common-model/src/main/java/com/baiye/result/WeChatResponse.java create mode 100644 marketing-platform-system/system-biz/src/main/java/com/baiye/system/properties/AliPayProperties.java create mode 100644 marketing-platform-system/system-biz/src/main/java/com/baiye/system/properties/WeChatProperties.java diff --git a/admin/pom.xml b/admin/pom.xml index 26734fc..2c8d604 100644 --- a/admin/pom.xml +++ b/admin/pom.xml @@ -142,6 +142,11 @@ common-idempotent + + com.alipay.sdk + alipay-easysdk + + diff --git a/admin/src/main/java/com/baiye/constant/PayConstants.java b/admin/src/main/java/com/baiye/constant/PayConstants.java new file mode 100644 index 0000000..ef2b6a3 --- /dev/null +++ b/admin/src/main/java/com/baiye/constant/PayConstants.java @@ -0,0 +1,26 @@ +package com.baiye.constant; + +/** + * 支付相关 常量定义 + * + * @author Enzo + * @date : 2021/6/16 + */ +public class PayConstants { + + private PayConstants() { + } + + /** + * 付款信息 反馈中文字段补充前缀 + */ + public static final String PAY_TITLE = "回跟营销系统支付订单:"; + + /** + * 返回的信息字段内容对应 key + */ + public static final String OUT_TRADE_NO = "out_trade_no"; + + + +} diff --git a/admin/src/main/java/com/baiye/constant/WeChatRequestConstants.java b/admin/src/main/java/com/baiye/constant/WeChatRequestConstants.java new file mode 100644 index 0000000..ab9a31f --- /dev/null +++ b/admin/src/main/java/com/baiye/constant/WeChatRequestConstants.java @@ -0,0 +1,100 @@ + +package com.baiye.constant; + +/** + * @author Enzo + * @date 2024-3-27 + */ +public interface WeChatRequestConstants { + + + /** + * 获取二维码 + */ + String GET_QR_CODE = "/api/qrCodeLogin/"; + + + + /** + * 全局设置 + */ + String GLOBAL_SETTING = "/api/global-settings/"; + + + + /** + * 弹窗登录 + */ + String GET_PUSH_LOGIN = "/api/pushLogin/"; + + + + /** + * 创建设备 + */ + String CREATE_EQUIPMENT= "/api/addToScanRobotInfo/"; + + + + /** + * 退出微信 + */ + String WE_CHAT_LOGOUT = "/wechat/v1/batchLogout"; + + /** + * 发送文本消息 + */ + String WE_CHAT_SEND_TXT = "/wechat/v1/sendtext"; + + /** + * 发送图片 + */ + String WE_CHAT_SEND_PICTURE = "/wechat/v1/sendurlpic"; + /** + * 发送gif + */ + String WE_CHAT_SEND_GIF = "/wechat/v1/sendGif"; + + /** + * 发送视频 + */ + String WE_CHAT_SEND_VIDEO = "/wechat/v1/sendCdnVideoMsg"; + + /** + * 获取好友信息 + */ + String WE_CHAT_FRIEND_INFORMATION = "/wechat/v1/friendinfo"; + + /** + * 获取通讯录信息 + */ + String WE_CHAT_GET_CONTACT = "/wechat/v1/getAllContact"; + /** + * 同步通讯录 + */ + String WE_CHAT_SYNC_CONTACT = "/wechat/v1/syncContact"; + /** + * 添加好友 + */ + String WE_CHAT_ADD_FRIEND = "/wechat/v1/addfriends"; + + + /** + * 在线状态检测 + */ + String WE_CHAT_STATUS = "/wechat/v1/wecatstatus"; + + /** + * 发送文本消息 + */ + String WE_SEND_TEXT = "/wechat/v1/sendtext"; + + /** + * 发送图片 + */ + String WE_SEND_PIC = "/wechat/v1/sendurlpic"; + /** + * 发生gif + */ + String WE_SEND_GIF = "/wechat/v1/sendGif"; +} diff --git a/admin/src/main/java/com/baiye/modules/distribute/controller/AliPayController.java b/admin/src/main/java/com/baiye/modules/distribute/controller/AliPayController.java new file mode 100644 index 0000000..599b7aa --- /dev/null +++ b/admin/src/main/java/com/baiye/modules/distribute/controller/AliPayController.java @@ -0,0 +1,57 @@ +package com.baiye.modules.distribute.controller; + + +import com.baiye.modules.distribute.dto.AliPayPcDTO; +import com.baiye.modules.distribute.entity.PayOrder; +import com.baiye.modules.distribute.service.AliPayService; +import com.baiye.result.R; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletRequest; +import java.util.Map; + +/** + * @author Enzo + */ +@Tag(name = "支付宝支付") +@Slf4j +@RestController +@RequestMapping(value = "/pay/aliPay") +@AllArgsConstructor +public class AliPayController { + + private final AliPayService aliPayService; + + @Operation(summary = "创建pc订单") + @PostMapping(value = "/pcPay") + public R> pcPay(@Validated @RequestBody AliPayPcDTO aliPayPcDTO) { + return R.ok(aliPayService.aliPayPc(aliPayPcDTO)); + } + + + @Operation(summary = "订单号查找") + @GetMapping(value = "/find/order") + public R frontRcvResponse(@RequestParam("orderNo") String orderNo) { + return R.ok(aliPayService.findOrderByNo(orderNo)); + } + + + /** + * pc 回调接收参数 + * + * @param request request + * @return 返回结果 + */ + @Operation(summary = "订单回调") + @RequestMapping(value = "/pay-notify", produces = "text/html;charset=utf-8") + public String frontRcvResponse(HttpServletRequest request) { + return aliPayService.pcNotifyResponse(request); + } + + +} diff --git a/admin/src/main/java/com/baiye/modules/distribute/controller/LoginEquipmentController.java b/admin/src/main/java/com/baiye/modules/distribute/controller/LoginEquipmentController.java new file mode 100644 index 0000000..da819f6 --- /dev/null +++ b/admin/src/main/java/com/baiye/modules/distribute/controller/LoginEquipmentController.java @@ -0,0 +1,45 @@ +package com.baiye.modules.distribute.controller; + +import com.baiye.domain.PageParam; +import com.baiye.domain.PageResult; +import com.baiye.modules.distribute.qo.AccountQo; +import com.baiye.modules.distribute.qo.PayOrderQo; +import com.baiye.modules.distribute.service.LoginEquipmentService; +import com.baiye.modules.distribute.vo.AddFriendVo; +import com.baiye.modules.distribute.vo.PayOrderVO; +import com.baiye.modules.distribute.vo.WeChatAccountVO; +import com.baiye.result.R; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author Enzo + * @date : 2024/4/1 + */ + +@Tag(name = "微信设备") +@Slf4j +@RestController +@RequestMapping(value = "/equipment") +@AllArgsConstructor +public class LoginEquipmentController { + + private LoginEquipmentService loginEquipmentService; + + @GetMapping("/page") + @Operation(summary = "分页查询记录") + public R> getClueRecordPage(@Validated PageParam pageParam, AccountQo qo) { + return R.ok(loginEquipmentService.queryPage(pageParam, qo)); + } + + + + + +} diff --git a/admin/src/main/java/com/baiye/modules/distribute/controller/PayOrderController.java b/admin/src/main/java/com/baiye/modules/distribute/controller/PayOrderController.java new file mode 100644 index 0000000..436466c --- /dev/null +++ b/admin/src/main/java/com/baiye/modules/distribute/controller/PayOrderController.java @@ -0,0 +1,36 @@ +package com.baiye.modules.distribute.controller; + +import com.baiye.domain.PageParam; +import com.baiye.domain.PageResult; +import com.baiye.modules.distribute.qo.PayOrderQo; +import com.baiye.modules.distribute.service.PayOrderService; +import com.baiye.modules.distribute.vo.PayOrderVO; +import com.baiye.result.R; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author Enzo + * @date + */ +@RequiredArgsConstructor +@RestController +@Tag(name = "订单记录") +@RequestMapping("/pay/order") +public class PayOrderController { + + private final PayOrderService payOrderService; + + @GetMapping("/page") + @Operation(summary = "分页查询记录") + public R> getClueRecordPage(@Validated PageParam pageParam, PayOrderQo qo) { + return R.ok(payOrderService.queryPage(pageParam, qo)); + } + + +} diff --git a/admin/src/main/java/com/baiye/modules/distribute/controller/WeChatController.java b/admin/src/main/java/com/baiye/modules/distribute/controller/WeChatController.java new file mode 100644 index 0000000..7ee676a --- /dev/null +++ b/admin/src/main/java/com/baiye/modules/distribute/controller/WeChatController.java @@ -0,0 +1,83 @@ +package com.baiye.modules.distribute.controller; + +import com.baiye.domain.PageParam; +import com.baiye.domain.PageResult; +import com.baiye.modules.distribute.dto.CreateCodeDTO; +import com.baiye.modules.distribute.dto.PushCodeDTO; +import com.baiye.modules.distribute.dto.WeChatAddFriendDTO; +import com.baiye.modules.distribute.qo.AccountQo; +import com.baiye.modules.distribute.service.WeChatService; +import com.baiye.modules.distribute.vo.AddFriendVo; +import com.baiye.modules.distribute.vo.WeChatAccountVO; +import com.baiye.result.R; +import com.baiye.security.util.SecurityUtils; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +/** + * @author Enzo + * @date : 2024/3/27 + */ +@RestController +@Tag(name = "微信账号") +@RequiredArgsConstructor +@RequestMapping("/wechat") +public class WeChatController { + + + private final WeChatService weChatService; + + @GetMapping("/page") + @Operation(summary = "分页查询账号") + public R> getClueRecordPage(@Validated PageParam pageParam, AccountQo qo) { + return R.ok(weChatService.queryPage(pageParam, qo)); + } + + + @GetMapping("/global/setting") + @Operation(summary = "全局设置") + public R getClueRecordPage(String callbackUrl) { + return R.ok(weChatService.globalSetting(callbackUrl)); + } + + + @PostMapping("/createCode") + @Operation(description = "创建二维码") + public R createCode(@RequestBody CreateCodeDTO createCodeDTO) { + return R.ok(weChatService.createQrCode(createCodeDTO)); + } + + + @Operation(description = "弹窗登录接口") + @PostMapping("/push/code") + public R pushCode(@Validated @RequestBody PushCodeDTO pushCodeDTO) { + return R.ok(weChatService.pushCode(pushCodeDTO)); + } + + @Operation(description = "添加好友") + @PostMapping("/addFriend") + public R addFriend(@Validated @RequestBody WeChatAddFriendDTO weChatFriendDTO) { + return R.ok(weChatService.addFriend(weChatFriendDTO)); + } + + + + @GetMapping("/create/equipment") + @Operation(summary = "创建设备") + public R createEquipment(Integer num,Integer packageType) { + return Boolean.TRUE.equals(weChatService.createEquipment(num, packageType, SecurityUtils.getCurrentUserId())) ? R.ok() : R.failed("创建设备失败"); + } + + + @GetMapping("/friend/page") + @Operation(summary = "添加好友记录") + public R> getData(@Validated PageParam pageParam, AccountQo qo) { + return R.ok(weChatService.queryDateData(pageParam, qo)); + } + + + +} diff --git a/admin/src/main/java/com/baiye/modules/distribute/controller/WechatCallbackController.java b/admin/src/main/java/com/baiye/modules/distribute/controller/WechatCallbackController.java new file mode 100644 index 0000000..487c7be --- /dev/null +++ b/admin/src/main/java/com/baiye/modules/distribute/controller/WechatCallbackController.java @@ -0,0 +1,36 @@ +package com.baiye.modules.distribute.controller; + +import cn.hutool.json.JSONUtil; +import com.baiye.modules.distribute.service.WechatCallbackService; +import com.baiye.result.R; +import com.baiye.result.WeChatResponse; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author Enzo + * @date 2022-8-11 + */ +@Slf4j +@RestController +@RequestMapping("/api/wechat") +@RequiredArgsConstructor +public class WechatCallbackController { + + private final WechatCallbackService wechatCallbackService; + + /** + * 请求三方微信操作回调 + */ + @PostMapping("/callback") + public R wechatCallback(@RequestBody WeChatResponse weChatResponse) { + log.info("================== the response {} ==================", JSONUtil.toJsonStr(weChatResponse)); + wechatCallbackService.analyticalData(weChatResponse); + return R.ok(); + } + +} diff --git a/admin/src/main/java/com/baiye/modules/distribute/converter/PayOrderConverter.java b/admin/src/main/java/com/baiye/modules/distribute/converter/PayOrderConverter.java new file mode 100644 index 0000000..5b3bd94 --- /dev/null +++ b/admin/src/main/java/com/baiye/modules/distribute/converter/PayOrderConverter.java @@ -0,0 +1,23 @@ +package com.baiye.modules.distribute.converter; + +import com.baiye.modules.distribute.entity.PayOrder; +import com.baiye.modules.distribute.vo.PayOrderVO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +/** + * @author Enzo + * @date : 2024/3/28 + */ +@Mapper +public interface PayOrderConverter { + + PayOrderConverter INSTANCE = Mappers.getMapper(PayOrderConverter.class); + + /** + * 实体转vo + * @param payOrder + * @return + */ + PayOrderVO entityToVo(PayOrder payOrder); +} diff --git a/admin/src/main/java/com/baiye/modules/distribute/converter/WeChatAccountConverter.java b/admin/src/main/java/com/baiye/modules/distribute/converter/WeChatAccountConverter.java new file mode 100644 index 0000000..305bdf0 --- /dev/null +++ b/admin/src/main/java/com/baiye/modules/distribute/converter/WeChatAccountConverter.java @@ -0,0 +1,23 @@ +package com.baiye.modules.distribute.converter; + +import com.baiye.modules.distribute.entity.WeChatAccount; +import com.baiye.modules.distribute.vo.WeChatAccountVO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +/** + * @author Enzo + * @date : 2024/3/29 + */ +@Mapper +public interface WeChatAccountConverter { + + WeChatAccountConverter INSTANCE = Mappers.getMapper(WeChatAccountConverter.class); + + /** + * 实体转vo + * @param weChatAccount + * @return + */ + WeChatAccountVO entityToVo(WeChatAccount weChatAccount); +} diff --git a/admin/src/main/java/com/baiye/modules/distribute/dto/AliPayPcDTO.java b/admin/src/main/java/com/baiye/modules/distribute/dto/AliPayPcDTO.java new file mode 100644 index 0000000..3aedb42 --- /dev/null +++ b/admin/src/main/java/com/baiye/modules/distribute/dto/AliPayPcDTO.java @@ -0,0 +1,34 @@ +package com.baiye.modules.distribute.dto; + +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.validation.constraints.Min; +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +/** + * @author Enzo + * @date : 2022/3/16 + */ +@Data +@NoArgsConstructor +public class AliPayPcDTO implements Serializable { + + private static final long serialVersionUID = 6500373305956248683L; + + @NotNull(message = "套餐类型不能为空") + private Integer packageType; + + @NotNull(message = "数量不能为空") + @Min(value = 1,message = "最小为1") + private Integer num; + + @NotNull(message = "续费类型不能为空") + private Boolean isRenew; + + private Integer robotId; + + private String remark; + +} diff --git a/admin/src/main/java/com/baiye/modules/distribute/dto/CreateCodeDTO.java b/admin/src/main/java/com/baiye/modules/distribute/dto/CreateCodeDTO.java new file mode 100644 index 0000000..0ae3b51 --- /dev/null +++ b/admin/src/main/java/com/baiye/modules/distribute/dto/CreateCodeDTO.java @@ -0,0 +1,21 @@ +package com.baiye.modules.distribute.dto; + +import lombok.Data; + +/** + * @author Enzo + * @date : 2024/3/27 + */ +@Data +public class CreateCodeDTO { + + private String robotId; + + private String wxId; + + private String cityInfo; + + private String changedUid; + + private String robotVersion; +} diff --git a/admin/src/main/java/com/baiye/modules/distribute/dto/EquipmentDTO.java b/admin/src/main/java/com/baiye/modules/distribute/dto/EquipmentDTO.java new file mode 100644 index 0000000..1b023bf --- /dev/null +++ b/admin/src/main/java/com/baiye/modules/distribute/dto/EquipmentDTO.java @@ -0,0 +1,33 @@ +package com.baiye.modules.distribute.dto; + +import lombok.*; + +import java.util.List; + +/** + * @author Enzo + * @date : 2024/4/1 + */ +@Data +public class EquipmentDTO { + + private Integer status; + + private List data; + + + /** + * + */ + @AllArgsConstructor + @NoArgsConstructor + @ToString + @Getter + @Setter + public static class RoBotDTO { + + private String robotAccount; + + private Integer robotId; + } +} diff --git a/admin/src/main/java/com/baiye/modules/distribute/dto/PushCodeDTO.java b/admin/src/main/java/com/baiye/modules/distribute/dto/PushCodeDTO.java new file mode 100644 index 0000000..9ca7fda --- /dev/null +++ b/admin/src/main/java/com/baiye/modules/distribute/dto/PushCodeDTO.java @@ -0,0 +1,18 @@ +package com.baiye.modules.distribute.dto; + +import lombok.Data; + +/** + * @author Enzo + * @date : 2024/3/27 + */ +@Data +public class PushCodeDTO { + + private String robotId; + + private String wxId; + + private String cityInfo; + +} diff --git a/admin/src/main/java/com/baiye/modules/distribute/dto/WeChatAddFriendDTO.java b/admin/src/main/java/com/baiye/modules/distribute/dto/WeChatAddFriendDTO.java new file mode 100644 index 0000000..862030f --- /dev/null +++ b/admin/src/main/java/com/baiye/modules/distribute/dto/WeChatAddFriendDTO.java @@ -0,0 +1,32 @@ +package com.baiye.modules.distribute.dto; + +import lombok.Data; +import lombok.NonNull; + +/** + * @author Enzo + * @date : 2022/6/27 + */ +@Data +public class WeChatAddFriendDTO { + + @NonNull + private String wechat; + + @NonNull + private Integer type; + + @NonNull + private String tagetWxId; + + @NonNull + private String helloContent; + + @NonNull + private String appKey; + + @NonNull + private String appSecret; + + +} diff --git a/admin/src/main/java/com/baiye/modules/distribute/dto/WeChatFriendDTO.java b/admin/src/main/java/com/baiye/modules/distribute/dto/WeChatFriendDTO.java new file mode 100644 index 0000000..19f01bf --- /dev/null +++ b/admin/src/main/java/com/baiye/modules/distribute/dto/WeChatFriendDTO.java @@ -0,0 +1,42 @@ +package com.baiye.modules.distribute.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +/** + * @author Enzo + * @date : 2022/6/27 + */ +@Data +public class WeChatFriendDTO { + + @Schema(title = "机器人微信ID") + private String robotWxId; + + @Schema(title = "添加好友方式") + private Integer addFriendType; + + @Schema(title = "省") + private String province; + + @Schema(title = "城市") + private String city; + + @Schema(title = "昵称") + private String nickName; + + @Schema(title = "性别") + private Integer sex; + + @Schema(title = "通过时间") + private Long addAcceptTime; + + + @Schema(title = "微信ID") + private String alias; + + @Schema(title = "头像") + private String bigHeadImgUrl; + + +} diff --git a/admin/src/main/java/com/baiye/modules/distribute/dto/WeChatUserLoginDTO.java b/admin/src/main/java/com/baiye/modules/distribute/dto/WeChatUserLoginDTO.java new file mode 100644 index 0000000..7c523f8 --- /dev/null +++ b/admin/src/main/java/com/baiye/modules/distribute/dto/WeChatUserLoginDTO.java @@ -0,0 +1,24 @@ +package com.baiye.modules.distribute.dto; + +import lombok.Data; + +import java.io.Serializable; + +/** + * @author Enzo + * @date : 2022/6/30 + */ +@Data +public class WeChatUserLoginDTO implements Serializable { + + + private String pit; + + private String wxId; + + private String nickname; + + private String bigHeadImgUrl; + + +} diff --git a/admin/src/main/java/com/baiye/modules/distribute/entity/LoginEquipment.java b/admin/src/main/java/com/baiye/modules/distribute/entity/LoginEquipment.java new file mode 100644 index 0000000..f8a8f88 --- /dev/null +++ b/admin/src/main/java/com/baiye/modules/distribute/entity/LoginEquipment.java @@ -0,0 +1,47 @@ +package com.baiye.modules.distribute.entity; + +import com.baiye.entity.BaseEntity; +import com.baiye.extend.mybatis.plus.alias.TableAlias; +import com.baiye.validation.group.UpdateGroup; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotNull; +import java.util.Date; + +/** + * @author Enzo + * @date : 2024/4/1 + */ +@Getter +@Setter +@TableAlias("le") +@TableName(value = "tb_login_equipment") +public class LoginEquipment extends BaseEntity { + + @TableId(type = IdType.AUTO) + @Schema(title = "id") + @NotNull(message = "id", groups = {UpdateGroup.class}) + private Long id; + + + @Schema(name = "user_id") + private Long userId; + + @Schema(name = "pit") + private String pit; + + @Schema(name = "robot_id") + private Integer robotId; + + @Schema(name = "device_number") + private String deviceNumber; + + @Schema(name = "expiration_time") + private Date expirationTime; + +} diff --git a/admin/src/main/java/com/baiye/modules/distribute/entity/PayOrder.java b/admin/src/main/java/com/baiye/modules/distribute/entity/PayOrder.java new file mode 100644 index 0000000..0a4d82b --- /dev/null +++ b/admin/src/main/java/com/baiye/modules/distribute/entity/PayOrder.java @@ -0,0 +1,72 @@ +package com.baiye.modules.distribute.entity; + +import cn.hutool.core.date.DatePattern; +import com.baiye.entity.BaseEntity; +import com.baiye.extend.mybatis.plus.alias.TableAlias; +import com.baiye.validation.group.UpdateGroup; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotNull; +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + +/** + * @author Enzo + * @date 2021-10-28 + */ +@Getter +@Setter +@TableAlias("po") +@TableName(value = "tb_pay_order") +public class PayOrder extends BaseEntity implements Serializable { + private static final long serialVersionUID = 2056458673691527927L; + + + @TableId(type = IdType.AUTO) + @Schema(title = "id") + @NotNull(message = "id", groups = {UpdateGroup.class}) + private Long id; + + @Schema(name = "pay_type") + private Integer payType; + + @Schema(name = "order_no") + private String orderNo; + + + @Schema(name = "status") + private Integer status; + + @Schema(name = "num") + private Integer num; + + @Schema(name = "purchaser") + private String purchaser; + + @Schema(name = "pay_time") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DatePattern.NORM_DATETIME_PATTERN, timezone = "GMT+8") + private Date payTime; + + @Schema(name = "amount") + private BigDecimal amount; + + @Schema(name = "user_id") + private Long userId; + + + @Schema(name = "robot_id") + private Integer robotId; + + @Schema(name = "is_renew") + private Boolean isRenew; + + + +} diff --git a/admin/src/main/java/com/baiye/modules/distribute/entity/WeChatAccount.java b/admin/src/main/java/com/baiye/modules/distribute/entity/WeChatAccount.java new file mode 100644 index 0000000..d72ac2f --- /dev/null +++ b/admin/src/main/java/com/baiye/modules/distribute/entity/WeChatAccount.java @@ -0,0 +1,76 @@ +package com.baiye.modules.distribute.entity; + +import com.baiye.entity.LogicDeletedBaseEntity; +import com.baiye.extend.mybatis.plus.alias.TableAlias; +import com.baiye.validation.group.UpdateGroup; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import javax.validation.constraints.NotNull; +import java.util.Date; + +/** + * @author Enzo + * @date : 2024/3/26 + */ + +@Getter +@Setter +@ToString +@TableAlias("wa") +@TableName(value = "tb_wechat_account") +public class WeChatAccount extends LogicDeletedBaseEntity { + + @TableId(type = IdType.AUTO) + @Schema(title = "id") + @NotNull(message = "微信ID", groups = {UpdateGroup.class}) + private Long id; + + @Schema(title = "用户id") + private Long userId; + + @Schema(title = "设备信息") + private String deviceInformation; + + @Schema(title = "用户名称") + private String username; + + @Schema(title = "用户id") + private String nickname; + + @Schema(title = "城市信息") + private String cityInfo; + + @Schema(title = "登录类型") + private Integer loginType; + + @Schema(name = "登录时间") + private Date loginDate; + + @Schema(name = "头像") + private String headerUrl; + + @Schema(name = "微信ID") + private String wxId; + + @Schema(name = "性别") + private Integer sex; + + @Schema(name = "拥有者") + private Long ownerId; + + @Schema(title = "在线状态") + private Integer status; + + @Schema(title = "备注") + private String remark; + + @Schema(title = "微信号") + private String weChatNo; + +} diff --git a/admin/src/main/java/com/baiye/modules/distribute/entity/WeChatEquipment.java b/admin/src/main/java/com/baiye/modules/distribute/entity/WeChatEquipment.java new file mode 100644 index 0000000..c930d33 --- /dev/null +++ b/admin/src/main/java/com/baiye/modules/distribute/entity/WeChatEquipment.java @@ -0,0 +1,39 @@ +package com.baiye.modules.distribute.entity; + +import com.baiye.extend.mybatis.plus.alias.TableAlias; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.io.Serializable; + +/** + * + * @author Enzo + * + * + */ +@Data +@TableAlias("we") +@TableName("tb_wechat_equipment") +@Schema(title = "微信账号设备") +public class WeChatEquipment implements Serializable { + + + @TableId + private Long id; + + /** + * 用户ID + */ + @Schema(title = "用户id") + private Long accountId; + + /** + * 角色Code + */ + @Schema(title = "设备id") + private String equipmentId; + +} diff --git a/admin/src/main/java/com/baiye/modules/distribute/entity/WeChatFriedRecord.java b/admin/src/main/java/com/baiye/modules/distribute/entity/WeChatFriedRecord.java new file mode 100644 index 0000000..16cef80 --- /dev/null +++ b/admin/src/main/java/com/baiye/modules/distribute/entity/WeChatFriedRecord.java @@ -0,0 +1,53 @@ +package com.baiye.modules.distribute.entity; + +import com.baiye.extend.mybatis.plus.alias.TableAlias; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.io.Serializable; + +/** + * @author Enzo + * @date : 2024/4/2 + */ +@Data +@TableAlias("we") +@TableName("tb_wechat_friend") +@Schema(title = "微信好友记录") +public class WeChatFriedRecord implements Serializable { + + @TableId + private Long id; + + @Schema(title = "机器人微信ID") + private String robotWxId; + + @Schema(title = "添加好友方式") + private Integer addFriendType; + + @Schema(title = "省") + private String province; + + @Schema(title = "城市") + private String city; + + @Schema(title = "昵称") + private String nickName; + + @Schema(title = "性别") + private Integer sex; + + @Schema(title = "通过时间") + private Long addAcceptTime; + + + @Schema(title = "微信ID") + private String alias; + + @Schema(title = "头像") + private String bigHeadImgUrl; + + +} diff --git a/admin/src/main/java/com/baiye/modules/distribute/mapper/LoginEquipmentMapper.java b/admin/src/main/java/com/baiye/modules/distribute/mapper/LoginEquipmentMapper.java new file mode 100644 index 0000000..55d597d --- /dev/null +++ b/admin/src/main/java/com/baiye/modules/distribute/mapper/LoginEquipmentMapper.java @@ -0,0 +1,53 @@ +package com.baiye.modules.distribute.mapper; + +import com.baiye.domain.PageParam; +import com.baiye.domain.PageResult; +import com.baiye.extend.mybatis.plus.conditions.query.LambdaQueryWrapperX; +import com.baiye.extend.mybatis.plus.mapper.ExtendMapper; +import com.baiye.extend.mybatis.plus.toolkit.WrappersX; +import com.baiye.modules.distribute.entity.LoginEquipment; +import com.baiye.modules.distribute.entity.WeChatAccount; +import com.baiye.modules.distribute.qo.AccountQo; +import com.baiye.modules.distribute.vo.WeChatAccountVO; +import com.baiye.modules.distribute.vo.WeChatAddFriendVo; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @author Enzo + * @date 2024-4-1 + */ +@Mapper +public interface LoginEquipmentMapper extends ExtendMapper { + + + + default PageResult queryPage(PageParam pageParam, AccountQo qo) { + IPage page = this.prodPage(pageParam); + + LambdaQueryWrapperX wrapperX = WrappersX.lambdaQueryX(WeChatAccount.class); + if (StringUtils.isNotBlank(qo.getStartTime()) && StringUtils.isNotBlank(qo.getEndTime())) { + wrapperX.between(WeChatAccount::getCreateTime, qo.getStartTime(), qo.getEndTime()); + } + wrapperX.likeIfPresent(WeChatAccount::getUsername, qo.getUsername()).eqIfPresent(WeChatAccount::getUserId, qo.getUserId()); + this.selectByPage(page, qo.getStartTime(), qo.getEndTime(), qo.getUsername(), qo.getUserId()); + return new PageResult<>(page.getRecords(), page.getTotal()); + } + + IPage selectByPage(IPage page, + @Param("startTime") String startTime, @Param("endTime") String endTime, @Param("username") String username,@Param("userId") Long userId); + + + /** + * 天数查询数据 + * + * @param dayNum + * @param wxId + * @return + */ + List queryByDate(@Param("dayNum") Integer dayNum, @Param("wxId") String wxId); +} diff --git a/admin/src/main/java/com/baiye/modules/distribute/mapper/PayOrderMapper.java b/admin/src/main/java/com/baiye/modules/distribute/mapper/PayOrderMapper.java new file mode 100644 index 0000000..8cd4063 --- /dev/null +++ b/admin/src/main/java/com/baiye/modules/distribute/mapper/PayOrderMapper.java @@ -0,0 +1,58 @@ +package com.baiye.modules.distribute.mapper; + +import com.baiye.domain.PageParam; +import com.baiye.domain.PageResult; +import com.baiye.extend.mybatis.plus.conditions.query.LambdaQueryWrapperX; +import com.baiye.extend.mybatis.plus.mapper.ExtendMapper; +import com.baiye.extend.mybatis.plus.toolkit.WrappersX; +import com.baiye.modules.distribute.converter.PayOrderConverter; +import com.baiye.modules.distribute.entity.PayOrder; +import com.baiye.modules.distribute.qo.PayOrderQo; +import com.baiye.modules.distribute.vo.PayOrderVO; +import com.baiye.notify.converter.UserAnnouncementConverter; +import com.baiye.notify.model.entity.UserAnnouncement; +import com.baiye.notify.model.vo.UserAnnouncementPageVO; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +/** + * @author Enzo + * @date 2024-4-1 + */ +@Mapper +public interface PayOrderMapper extends ExtendMapper { + + + /** + * 订单号查询订单 + * + * @param orderNo + * @return + */ + default List findByOrderNumber(String orderNo) { + LambdaQueryWrapperX wrapperX = new LambdaQueryWrapperX<>(); + return this.selectList(wrapperX.eq(PayOrder::getOrderNo, orderNo).orderByDesc(PayOrder::getId)); + } + + /** + * 条件查询分页 + * + * @param pageParam + * @param qo + * @return + */ + default PageResult queryPage(PageParam pageParam, PayOrderQo qo) { + IPage page = this.prodPage(pageParam); + LambdaQueryWrapperX wrapperX = WrappersX.lambdaQueryX(PayOrder.class); + if (StringUtils.isNotBlank(qo.getStartTime()) && StringUtils.isNotBlank(qo.getEndTime())) { + wrapperX.between(PayOrder::getCreateTime, qo.getStartTime(), qo.getEndTime()); + } + wrapperX.eqIfPresent(PayOrder::getOrderNo, qo.getOrderNo()).eqIfPresent(PayOrder::getUserId, qo.getUserId()).orderByDesc(PayOrder::getId); + this.selectPage(page, wrapperX); + IPage voPage = page.convert(PayOrderConverter.INSTANCE::entityToVo); + return new PageResult<>(voPage.getRecords(), voPage.getTotal()); + } +} diff --git a/admin/src/main/java/com/baiye/modules/distribute/mapper/WeChatAccountMapper.java b/admin/src/main/java/com/baiye/modules/distribute/mapper/WeChatAccountMapper.java new file mode 100644 index 0000000..b4c8676 --- /dev/null +++ b/admin/src/main/java/com/baiye/modules/distribute/mapper/WeChatAccountMapper.java @@ -0,0 +1,60 @@ +package com.baiye.modules.distribute.mapper; + +import cn.hutool.core.collection.CollUtil; +import com.baiye.constant.DefaultNumberConstants; +import com.baiye.domain.PageParam; +import com.baiye.domain.PageResult; +import com.baiye.extend.mybatis.plus.conditions.query.LambdaQueryWrapperX; +import com.baiye.extend.mybatis.plus.mapper.ExtendMapper; +import com.baiye.extend.mybatis.plus.toolkit.WrappersX; +import com.baiye.modules.distribute.converter.WeChatAccountConverter; +import com.baiye.modules.distribute.entity.WeChatAccount; +import com.baiye.modules.distribute.qo.AccountQo; +import com.baiye.modules.distribute.vo.WeChatAccountVO; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +/** + * @author Enzo + * @date 2024-3-27 + */ +@Mapper +public interface WeChatAccountMapper extends ExtendMapper { + /** + * 微信id查找微信用户 + * + * @param wxId + * @return + */ + default WeChatAccount findByWxId(String wxId) { + List selectList = this.selectList(WrappersX.lambdaQueryX(WeChatAccount.class).eqIfPresent + (WeChatAccount::getWxId, wxId).eqIfPresent(WeChatAccount::getDeleted, DefaultNumberConstants.ZERO_NUMBER).orderByDesc(WeChatAccount::getId)); + if (CollUtil.isNotEmpty(selectList)) { + return selectList.get(DefaultNumberConstants.ZERO_NUMBER); + } + return new WeChatAccount(); + } + + + /** + * 分页查询数据 + * + * @param pageParam + * @param qo + * @return + */ + default PageResult queryPage(PageParam pageParam, AccountQo qo) { + IPage page = this.prodPage(pageParam); + LambdaQueryWrapperX wrapperX = WrappersX.lambdaQueryX(WeChatAccount.class); + if (StringUtils.isNotBlank(qo.getStartTime()) && StringUtils.isNotBlank(qo.getEndTime())) { + wrapperX.between(WeChatAccount::getCreateTime, qo.getStartTime(), qo.getEndTime()); + } + wrapperX.likeIfPresent(WeChatAccount::getUsername, qo.getUsername()).eqIfPresent(WeChatAccount::getOwnerId, qo.getUserId()).orderByDesc(WeChatAccount::getId); + this.selectPage(page, wrapperX); + IPage voPage = page.convert(WeChatAccountConverter.INSTANCE::entityToVo); + return new PageResult<>(voPage.getRecords(), voPage.getTotal()); + } +} diff --git a/admin/src/main/java/com/baiye/modules/distribute/mapper/WeChatFriendMapper.java b/admin/src/main/java/com/baiye/modules/distribute/mapper/WeChatFriendMapper.java new file mode 100644 index 0000000..a40086e --- /dev/null +++ b/admin/src/main/java/com/baiye/modules/distribute/mapper/WeChatFriendMapper.java @@ -0,0 +1,15 @@ +package com.baiye.modules.distribute.mapper; + +import com.baiye.extend.mybatis.plus.mapper.ExtendMapper; +import com.baiye.modules.distribute.entity.WeChatFriedRecord; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author Enzo + * @date : 2024/4/2 + */ +@Mapper +public interface WeChatFriendMapper extends ExtendMapper { + + +} diff --git a/admin/src/main/java/com/baiye/modules/distribute/qo/AccountQo.java b/admin/src/main/java/com/baiye/modules/distribute/qo/AccountQo.java new file mode 100644 index 0000000..e1565f6 --- /dev/null +++ b/admin/src/main/java/com/baiye/modules/distribute/qo/AccountQo.java @@ -0,0 +1,30 @@ +package com.baiye.modules.distribute.qo; + +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +/** + * @author Enzo + * @date : 2024/3/29 + */ +@Data +public class AccountQo { + + + @Parameter(description = "开始时间") + private String startTime; + + @Parameter(description = "结束时间") + private String endTime; + + @Parameter(description = "用户昵称") + private String username; + + @Schema(title = "用户ID") + private Long userId; + + @Schema(title = "微信id") + private Long wxId; + +} diff --git a/admin/src/main/java/com/baiye/modules/distribute/qo/PayOrderQo.java b/admin/src/main/java/com/baiye/modules/distribute/qo/PayOrderQo.java new file mode 100644 index 0000000..d3cb6d7 --- /dev/null +++ b/admin/src/main/java/com/baiye/modules/distribute/qo/PayOrderQo.java @@ -0,0 +1,21 @@ +package com.baiye.modules.distribute.qo; + +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +public class PayOrderQo { + + @Schema(title = "订单号") + private String orderNo; + + @Parameter(description = "开始时间") + private String startTime; + + @Parameter(description = "结束时间") + private String endTime; + + @Schema(title = "用户ID") + private Long userId; +} diff --git a/admin/src/main/java/com/baiye/modules/distribute/service/AliPayService.java b/admin/src/main/java/com/baiye/modules/distribute/service/AliPayService.java new file mode 100644 index 0000000..80e4534 --- /dev/null +++ b/admin/src/main/java/com/baiye/modules/distribute/service/AliPayService.java @@ -0,0 +1,42 @@ +package com.baiye.modules.distribute.service; + + +import com.baiye.extend.mybatis.plus.service.ExtendService; +import com.baiye.modules.distribute.dto.AliPayPcDTO; +import com.baiye.modules.distribute.entity.PayOrder; +import com.baiye.modules.distribute.entity.WeChatAccount; +import com.baiye.result.R; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.Map; + +/** + * @author Enzo + * @date : 2021/6/16 + */ +public interface AliPayService extends ExtendService { + + + /** + * pc端创建支付宝订单 + * @param aliPayPcDTO + * @return + */ + Map aliPayPc(AliPayPcDTO aliPayPcDTO); + + /** + * 支付宝订单回调 + * + * @param request + * @return + */ + String pcNotifyResponse(HttpServletRequest request); + + /** + * 订单编号查询 + * @param orderNo + * @return + */ + PayOrder findOrderByNo(String orderNo); +} diff --git a/admin/src/main/java/com/baiye/modules/distribute/service/LoginEquipmentService.java b/admin/src/main/java/com/baiye/modules/distribute/service/LoginEquipmentService.java new file mode 100644 index 0000000..8f2b4ef --- /dev/null +++ b/admin/src/main/java/com/baiye/modules/distribute/service/LoginEquipmentService.java @@ -0,0 +1,51 @@ +package com.baiye.modules.distribute.service; + +import com.baiye.domain.PageParam; +import com.baiye.domain.PageResult; +import com.baiye.extend.mybatis.plus.service.ExtendService; +import com.baiye.modules.distribute.entity.LoginEquipment; +import com.baiye.modules.distribute.qo.AccountQo; +import com.baiye.modules.distribute.vo.AddFriendVo; +import com.baiye.modules.distribute.vo.WeChatAccountVO; +import com.baiye.modules.distribute.vo.WeChatAddFriendVo; + +import java.util.List; + +/** + * @author Enzo + * @date : 2024/4/1 + */ +public interface LoginEquipmentService extends ExtendService { + + /** + * 分页查询数据 + * @param pageParam + * @param qo + * @return + */ + + PageResult queryPage(PageParam pageParam, AccountQo qo); + + /** + * 设备号查询用户ID + * @param pit + * @return + */ + LoginEquipment queryByRobot(String pit); + + + /** + * 时间查询数据 + * @param dayNum + * @param wxId + * @return + */ + List queryByDate(Integer dayNum, String wxId); + + /** + * 机器人查询 + * @param robotId + * @return + */ + LoginEquipment queryByRobotId(Integer robotId); +} diff --git a/admin/src/main/java/com/baiye/modules/distribute/service/PayOrderService.java b/admin/src/main/java/com/baiye/modules/distribute/service/PayOrderService.java new file mode 100644 index 0000000..ac82bc5 --- /dev/null +++ b/admin/src/main/java/com/baiye/modules/distribute/service/PayOrderService.java @@ -0,0 +1,23 @@ +package com.baiye.modules.distribute.service; + +import com.baiye.domain.PageParam; +import com.baiye.domain.PageResult; +import com.baiye.extend.mybatis.plus.service.ExtendService; +import com.baiye.modules.distribute.entity.PayOrder; +import com.baiye.modules.distribute.qo.PayOrderQo; +import com.baiye.modules.distribute.vo.PayOrderVO; + +/** + * @author Enzo + * @date : 2024/3/28 + */ +public interface PayOrderService extends ExtendService { + + /** + * 分页查询数据 + * @param pageParam + * @param qo + * @return + */ + PageResult queryPage(PageParam pageParam, PayOrderQo qo); +} diff --git a/admin/src/main/java/com/baiye/modules/distribute/service/WeChatService.java b/admin/src/main/java/com/baiye/modules/distribute/service/WeChatService.java new file mode 100644 index 0000000..13707d4 --- /dev/null +++ b/admin/src/main/java/com/baiye/modules/distribute/service/WeChatService.java @@ -0,0 +1,95 @@ +package com.baiye.modules.distribute.service; + +import com.baiye.domain.PageParam; +import com.baiye.domain.PageResult; +import com.baiye.extend.mybatis.plus.service.ExtendService; +import com.baiye.modules.distribute.dto.CreateCodeDTO; +import com.baiye.modules.distribute.dto.PushCodeDTO; +import com.baiye.modules.distribute.dto.WeChatAddFriendDTO; +import com.baiye.modules.distribute.dto.WeChatUserLoginDTO; +import com.baiye.modules.distribute.entity.WeChatAccount; +import com.baiye.modules.distribute.qo.AccountQo; +import com.baiye.modules.distribute.vo.AddFriendVo; +import com.baiye.modules.distribute.vo.WeChatAccountVO; + +/** + * @author Enzo + * @date 2023/9/5 + */ +public interface WeChatService extends ExtendService { + + + /** + * 创建二维码 + * + * @param createCodeDTO + * @return + */ + String createQrCode(CreateCodeDTO createCodeDTO); + + /** + * 添加好友 + * + * @param weChatFriendDTO + * @return + */ + Boolean addFriend(WeChatAddFriendDTO weChatFriendDTO); + + /** + * 分页查询账号信息 + * @param pageParam + * @param qo + * @return + */ + PageResult queryPage(PageParam pageParam, AccountQo qo); + + /** + * 创建设备 + * + * @param num + * @param packageType + * @param userId + * @return + */ + Boolean createEquipment(Integer num, Integer packageType, Long userId); + + /** + * 弹窗登录 + * @param pushCodeDTO + * @return + */ + String pushCode(PushCodeDTO pushCodeDTO); + + /** + * 全局回调设置 + * @param callbackUrl + * @return + */ + String globalSetting(String callbackUrl); + + /** + * 登录微信账号 + * @param userLoginDTO + * @param status + * @return + */ + Boolean weChatAccountLoginByRespon(WeChatUserLoginDTO userLoginDTO, Integer status); + + + /** + * 分页数据 + * @param pageParam + * @param qo + * @return + */ + PageResult queryDateData(PageParam pageParam, AccountQo qo); + + /** + * + * 设备续费 + * @param robotId + * @param payType + * @return + */ + Boolean equipmentRenewal(Integer robotId, Integer payType); +} diff --git a/admin/src/main/java/com/baiye/modules/distribute/service/WechatCallbackService.java b/admin/src/main/java/com/baiye/modules/distribute/service/WechatCallbackService.java new file mode 100644 index 0000000..a987486 --- /dev/null +++ b/admin/src/main/java/com/baiye/modules/distribute/service/WechatCallbackService.java @@ -0,0 +1,17 @@ +package com.baiye.modules.distribute.service; + +import com.baiye.result.WeChatResponse; + +/** + * @author Enzo + * @date : 2024/4/1 + */ +public interface WechatCallbackService { + + + /** + * 微信回调数据 + * @param body + */ + void analyticalData(WeChatResponse body); +} diff --git a/admin/src/main/java/com/baiye/modules/distribute/service/WechatFriendService.java b/admin/src/main/java/com/baiye/modules/distribute/service/WechatFriendService.java new file mode 100644 index 0000000..7669aef --- /dev/null +++ b/admin/src/main/java/com/baiye/modules/distribute/service/WechatFriendService.java @@ -0,0 +1,18 @@ +package com.baiye.modules.distribute.service; + +import com.baiye.extend.mybatis.plus.service.ExtendService; +import com.baiye.modules.distribute.dto.WeChatFriendDTO; +import com.baiye.modules.distribute.entity.WeChatFriedRecord; + +/** + * @author Enzo + * @date : 2024/4/2 + */ +public interface WechatFriendService extends ExtendService { + + /** + * 添加好友 + * @param weChatFriendDTO + */ + void addFriendByResponse(WeChatFriendDTO weChatFriendDTO); +} diff --git a/admin/src/main/java/com/baiye/modules/distribute/service/impl/AliPayServiceImpl.java b/admin/src/main/java/com/baiye/modules/distribute/service/impl/AliPayServiceImpl.java new file mode 100644 index 0000000..d2c60f6 --- /dev/null +++ b/admin/src/main/java/com/baiye/modules/distribute/service/impl/AliPayServiceImpl.java @@ -0,0 +1,189 @@ +package com.baiye.modules.distribute.service.impl; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.text.CharSequenceUtil; +import cn.hutool.core.text.StrPool; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.NumberUtil; +import com.alipay.easysdk.factory.Factory; +import com.alipay.easysdk.kernel.util.ResponseChecker; +import com.alipay.easysdk.payment.page.models.AlipayTradePagePayResponse; +import com.baiye.constant.DefaultNumberConstants; +import com.baiye.constant.PayConstants; +import com.baiye.constant.enums.ResponseCode; +import com.baiye.exception.BadRequestException; +import com.baiye.extend.mybatis.plus.service.impl.ExtendServiceImpl; +import com.baiye.modules.distribute.dto.AliPayPcDTO; +import com.baiye.modules.distribute.entity.PayOrder; +import com.baiye.modules.distribute.mapper.PayOrderMapper; +import com.baiye.modules.distribute.service.AliPayService; +import com.baiye.modules.distribute.service.WeChatService; +import com.baiye.security.util.SecurityUtils; +import com.baiye.system.properties.AliPayProperties; +import com.google.common.collect.Maps; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.servlet.http.HttpServletRequest; +import java.math.BigDecimal; +import java.nio.charset.StandardCharsets; +import java.time.LocalTime; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author Enzo + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class AliPayServiceImpl extends ExtendServiceImpl implements AliPayService { + + + @Value("${snowflake.workerId}") + private int workerId; + + @Value("${snowflake.datacenterId}") + private int datacenterId; + + + private final AliPayProperties aliPay; + + + private final WeChatService weChatService; + + + @Override + @Transactional(rollbackFor = Exception.class) + public String pcNotifyResponse(HttpServletRequest request) { + log.info("================ the pay notify enter date as {} ================", DateUtil.date()); + //获取支付宝GET过来反馈信息 + Map params = new HashMap<>(DefaultNumberConstants.SIXTEEN_NUMBER); + // 处理乱码问题 + checkParam(request, params); + Boolean flag; + try { + flag = Factory.Payment.Common().verifyNotify(params); + //商户订单号 + String orderNo = new String(request.getParameter(PayConstants.OUT_TRADE_NO).getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8); + //前台回调验证签名 v1 or v2 + if (flag != null && flag) { + log.info("========== order verify signature success the orderNumber as {} ==========", orderNo); + List orderList = baseMapper.findByOrderNumber(orderNo); + if (CollUtil.isNotEmpty(orderList) && orderList.get(DefaultNumberConstants.ZERO_NUMBER).getStatus() == DefaultNumberConstants.ZERO_NUMBER) { + PayOrder order = orderList.get(DefaultNumberConstants.ZERO_NUMBER); + log.info("========== the order notify success date as {} ==========", DateUtil.date()); + order.setPayTime(DateUtil.date()); + order.setStatus(DefaultNumberConstants.ONE_NUMBER); + + if (Boolean.TRUE.equals(order.getIsRenew())){ + // 创建设备 + weChatService.createEquipment(order.getNum(), order.getPayType(), order.getUserId()); + } + if (Boolean.TRUE.equals(order.getIsRenew())){ + // 设备设备 + weChatService.equipmentRenewal(order.getRobotId(), order.getPayType()); + } + + return this.updateById(order) ? ResponseCode.SUCCESS.getDesc() : ResponseCode.FAILURE.getDesc(); + } + } + } catch (Exception e) { + log.error("the pc response error time {}", LocalTime.now()); + throw new BadRequestException(ResponseCode.CALLBACK_FAILED.getDesc()); + } + return ResponseCode.FAILURE.getDesc(); + } + + + private void checkParam(HttpServletRequest request, Map params) { + Map requestParams = request.getParameterMap(); + if (CollectionUtils.isNotEmpty(requestParams.keySet())) { + for (Map.Entry stringEntry : requestParams.entrySet()) { + String[] values = stringEntry.getValue(); + String valueStr = CharSequenceUtil.EMPTY; + for (int i = 0; i < values.length; i++) { + valueStr = (i == values.length - 1) ? valueStr + values[i] : valueStr + values[i] + StrPool.COMMA; + } + /* //乱码解决,这段代码在出现乱码时使用 + valueStr = new String(valueStr.getBytes + (StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8);*/ + params.put(stringEntry.getKey(), valueStr); + } + } + } + + @Override + public Map aliPayPc(AliPayPcDTO aliPayPcDTO) { + Map map = Maps.newHashMap(); + BigDecimal amount = new BigDecimal(DefaultNumberConstants.ZERO_NUMBER); + Integer num = aliPayPcDTO.getNum(); + Integer robotId = aliPayPcDTO.getRobotId(); + Boolean isRenew = aliPayPcDTO.getIsRenew(); + Integer packageType = aliPayPcDTO.getPackageType(); + if (packageType == DefaultNumberConstants.ONE_NUMBER) { + amount = new BigDecimal(DefaultNumberConstants.THIRTY); + } + if (packageType == DefaultNumberConstants.TWO_NUMBER) { + // 九折 + amount = NumberUtil.mul(NumberUtil.mul + (String.valueOf(DefaultNumberConstants.THIRTY), String.valueOf(DefaultNumberConstants.THREE_NUMBER)), 0.9); + } + if (packageType == DefaultNumberConstants.THREE_NUMBER) { + // 八折 + amount = NumberUtil.mul(NumberUtil.mul + (String.valueOf(DefaultNumberConstants.THIRTY), String.valueOf(DefaultNumberConstants.TWELVE_NUMBER)), 0.8); + } + // amount = NumberUtil.mul(amount, num); + amount = new BigDecimal("0.01"); + + // 查询记录 + try { + // 雪花算法id + String orderNo = String.valueOf(IdUtil.getSnowflake(workerId, datacenterId).nextId()); + // 生成返回对象 + AlipayTradePagePayResponse response = Factory.Payment.Page().pay(PayConstants.PAY_TITLE + orderNo, orderNo, String.valueOf(amount), aliPay.getReturnUrl()); + if (ResponseChecker.success(response)) { + boolean result = savePayOrder(num, isRenew, robotId, packageType, amount, orderNo); + log.info("============= the save order result {} =============", result); + map.put("payUrl", response.getBody()); + map.put("orderNo", orderNo); + return map; + } + } catch (Exception e) { + log.error("the order failed purchaser {} time {}", aliPayPcDTO.getRemark(), LocalTime.now()); + throw new BadRequestException(ResponseCode.ALI_PAY_ERROR.getDesc()); + } + throw new BadRequestException(ResponseCode.ALI_PAY_ERROR.getDesc()); + } + + private Boolean savePayOrder(Integer num, Boolean isRenew, Integer robotId, Integer packageType, BigDecimal amount, String orderNo) { + PayOrder order = new PayOrder(); + order.setNum(num); + order.setAmount(amount); + order.setRobotId(robotId); + order.setIsRenew(isRenew); + order.setOrderNo(orderNo); + order.setPayType(packageType); + order.setUserId(SecurityUtils.getCurrentUserId()); + order.setStatus(DefaultNumberConstants.ZERO_NUMBER); + return this.save(order); + } + + + @Override + public PayOrder findOrderByNo(String orderNo) { + List payOrderList = baseMapper.findByOrderNumber(orderNo); + if (CollUtil.isNotEmpty(payOrderList)) { + return payOrderList.get(DefaultNumberConstants.ZERO_NUMBER); + } + return new PayOrder(); + } + +} diff --git a/admin/src/main/java/com/baiye/modules/distribute/service/impl/LoginEquipmentServiceImpl.java b/admin/src/main/java/com/baiye/modules/distribute/service/impl/LoginEquipmentServiceImpl.java new file mode 100644 index 0000000..d734a1a --- /dev/null +++ b/admin/src/main/java/com/baiye/modules/distribute/service/impl/LoginEquipmentServiceImpl.java @@ -0,0 +1,62 @@ +package com.baiye.modules.distribute.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.baiye.domain.PageParam; +import com.baiye.domain.PageResult; +import com.baiye.extend.mybatis.plus.service.impl.ExtendServiceImpl; +import com.baiye.extend.mybatis.plus.toolkit.WrappersX; +import com.baiye.modules.distribute.entity.LoginEquipment; +import com.baiye.modules.distribute.mapper.LoginEquipmentMapper; +import com.baiye.modules.distribute.qo.AccountQo; +import com.baiye.modules.distribute.service.LoginEquipmentService; +import com.baiye.modules.distribute.vo.WeChatAccountVO; +import com.baiye.modules.distribute.vo.WeChatAddFriendVo; +import com.baiye.security.util.SecurityUtils; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @author Enzo + * @date : 2024/4/1 + */ +@Service +@RequiredArgsConstructor + +public class LoginEquipmentServiceImpl extends ExtendServiceImpl implements + LoginEquipmentService { + + @Override + public PageResult queryPage(PageParam pageParam, AccountQo qo) { + qo.setUserId(SecurityUtils.getCurrentUserId()); + return baseMapper.queryPage(pageParam, qo); + } + + @Override + public LoginEquipment queryByRobot(String pit) { + LoginEquipment loginEquipment = baseMapper.selectOne + (WrappersX.lambdaQueryX(LoginEquipment.class).eq(LoginEquipment::getPit, pit)); + if (ObjectUtil.isNotNull(loginEquipment) && ObjectUtil.isNotNull(loginEquipment.getUserId())) { + return loginEquipment; + } + return new LoginEquipment(); + } + + @Override + public List queryByDate(Integer dayNum, String wxId) { + return baseMapper.queryByDate(dayNum, wxId); + } + + @Override + public LoginEquipment queryByRobotId(Integer robotId) { + LoginEquipment loginEquipment = baseMapper.selectOne + (WrappersX.lambdaQueryX(LoginEquipment.class).eq(LoginEquipment::getRobotId, robotId)); + if (ObjectUtil.isNotNull(loginEquipment) && ObjectUtil.isNotNull(loginEquipment.getUserId())) { + return loginEquipment; + } + return new LoginEquipment(); + } + + +} diff --git a/admin/src/main/java/com/baiye/modules/distribute/service/impl/PayOrderServiceImpl.java b/admin/src/main/java/com/baiye/modules/distribute/service/impl/PayOrderServiceImpl.java new file mode 100644 index 0000000..f7c2c02 --- /dev/null +++ b/admin/src/main/java/com/baiye/modules/distribute/service/impl/PayOrderServiceImpl.java @@ -0,0 +1,29 @@ +package com.baiye.modules.distribute.service.impl; + +import com.baiye.domain.PageParam; +import com.baiye.domain.PageResult; +import com.baiye.extend.mybatis.plus.service.impl.ExtendServiceImpl; +import com.baiye.modules.distribute.entity.PayOrder; +import com.baiye.modules.distribute.mapper.PayOrderMapper; +import com.baiye.modules.distribute.qo.PayOrderQo; +import com.baiye.modules.distribute.service.PayOrderService; +import com.baiye.modules.distribute.vo.PayOrderVO; +import com.baiye.security.util.SecurityUtils; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** + * @author Enzo + * @date : 2024/3/28 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class PayOrderServiceImpl extends ExtendServiceImpl implements PayOrderService { + @Override + public PageResult queryPage(PageParam pageParam, PayOrderQo qo) { + qo.setUserId(SecurityUtils.getCurrentUserId()); + return baseMapper.queryPage(pageParam, qo); + } +} diff --git a/admin/src/main/java/com/baiye/modules/distribute/service/impl/WeChatServiceImpl.java b/admin/src/main/java/com/baiye/modules/distribute/service/impl/WeChatServiceImpl.java new file mode 100644 index 0000000..7899ed9 --- /dev/null +++ b/admin/src/main/java/com/baiye/modules/distribute/service/impl/WeChatServiceImpl.java @@ -0,0 +1,235 @@ +package com.baiye.modules.distribute.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.text.CharSequenceUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.http.HttpStatus; +import cn.hutool.http.HttpUtil; +import cn.hutool.json.JSONUtil; +import com.baiye.constant.DefaultNumberConstants; +import com.baiye.constant.ResponseConstant; +import com.baiye.constant.WeChatRequestConstants; +import com.baiye.constant.WechatCallbackConstant; +import com.baiye.constant.enums.ResponseCode; +import com.baiye.domain.PageParam; +import com.baiye.domain.PageResult; +import com.baiye.enums.PackageEnum; +import com.baiye.exception.BadRequestException; +import com.baiye.extend.mybatis.plus.service.impl.ExtendServiceImpl; +import com.baiye.modules.distribute.dto.*; +import com.baiye.modules.distribute.entity.LoginEquipment; +import com.baiye.modules.distribute.entity.WeChatAccount; +import com.baiye.modules.distribute.mapper.WeChatAccountMapper; +import com.baiye.modules.distribute.qo.AccountQo; +import com.baiye.modules.distribute.service.LoginEquipmentService; +import com.baiye.modules.distribute.service.WeChatService; +import com.baiye.modules.distribute.vo.AddFriendVo; +import com.baiye.modules.distribute.vo.WeChatAccountVO; +import com.baiye.modules.distribute.vo.WeChatAddFriendVo; +import com.baiye.result.WeChatResponse; +import com.baiye.security.util.SecurityUtils; +import com.baiye.system.properties.WeChatProperties; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.Lists; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @author Enzo + * @date 2024-3-27 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class WeChatServiceImpl extends ExtendServiceImpl implements WeChatService { + + + private final WeChatProperties weChatProperties; + + private final LoginEquipmentService loginEquipmentService; + + @Override + public String createQrCode(CreateCodeDTO createCodeDTO) { + Map beanToMap = BeanUtil.beanToMap(createCodeDTO); + String getQrCodeResult = HttpUtil.get + (weChatProperties.getGatewayHost().concat(WeChatRequestConstants.GET_QR_CODE) + .concat(weChatProperties.getAppKey()), beanToMap); + if (StringUtils.isNotBlank(getQrCodeResult)) { + WeChatResponse weChatResponse = JSONUtil.toBean(getQrCodeResult, WeChatResponse.class); + return weChatResponse.getMsg(); + } + throw new BadRequestException("创建失败"); + } + + @Override + public Boolean addFriend(WeChatAddFriendDTO weChatFriendDTO) { + Map map = BeanUtil.beanToMap(weChatFriendDTO); + String addedFriendResult = HttpUtil.post(weChatProperties.getGatewayHost().concat + (WeChatRequestConstants.WE_CHAT_ADD_FRIEND).concat(weChatProperties.getAppKey()), map); + if (addedFriendResult.contains(ResponseCode.SUCCESS.getDesc())) { + WeChatResponse weChatResponse = JSONUtil.toBean(addedFriendResult, WeChatResponse.class); + if (weChatResponse.getStatus() == HttpStatus.HTTP_OK) { + return Boolean.TRUE; + } + } + return Boolean.FALSE; + } + + @Override + public PageResult queryPage(PageParam pageParam, AccountQo qo) { + qo.setUserId(SecurityUtils.getCurrentUserId()); + return baseMapper.queryPage(pageParam, qo); + } + + @Override + public Boolean createEquipment(Integer num, Integer packageType, Long userId) { + Map map = ImmutableMap.of("num", num); + String createEquipmentResult = HttpUtil.get + (weChatProperties.getGatewayHost().concat(WeChatRequestConstants.CREATE_EQUIPMENT) + .concat(weChatProperties.getAppKey()), map); + if (StringUtils.isNotBlank(createEquipmentResult)) { + WeChatResponse weChatResponse = JSONUtil.toBean(createEquipmentResult, WeChatResponse.class); + if (weChatResponse.getStatus() == ResponseConstant.SUCCESS) { + Integer dayNum = PackageEnum.find(packageType); + if (dayNum > DefaultNumberConstants.ZERO_NUMBER) { + EquipmentDTO dto = BeanUtil.toBean(weChatResponse.getData(), EquipmentDTO.class); + DateTime dateTime = DateUtil.offsetDay(DateUtil.date(), dayNum); + for (EquipmentDTO.RoBotDTO botDTO : dto.getData()) { + // 创建账号 + LoginEquipment equipment = new LoginEquipment(); + equipment.setUserId(userId); + equipment.setExpirationTime(dateTime); + equipment.setRobotId(botDTO.getRobotId()); + equipment.setDeviceNumber(botDTO.getRobotAccount()); + loginEquipmentService.save(equipment); + } + } + return Boolean.TRUE; + } + } + return Boolean.FALSE; + } + + @Override + public String pushCode(PushCodeDTO pushCodeDTO) { + Map beanToMap = BeanUtil.beanToMap(pushCodeDTO); + String pushQrCodeResult = HttpUtil.get + (weChatProperties.getGatewayHost().concat(WeChatRequestConstants.GET_PUSH_LOGIN) + .concat(weChatProperties.getAppKey()), beanToMap); + if (StringUtils.isNotBlank(pushQrCodeResult)) { + WeChatResponse weChatResponse = JSONUtil.toBean(pushQrCodeResult, WeChatResponse.class); + return weChatResponse.getMsg(); + } + return CharSequenceUtil.EMPTY; + } + + @Override + public String globalSetting(String callbackUrl) { + List strings = Lists.newArrayList(callbackUrl); + Map map = ImmutableMap.of("callbackUrls", strings); + String globalSetting = HttpUtil.post + (weChatProperties.getGatewayHost().concat + (WeChatRequestConstants.GLOBAL_SETTING).concat(weChatProperties.getAppKey()), JSONUtil.toJsonStr(map)); + if (StringUtils.isNotBlank(globalSetting)) { + WeChatResponse weChatResponse = JSONUtil.toBean(globalSetting, WeChatResponse.class); + return weChatResponse.getMsg(); + } + return CharSequenceUtil.EMPTY; + } + + @Override + public Boolean weChatAccountLoginByRespon(WeChatUserLoginDTO userLoginDTO, Integer status) { + LoginEquipment loginEquipment = loginEquipmentService.queryByRobot(userLoginDTO.getPit()); + if (ObjectUtil.isNotNull(loginEquipment) && ObjectUtil.isNotNull(loginEquipment.getId())) { + WeChatAccount byWxId = this.baseMapper.findByWxId(userLoginDTO.getWxId()); + if (ObjectUtil.isNotNull(byWxId) && ObjectUtil.isNotNull(byWxId.getId())) { + byWxId = new WeChatAccount(); + BeanUtil.copyProperties(userLoginDTO, byWxId); + byWxId.setHeaderUrl(userLoginDTO.getBigHeadImgUrl()); + byWxId.setUserId(loginEquipment.getUserId()); + return this.save(byWxId); + } + byWxId.setStatus(status == WechatCallbackConstant.LOGIN_SUCCESS ? + DefaultNumberConstants.ONE_NUMBER : DefaultNumberConstants.MINUS_ONE_NUMBER); + return this.updateById(byWxId); + } + return Boolean.FALSE; + } + + + @Override + public PageResult queryDateData(PageParam pageParam, AccountQo qo) { + qo.setUserId(SecurityUtils.getCurrentUserId()); + List addFriendVos = Lists.newArrayList(); + PageResult accountVo = baseMapper.queryPage(pageParam, qo); + for (WeChatAccountVO vo : accountVo.getRecords()) { + AddFriendVo addFriendVo = new AddFriendVo(); + BeanUtil.copyProperties(vo, addFriendVo); + // 查询数据天数据 + List weChatAddFriendVos = + loginEquipmentService.queryByDate(DefaultNumberConstants.MINUS_FIFTEEN_NUMBER, vo.getWxId()); + // 转为map + Map> map = weChatAddFriendVos.stream().collect + (Collectors.groupingBy(WeChatAddFriendVo::getDayStr)); + Integer newFriendsInitiativeNum = DefaultNumberConstants.ZERO_NUMBER; + Integer newPassiveNum = DefaultNumberConstants.ZERO_NUMBER; + List newArrayList = Lists.newArrayList(); + for (int i = 0; i < DefaultNumberConstants.FIFTEEN_NUMBER; i++) { + // 时间格式 + String dateTime = DateUtil.format(DateUtil.offsetDay(DateUtil.date(), -i), DatePattern.NORM_DATE_PATTERN); + AddFriendVo.FriendDTO dto = new AddFriendVo.FriendDTO(); + dto.setDayStr(dateTime); + if (map.containsKey(dateTime)) { + List voList = map.get(dateTime); + Map voMap = + voList.stream().collect(Collectors.toMap + (WeChatAddFriendVo::getAddFriendType, chatAddFriendVo -> chatAddFriendVo)); + if (voMap.get(DefaultNumberConstants.ONE_NUMBER) != null) { + WeChatAddFriendVo weChatAddFriendVo = voMap.get(DefaultNumberConstants.ONE_NUMBER); + Integer num = weChatAddFriendVo.getNum(); + newFriendsInitiativeNum += num; + dto.setNewDayFriendsInitiativeNum(num); + } + if (voMap.get(DefaultNumberConstants.TWO_NUMBER) != null) { + WeChatAddFriendVo weChatAddFriendVo = voMap.get(DefaultNumberConstants.TWO_NUMBER); + Integer num = weChatAddFriendVo.getNum(); + newPassiveNum += num; + dto.setNewDayPassiveNum(num); + } + } + newArrayList.add(dto); + addFriendVo.setList(newArrayList); + } + + addFriendVo.setNewFriendsInitiativeNum(newFriendsInitiativeNum); + addFriendVo.setNewPassiveNum(newPassiveNum); + addFriendVos.add(addFriendVo); + } + return new PageResult<>(addFriendVos, accountVo.getTotal()); + } + + @Override + public Boolean equipmentRenewal(Integer robotId, Integer payType) { + // TODO 设备续费 + Integer dayNum = PackageEnum.find(payType); + if (dayNum > DefaultNumberConstants.ZERO_NUMBER) { + LoginEquipment loginEquipment = loginEquipmentService.queryByRobotId(robotId); + if (ObjectUtil.isNotNull(loginEquipment) && ObjectUtil.isNotNull(loginEquipment.getId())) { + DateTime dateTime = DateUtil.offsetDay(loginEquipment.getExpirationTime(), dayNum); + loginEquipment.setExpirationTime(dateTime); + return loginEquipmentService.updateById(loginEquipment); + } + } + return Boolean.FALSE; + } + +} diff --git a/admin/src/main/java/com/baiye/modules/distribute/service/impl/WechatCallbackServiceImpl.java b/admin/src/main/java/com/baiye/modules/distribute/service/impl/WechatCallbackServiceImpl.java new file mode 100644 index 0000000..93f0bad --- /dev/null +++ b/admin/src/main/java/com/baiye/modules/distribute/service/impl/WechatCallbackServiceImpl.java @@ -0,0 +1,82 @@ +package com.baiye.modules.distribute.service.impl; + +import cn.hutool.json.JSONUtil; +import com.baiye.constant.DefaultNumberConstants; +import com.baiye.constant.WechatCallbackConstant; +import com.baiye.modules.distribute.dto.WeChatFriendDTO; +import com.baiye.modules.distribute.dto.WeChatUserLoginDTO; +import com.baiye.modules.distribute.entity.LoginEquipment; +import com.baiye.modules.distribute.service.LoginEquipmentService; +import com.baiye.modules.distribute.service.WeChatService; +import com.baiye.modules.distribute.service.WechatCallbackService; +import com.baiye.modules.distribute.service.WechatFriendService; +import com.baiye.notify.event.StationNotifyPushEvent; +import com.baiye.notify.model.domain.AnnouncementNotifyInfo; +import com.baiye.result.WeChatResponse; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.ApplicationContext; +import org.springframework.stereotype.Service; + +import java.time.LocalDateTime; +import java.util.Collections; + +/** + * @author Enzo + * @date : 2024/4/1 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class WechatCallbackServiceImpl implements WechatCallbackService { + + + private final WeChatService weChatService; + + private final ApplicationContext publisher; + + + private final WechatFriendService wechatFriendService; + + private final LoginEquipmentService loginEquipmentService; + + + @Override + public void analyticalData(WeChatResponse weChatResponse) { + Integer status = weChatResponse.getStatus(); + switch (status) { + case WechatCallbackConstant.LOGIN_OUT: + case WechatCallbackConstant.LOGIN_SUCCESS: + wechatLogin(weChatResponse); + break; + case WechatCallbackConstant.LOGIN_FAIL: + // 登录失败接口 + break; + case WechatCallbackConstant.THROUGH_FRIENDS: + viaFriendRequest(weChatResponse); + break; + default: + } + } + + private void viaFriendRequest(WeChatResponse weChatResponse) { + WeChatFriendDTO weChatFriendDTO = + JSONUtil.toBean(JSONUtil.toJsonStr(weChatResponse.getData()), WeChatFriendDTO.class); + wechatFriendService.addFriendByResponse(weChatFriendDTO); + } + + public void wechatLogin(WeChatResponse weChatResponse) { + WeChatUserLoginDTO userLoginDTO = + JSONUtil.toBean(JSONUtil.toJsonStr(weChatResponse.getData()), WeChatUserLoginDTO.class); + weChatService.weChatAccountLoginByRespon(userLoginDTO, weChatResponse.getStatus()); + LoginEquipment robot = loginEquipmentService.queryByRobot(userLoginDTO.getPit()); + AnnouncementNotifyInfo notifyInfo = new AnnouncementNotifyInfo(); + notifyInfo.setTitle("新消息通知"); + notifyInfo.setMessageKey(String.valueOf(robot.getId())); + notifyInfo.setContent("您有一条新线索请及时查收!"); + notifyInfo.setCreateTime(LocalDateTime.now()); + notifyInfo.setMessageType(DefaultNumberConstants.ONE_NUMBER); + // 发送消息 + publisher.publishEvent(new StationNotifyPushEvent(notifyInfo, Collections.singletonList(robot.getUserId()))); + } +} diff --git a/admin/src/main/java/com/baiye/modules/distribute/service/impl/WechatFriendServiceImpl.java b/admin/src/main/java/com/baiye/modules/distribute/service/impl/WechatFriendServiceImpl.java new file mode 100644 index 0000000..d168152 --- /dev/null +++ b/admin/src/main/java/com/baiye/modules/distribute/service/impl/WechatFriendServiceImpl.java @@ -0,0 +1,38 @@ +package com.baiye.modules.distribute.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; +import com.baiye.extend.mybatis.plus.service.impl.ExtendServiceImpl; +import com.baiye.extend.mybatis.plus.toolkit.WrappersX; +import com.baiye.modules.distribute.dto.WeChatFriendDTO; +import com.baiye.modules.distribute.entity.WeChatFriedRecord; +import com.baiye.modules.distribute.mapper.WeChatFriendMapper; +import com.baiye.modules.distribute.service.WechatFriendService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @author Enzo + * @date : 2024/3/28 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class WechatFriendServiceImpl extends ExtendServiceImpl implements WechatFriendService { + + + @Override + public void addFriendByResponse(WeChatFriendDTO weChatFriendDTO) { + List weChatFriedRecords = + this.baseMapper.selectList(WrappersX.lambdaQueryX(WeChatFriedRecord.class).eq + (WeChatFriedRecord::getRobotWxId, weChatFriendDTO.getRobotWxId()).eq(WeChatFriedRecord::getAlias, weChatFriendDTO.getAlias())); + if (CollUtil.isEmpty(weChatFriedRecords)) { + WeChatFriedRecord weChatFriedRecord = new WeChatFriedRecord(); + BeanUtil.copyProperties(weChatFriendDTO,weChatFriedRecord); + this.baseMapper.insert(weChatFriedRecord); + } + } +} diff --git a/admin/src/main/java/com/baiye/modules/distribute/vo/AddFriendVo.java b/admin/src/main/java/com/baiye/modules/distribute/vo/AddFriendVo.java new file mode 100644 index 0000000..e97fcd6 --- /dev/null +++ b/admin/src/main/java/com/baiye/modules/distribute/vo/AddFriendVo.java @@ -0,0 +1,49 @@ +package com.baiye.modules.distribute.vo; + +import com.baiye.constant.DefaultNumberConstants; +import lombok.*; + +import java.util.List; + +/** + * @author Enzo + * @date : 2024/4/3 + */ +@Data +public class AddFriendVo { + + + private Integer robotId; + + + private String robotWxId; + + + private String robotWxNick; + + private String headerUrl; + + + private Integer newFriendsInitiativeNum; + + private Integer newPassiveNum; + + private List list; + + /** + * list + */ + @AllArgsConstructor + @NoArgsConstructor + @ToString + @Getter + @Setter + public static class FriendDTO { + + private String dayStr; + + private Integer newDayFriendsInitiativeNum = DefaultNumberConstants.ZERO_NUMBER; + + private Integer newDayPassiveNum = DefaultNumberConstants.ZERO_NUMBER; + } +} diff --git a/admin/src/main/java/com/baiye/modules/distribute/vo/PayOrderVO.java b/admin/src/main/java/com/baiye/modules/distribute/vo/PayOrderVO.java new file mode 100644 index 0000000..1bf9624 --- /dev/null +++ b/admin/src/main/java/com/baiye/modules/distribute/vo/PayOrderVO.java @@ -0,0 +1,45 @@ +package com.baiye.modules.distribute.vo; + +import cn.hutool.core.date.DatePattern; +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.Date; + +@Data +public class PayOrderVO { + + @Schema(name = "pay_type") + private Integer payType; + + @Schema(name = "order_number") + private String orderNumber; + + @Schema(name = "status") + private Integer status; + + @Schema(name = "purchaser") + private String purchaser; + + @Schema(name = "pay_time") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DatePattern.NORM_DATETIME_PATTERN, timezone = "GMT+8") + private Date payTime; + + @Schema(name = "amount") + private Double amount; + + @Schema(name = "user_id") + private Long userId; + + + @Schema(title = "创建时间") + private LocalDateTime createTime; + + @Schema(title = "修改时间") + private LocalDateTime updateTime; + +} diff --git a/admin/src/main/java/com/baiye/modules/distribute/vo/WeChatAccountVO.java b/admin/src/main/java/com/baiye/modules/distribute/vo/WeChatAccountVO.java new file mode 100644 index 0000000..00d1393 --- /dev/null +++ b/admin/src/main/java/com/baiye/modules/distribute/vo/WeChatAccountVO.java @@ -0,0 +1,79 @@ +package com.baiye.modules.distribute.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.Date; + +/** + * @author Enzo + * @date : 2024/3/26 + */ +@Data +public class WeChatAccountVO { + + + @Schema(title = "用户id") + private Long userId; + + + @Schema(title = "设备信息") + private String deviceInformation; + + @Schema(title = "用户名称") + private String username; + + @Schema(title = "用户id") + private String nickname; + + @Schema(title = "城市信息") + private String cityInfo; + + @Schema(title = "登录类型") + private Integer loginType; + + @Schema(name = "登录时间") + private Date loginDate; + + @Schema(name = "头像") + private String headerUrl; + + @Schema(name = "微信ID") + private String wxId; + + @Schema(name = "性别") + private Integer sex; + + @Schema(name = "拥有者") + private Long ownerId; + + + + @Schema(title = "创建时间") + private LocalDateTime createTime; + + + @Schema(title = "修改时间") + private LocalDateTime updateTime; + + @Schema(title = "在线状态") + private Integer status; + + + @Schema(title = "备注") + private String remark; + + @Schema(title = "微信号") + private String weChatNo; + + @Schema(title = "设备号") + private Integer robotId; + + private String deviceNumber; + + @Schema(title = "过期时间") + private LocalDateTime expirationTime; + + +} diff --git a/admin/src/main/java/com/baiye/modules/distribute/vo/WeChatAddFriendVo.java b/admin/src/main/java/com/baiye/modules/distribute/vo/WeChatAddFriendVo.java new file mode 100644 index 0000000..10e7ec4 --- /dev/null +++ b/admin/src/main/java/com/baiye/modules/distribute/vo/WeChatAddFriendVo.java @@ -0,0 +1,18 @@ +package com.baiye.modules.distribute.vo; + +import lombok.Data; + +/** + * @author Enzo + * @date : 2024/4/3 + */ +@Data +public class WeChatAddFriendVo { + + private String dayStr; + + private Integer num; + + private Integer addFriendType; + +} diff --git a/admin/src/main/java/com/baiye/properties/PayConfig.java b/admin/src/main/java/com/baiye/properties/PayConfig.java new file mode 100644 index 0000000..6e11e51 --- /dev/null +++ b/admin/src/main/java/com/baiye/properties/PayConfig.java @@ -0,0 +1,40 @@ +package com.baiye.properties; + +import com.alipay.easysdk.factory.Factory; +import com.alipay.easysdk.kernel.Config; +import com.baiye.system.properties.AliPayProperties; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.stereotype.Component; + +/** + * @author Enzo + */ +@Component +@Configuration +@EnableConfigurationProperties({AliPayProperties.class}) +public class PayConfig { + + private final AliPayProperties aliPay; + + public PayConfig(AliPayProperties aliPay) { + this.aliPay = aliPay; + Config config = new Config(); + config.protocol = aliPay.getProtocol(); + config.gatewayHost = aliPay.getGatewayHost(); + config.signType = aliPay.getSignType(); + config.appId = aliPay.getAppId(); + /** + * 为避免私钥随源码泄露,推荐从文件中读取私钥字符串而不是写入源码中 + */ + config.merchantPrivateKey = aliPay.getMerchantPrivateKey(); + config.alipayPublicKey = aliPay.getAliPayPublicKey(); + config.notifyUrl = aliPay.getNotifyUrl(); + config.encryptKey = aliPay.getEncryptKey(); + Factory.setOptions(config); + } + + public AliPayProperties getConfig(){ + return aliPay; + } +} diff --git a/admin/src/main/resources/application-dev.yml b/admin/src/main/resources/application-dev.yml index 0f66754..c97a0e9 100644 --- a/admin/src/main/resources/application-dev.yml +++ b/admin/src/main/resources/application-dev.yml @@ -1,6 +1,6 @@ spring: datasource: - url: jdbc:mysql://39.100.77.21:3306/ad_distribute?rewriteBatchedStatements=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowMultiQueries=true + url: jdbc:mysql://39.100.77.21:3306/marketing-platform?rewriteBatchedStatements=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowMultiQueries=true username: root password: y7z7noq2 redis: @@ -11,6 +11,25 @@ spring: database: 7 +alipay: + protocol: https + # 不需要加/gateway.do,这是新旧SDK的区别,切记 + # gatewayHost: openapi.alipaydev.com + gatewayHost: openapi.alipay.com + signType: RSA2 + # 填APPID + appId: 2021003125644167 + # 填应用私钥,注意是应用私钥,不要填成公钥了_(:з」∠)_ + merchantPrivateKey: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCNIuelR5MHMY3vtl2KEgWUbhHMHuBwxHMVONuUYKlt4grOGJtaPKitgh9MxrvaxmAvH0LilQQKd5T07os9jC2XpNmH0BA6rNVNgBwjWNllqKo+jT8OiKvog9uBuZYfHdkLRhjObrTkSo97jO5Y32591GZHG+cQ/5bgMC0KXlQMOv5piLqUfKYDJ5pWBdS5gqcCkUABZsrW+C8nD7lvOuVglN1AGQiXQzj+Iu3K5xcUg+d3q0nWXhKPpotSolFGSakLEqUja/MnsILVHVw8MYMuq6LxzQ7DQ5fCzMPMIF5kYTynsAV5SoE90ilj1vmmI4aa7dc+9OmG/vXyFuoOEK1bAgMBAAECggEAH0K/9EfqNQmw2ouWJGLhgYLvxjqAk/mvU+AIItFWNdR/eC7TGiWdZvEPZb4PFeIio81Uz0MaZgceozHC/Zry7kfBNufK8HQfus7JbLrdTDsTmk9GzD1RdmreT9l/etztmiWokPDMeFRbe443rM+wdYZ6MP3pLEawcG+7SjSigSKrcpltAJ49NhHyfJxnnCye4mM8PevVGXe4nGv/vKJbAfzl5V8MsSY+SVktj6jOUTSa6nypISvQElyv8jeNH/bTDjg0DOHzL4tUHaVbTqHhtqbNo3n9VuKz4shVAp3I+9PpcTQTueTsM9L0Y+j84bV3VZlTIGGzDUD4qWDhUKPJ4QKBgQDQFNB2vLDJLeGfn+SnCncnr/wQo1xJez+deBqJXoDhDWDuZVcWNaEOWgfDronm8dIedWMYHD//WN0GtA5foAUdlaNq/jeKdJFgzJ/hoOtOveHY1OWqJHiJ/YMRBMuLn/E4Jit7q215JU6Jur1T+70HxrUFTQfY8GWdMvSDFHCKDwKBgQCto24hqgcEDKoR3/sm5sUKqYZTHLeQbniM0D5EcOkBNw7UXGYQSbz7mJ34XQKTfrOL71A+LkjxdMfs5q56yxeOQxR4EBO/Fpz8xPRlud5uIp4eTQVJ8I01meZyvojkF6mO5C4tbcXJOpnpU8ohoeTRu7th0oUYObGUYmn0qzuj9QKBgDCOOtsKSwKXF0hFanjkQ0vakCpdxIJNJVoclayqhc5+bbkTos/G8e9EaP1rtDhVA6Ah6l7M8M4oMWOIDraXw7nUmk60RcekTexVs5VWFLLKMnKDs5gRbKNeqgAFq23Ig+SDW7A/H4uefgY7skRvwPuYjdNP113zMvMM2evgkCZXAoGAP5przvz/EOaqrV2EG93QM3WhdHRCcS9mDP6CsINDdmR6lCM8Z577EJX4128KcIiqsAl7NSuzIG8MhKSDKQuXl07PAqOw+AAKhTSH6XNKHMGldaf01f69WvMCzOkqL5LTUzoWCCH7nxhOJH/CvMsWjBTeMJjyk8seVyIteaf3crkCgYEAmY8OC+Vdo/yop+ooedCnvBC7GVMfcqR6+rIQ+ZnKom7jhByIN6w7eEVAnmNa9dCv/pig7HaYbitWmCNf9tbqFfcdY6e5Svele3amgDM9iqtdJ9Rf1PpDPZw+gmjRIxGs6W8wnl1Sqvpk8pFUA/2xlT6sXpfxra9N09LS0ttU+cU= + # 填支付宝公钥,注意不是生成的应用公钥 + aliPayPublicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyvegkGCrz1i5/K7VzQxvoZm4G73pSPNu9R5ET8YonIuDVoHkHaYvQQizLdRkTyBsYIik8FXsSDmVsw5MLMQ7OAlZ97nQBkz5TxOX6Px766nUpSVoWXoAz6cpIlWnwgir4t1ph88Ph56l+qmqW3gUj/U6MIuzjxBJlijTMHl96its95Nd4cEFx4j+sFuRYob6D0kcemC7xEFuty7bdupda51Z56GYI1YjuUTryTlFOHZbOSThc2ZMzNC1gPG25bn2Lx6sDuPByk4KW4rQ2v7mSfeUuZZRdjtVSC0WV2M2Cv5L8eLFvZRgNYnXrUJYhnRpT+OBAvJZXaWU2nv/bNe/UQIDAQAB + # 回调地址 + notifyUrl: http://39.100.77.21:8088/pay/aliPay/pay-notify + # 支付宝成功支付跳转页面 + returnUrl: http://39.100.77.21:8001/dashboard + # 可设置AES密钥,调用AES加解密相关接口时需要(可选) + encryptKey: + springdoc: swagger-ui: diff --git a/admin/src/main/resources/application-prod.yml b/admin/src/main/resources/application-prod.yml index 1bd82a9..7bafbad 100644 --- a/admin/src/main/resources/application-prod.yml +++ b/admin/src/main/resources/application-prod.yml @@ -1,6 +1,6 @@ spring: datasource: - url: jdbc:mysql://localhost:3306/ad_distribute?rewriteBatchedStatements=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowMultiQueries=true + url: jdbc:mysql://localhost:3306/marketing-platform?rewriteBatchedStatements=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowMultiQueries=true username: root password: 7f2vvawx redis: @@ -15,3 +15,21 @@ ballcat: openapi: enabled: false +alipay: + protocol: https + # 不需要加/gateway.do,这是新旧SDK的区别,切记 + # gatewayHost: openapi.alipaydev.com + gatewayHost: openapi.alipay.com + signType: RSA2 + # 填APPID + appId: 2021003125644167 + # 填应用私钥,注意是应用私钥,不要填成公钥了_(:з」∠)_ + merchantPrivateKey: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCNIuelR5MHMY3vtl2KEgWUbhHMHuBwxHMVONuUYKlt4grOGJtaPKitgh9MxrvaxmAvH0LilQQKd5T07os9jC2XpNmH0BA6rNVNgBwjWNllqKo+jT8OiKvog9uBuZYfHdkLRhjObrTkSo97jO5Y32591GZHG+cQ/5bgMC0KXlQMOv5piLqUfKYDJ5pWBdS5gqcCkUABZsrW+C8nD7lvOuVglN1AGQiXQzj+Iu3K5xcUg+d3q0nWXhKPpotSolFGSakLEqUja/MnsILVHVw8MYMuq6LxzQ7DQ5fCzMPMIF5kYTynsAV5SoE90ilj1vmmI4aa7dc+9OmG/vXyFuoOEK1bAgMBAAECggEAH0K/9EfqNQmw2ouWJGLhgYLvxjqAk/mvU+AIItFWNdR/eC7TGiWdZvEPZb4PFeIio81Uz0MaZgceozHC/Zry7kfBNufK8HQfus7JbLrdTDsTmk9GzD1RdmreT9l/etztmiWokPDMeFRbe443rM+wdYZ6MP3pLEawcG+7SjSigSKrcpltAJ49NhHyfJxnnCye4mM8PevVGXe4nGv/vKJbAfzl5V8MsSY+SVktj6jOUTSa6nypISvQElyv8jeNH/bTDjg0DOHzL4tUHaVbTqHhtqbNo3n9VuKz4shVAp3I+9PpcTQTueTsM9L0Y+j84bV3VZlTIGGzDUD4qWDhUKPJ4QKBgQDQFNB2vLDJLeGfn+SnCncnr/wQo1xJez+deBqJXoDhDWDuZVcWNaEOWgfDronm8dIedWMYHD//WN0GtA5foAUdlaNq/jeKdJFgzJ/hoOtOveHY1OWqJHiJ/YMRBMuLn/E4Jit7q215JU6Jur1T+70HxrUFTQfY8GWdMvSDFHCKDwKBgQCto24hqgcEDKoR3/sm5sUKqYZTHLeQbniM0D5EcOkBNw7UXGYQSbz7mJ34XQKTfrOL71A+LkjxdMfs5q56yxeOQxR4EBO/Fpz8xPRlud5uIp4eTQVJ8I01meZyvojkF6mO5C4tbcXJOpnpU8ohoeTRu7th0oUYObGUYmn0qzuj9QKBgDCOOtsKSwKXF0hFanjkQ0vakCpdxIJNJVoclayqhc5+bbkTos/G8e9EaP1rtDhVA6Ah6l7M8M4oMWOIDraXw7nUmk60RcekTexVs5VWFLLKMnKDs5gRbKNeqgAFq23Ig+SDW7A/H4uefgY7skRvwPuYjdNP113zMvMM2evgkCZXAoGAP5przvz/EOaqrV2EG93QM3WhdHRCcS9mDP6CsINDdmR6lCM8Z577EJX4128KcIiqsAl7NSuzIG8MhKSDKQuXl07PAqOw+AAKhTSH6XNKHMGldaf01f69WvMCzOkqL5LTUzoWCCH7nxhOJH/CvMsWjBTeMJjyk8seVyIteaf3crkCgYEAmY8OC+Vdo/yop+ooedCnvBC7GVMfcqR6+rIQ+ZnKom7jhByIN6w7eEVAnmNa9dCv/pig7HaYbitWmCNf9tbqFfcdY6e5Svele3amgDM9iqtdJ9Rf1PpDPZw+gmjRIxGs6W8wnl1Sqvpk8pFUA/2xlT6sXpfxra9N09LS0ttU+cU= + # 填支付宝公钥,注意不是生成的应用公钥 + aliPayPublicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyvegkGCrz1i5/K7VzQxvoZm4G73pSPNu9R5ET8YonIuDVoHkHaYvQQizLdRkTyBsYIik8FXsSDmVsw5MLMQ7OAlZ97nQBkz5TxOX6Px766nUpSVoWXoAz6cpIlWnwgir4t1ph88Ph56l+qmqW3gUj/U6MIuzjxBJlijTMHl96its95Nd4cEFx4j+sFuRYob6D0kcemC7xEFuty7bdupda51Z56GYI1YjuUTryTlFOHZbOSThc2ZMzNC1gPG25bn2Lx6sDuPByk4KW4rQ2v7mSfeUuZZRdjtVSC0WV2M2Cv5L8eLFvZRgNYnXrUJYhnRpT+OBAvJZXaWU2nv/bNe/UQIDAQAB + # 回调地址 + notifyUrl: https://baiyee.vip/pay/aliPay/pay-notify + # 支付宝成功支付跳转页面 + returnUrl: https://baiyee.vip/dashboard + # 可设置AES密钥,调用AES加解密相关接口时需要(可选) + encryptKey: diff --git a/admin/src/main/resources/application.yml b/admin/src/main/resources/application.yml index 303709d..26120d0 100644 --- a/admin/src/main/resources/application.yml +++ b/admin/src/main/resources/application.yml @@ -30,7 +30,7 @@ mybatis-plus: ballcat: security: # 前端传输密码的 AES 加密密钥 - password-secret-key: '==marketing-platform=' + password-secret-key: 'market-platform=' oauth2: authorizationserver: # 登陆验证码是否开启 @@ -52,6 +52,9 @@ ballcat: - /favicon.ico - /captcha/** - /outside/** + - /wechat/global/setting + - /pay/aliPay/pay-notify + - /api/wechat/callback # 项目 redis 缓存的 key 前缀 redis: key-prefix: 'marketing:' @@ -97,3 +100,7 @@ elasticjob: snowflake: workerId: 10 datacenterId: 10 + +wechat: + gatewayHost: http://43.143.56.20:1620 + appKey: Dn4emsLhVFaZ4aw2sQSmWoh2oz0n1taa diff --git a/admin/src/main/resources/mapper/LoginEquipmentMapper.xml b/admin/src/main/resources/mapper/LoginEquipmentMapper.xml new file mode 100644 index 0000000..eb795b9 --- /dev/null +++ b/admin/src/main/resources/mapper/LoginEquipmentMapper.xml @@ -0,0 +1,52 @@ + + + + + wa.username, + wa.nickname, + wa.city_info, + wa.login_type, + wa.header_url, + wa.wx_id, + wa.sex, + wa.status, + wa.we_chat_no, + wa.remark, + wa.create_time, + wa.update_time, + le.robot_id, + le.device_number, + le.expiration_time + + + + + + diff --git a/marketing-platform-common/common-core/src/main/java/com/baiye/constant/DefaultNumberConstants.java b/marketing-platform-common/common-core/src/main/java/com/baiye/constant/DefaultNumberConstants.java index b0646f4..94d2c4b 100644 --- a/marketing-platform-common/common-core/src/main/java/com/baiye/constant/DefaultNumberConstants.java +++ b/marketing-platform-common/common-core/src/main/java/com/baiye/constant/DefaultNumberConstants.java @@ -17,6 +17,11 @@ public class DefaultNumberConstants { */ public static final int MINUS_THREE_NUMBER = -3; + /** + * + */ + public static final int MINUS_FIFTEEN_NUMBER = -15; + /** * -2 */ diff --git a/marketing-platform-common/common-core/src/main/java/com/baiye/constant/WechatCallbackConstant.java b/marketing-platform-common/common-core/src/main/java/com/baiye/constant/WechatCallbackConstant.java new file mode 100644 index 0000000..6948434 --- /dev/null +++ b/marketing-platform-common/common-core/src/main/java/com/baiye/constant/WechatCallbackConstant.java @@ -0,0 +1,46 @@ +package com.baiye.constant; + +import lombok.Getter; + +/** + * @author Enzo + * @date : 2024/4/1 + */ + +@Getter +public class WechatCallbackConstant { + private WechatCallbackConstant() { + + } + + /** + * 扫码返回 + */ + public static final int SCAN_CODE = 222; + + + /** + * 登录成功 + */ + public static final int LOGIN_SUCCESS = 201; + + + /** + * 登录失败 + */ + public static final int LOGIN_FAIL = 212; + + + /** + * 退出登录 + */ + public static final int LOGIN_OUT = 210; + + + /** + * 通过好友 + */ + public static final int THROUGH_FRIENDS = 1003; + + +} diff --git a/marketing-platform-common/common-core/src/main/java/com/baiye/constant/enums/ResponseCode.java b/marketing-platform-common/common-core/src/main/java/com/baiye/constant/enums/ResponseCode.java new file mode 100644 index 0000000..2cfa4a5 --- /dev/null +++ b/marketing-platform-common/common-core/src/main/java/com/baiye/constant/enums/ResponseCode.java @@ -0,0 +1,225 @@ +package com.baiye.constant.enums; + +import lombok.Getter; + +/** + * @author q + */ +@Getter +public enum ResponseCode { + + /** + * 成功 + */ + SUCCESS("1", "success"), + + /** + * 失败 + */ + FAILURE("0", "failure "), + + /** + * 充值成功 + */ + RECHARGE_SUCCESS("1020", "充值成功"), + + /** + * 手机号码不正确 + */ + PHONE_NUMBER_IS_INCORRECT("1022", "手机号码不正确"), + + /** + * 验证码错误 + */ + VERIFICATION_CODE_PARAMETER_ERROR("1023", "验证码错误"), + + /** + * 验证码不存在或已过期 + */ + VERIFICATION_NOT_EXIST_HAS_EXPIRED("1024", "验证码不存在或已过期"), + + /** + * 读取文件失败 + */ + READ_FILE_ERROR("1021", "读取文件失败"), + /** + * 参数错误 + */ + PARAMETER_ERROR("1001", "参数错误"), + + /** + * 用户信息错误 + */ + USER_INFORMATION_ERROR("1002", "用户信息错误"), + + /** + * 账户已被禁用 + */ + ACCOUNT_DISABLED("1025", "账户已被禁用"), + + /** + * 套餐不存在或已过期 + */ + PACKAGE_ERROR("1026", "套餐不存在或已过期"), + + /** + * 支付宝支付失败 + */ + ALI_PAY_ERROR("1016", "支付宝支付失败"), + + /** + * 支付宝支付回调失败 + */ + CALLBACK_FAILED("1017", "支付宝支付回调失败"), + + /** + * 账号已过期 + */ + ACCOUNT_EXPIRED("1020", "账号已过期,无法激活"), + /** + * 呼叫失败 + */ + CALL_ERROR("1014", "呼叫失败"), + + /** + * axb参数配置 + */ + AXB_CONFIGURATION_ERROR("1015", "axb参数配置错误"), + + + /** + * 数据解析失败 + */ + DECRYPTION_FAILED("1012", "数据解析失败"), + + /** + * 比率不足100%,无法分配 + */ + RATIO_FAILED("1013", "比率不足100%,无法分配"), + + + /** + * axb参数配置 + */ + WRONG_USER_NAME_PASSWORD("1016", "用户名或密码不正确"), + + /** + * 账户余额不足 + */ + INSUFFICIENT_ACCOUNT_BALANCE("1019", "账户余额不足"), + + /** + * 连接成功 + */ + CONNECTION_SUCCEEDED("1027", "连接成功"), + + /** + * 获取二维码失败 + */ + FAILED_GET_QR_CODE("1028", "获取二维码失败"), + + /** + * 获取模板失败 + */ + FAILED_GET_TEMPLATE("1029", "获取模板失败,请先配置发送模板"), + + /** + * 发送消息至少配置一条 + */ + TEMPLATE_CHANGE_ERROR("1031", "发送消息至少配置一条!"), + + /** + * 添加好友失败 + */ + FAILED_ADD_FRIEND("1032", "添加好友失败!"), + + /** + * 当前账户未登录或不在线 + */ + ACCOUNT_NOT_LOGGED_OR_NOT_ONLINE("1030", "当前账户未登录或不在线"), + + /** + * 修改套餐失败 + */ + UPDATE_COMBO_FRIEND("1033", "修改套餐失败!"), + + /** + * 发送邮件失败 + */ + SEND_MAIL_FRIEND("1034", "发送邮件失败!"), + + /** + * 发送邮件失败 + */ + SEND_MAIL_NUM_FRIEND("1035", "发送数量不足100!"), + + /** + * 用户被禁11005用 + */ + USER_DISABLED("11004", "用户被禁用"), + /** + * 用户被锁定 + */ + USER_LOCKED("11005", "用户被锁定"), + /** + * 用户名或密码错误 + */ + USER_PASSWORD_ERROR("11006", "用户名或密码错误"), + /** + * 用户密码过期 + */ + USER_PASSWORD_EXPIRED("11007", "用户密码过期"), + /** + * 用户账号过期 + */ + USER_ACCOUNT_EXPIRED("11008", "用户账号已过期"), + /** + * 没有该用户 + */ + USER_NOT_EXIST("11009", "没有该用户"), + /** + * 用户登录失败 + */ + USER_LOGIN_FAIL("11010", "用户登录失败"), + /** + * 验证码错误 + */ + VERIFY_CODE_ERROR("11011", "验证码错误"), + + /** + * 修改用户信息失败 + */ + UPDATE_USER_ERROR("11012", "修改用户信息失败"), + + /** + * 兑换数据失败 + */ + DATA_CONVERSION_FAILURE("11013", "兑换数据失败,请再次重试"), + + /** + * 发送邮件失败 + */ + SEND_MAIL_MAX_NUM_FRIEND("1036", "发送数量超出最大范围!"), + + /** + * 该批次号已经存在 + */ + BATCH_NUMBER_ALREADY_EXISTS("1037", "该批次号已经存在!"), + + /** + * 非超级管理员不能修改数据 + */ + NON_SUPER_ADMINISTRATORS_CANNOT_MODIFY_DATA("1018", "非管理员不能修改数据"); + + + private final String code; + + private final String desc; + + ResponseCode(String code, String desc) { + this.code = code; + this.desc = desc; + } + + +} diff --git a/marketing-platform-common/common-core/src/main/java/com/baiye/enums/ChannelTypeEnum.java b/marketing-platform-common/common-core/src/main/java/com/baiye/enums/ChannelTypeEnum.java index eb2c48d..bea881d 100644 --- a/marketing-platform-common/common-core/src/main/java/com/baiye/enums/ChannelTypeEnum.java +++ b/marketing-platform-common/common-core/src/main/java/com/baiye/enums/ChannelTypeEnum.java @@ -4,8 +4,8 @@ import lombok.AllArgsConstructor; import lombok.Getter; /** - * @author wjt - * @date 2023/12/7 + * @author Enzo + * @date 2024-4-1 */ @Getter @AllArgsConstructor diff --git a/marketing-platform-common/common-core/src/main/java/com/baiye/enums/ClueSourceEnum.java b/marketing-platform-common/common-core/src/main/java/com/baiye/enums/ClueSourceEnum.java deleted file mode 100644 index d46e21f..0000000 --- a/marketing-platform-common/common-core/src/main/java/com/baiye/enums/ClueSourceEnum.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright 2019-2020 Zheng Jie - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.baiye.enums; - -import lombok.AllArgsConstructor; -import lombok.Getter; - -/** - *

- * 验证码业务场景对应的 Redis 中的 key - *

- * - * @author Zheng Jie - * @date 2020-05-02 - */ -@Getter -@AllArgsConstructor -public enum ClueSourceEnum { - - /** - * 表单上传 - */ - TABLE_UPLOAD("table upload", "表单上传"), - - /** - * 门店分发 - */ - STORE_DISTRIBUTION("store distribution:", "门店分发"); - - - private final String key; - private final String description; -} diff --git a/marketing-platform-common/common-core/src/main/java/com/baiye/enums/MailRequestEnum.java b/marketing-platform-common/common-core/src/main/java/com/baiye/enums/MailRequestEnum.java deleted file mode 100644 index ad2b61b..0000000 --- a/marketing-platform-common/common-core/src/main/java/com/baiye/enums/MailRequestEnum.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.baiye.enums; - -import lombok.AllArgsConstructor; -import lombok.Getter; - -/** - * @author Enzo - * @date : 2023/5/16 - */ -@Getter -@AllArgsConstructor -public enum MailRequestEnum { - - /** - * 手动发送 - */ - MM("MM", "dmp::manual::"), - - /** - * 性别 - */ - GG("GG", "mail::gender::"), - - - /** - * 定时 - */ - BY("BY", "dmp::request::"); - - - private final String type; - - private final String cacheName; - - public static MailRequestEnum find(String str) { - for (MailRequestEnum dataScopeEnum : MailRequestEnum.values()) { - if (dataScopeEnum.getCacheName().equalsIgnoreCase(str)) { - return dataScopeEnum; - } - } - return null; - } - - -} diff --git a/marketing-platform-common/common-core/src/main/java/com/baiye/enums/PackageEnum.java b/marketing-platform-common/common-core/src/main/java/com/baiye/enums/PackageEnum.java new file mode 100644 index 0000000..dc59632 --- /dev/null +++ b/marketing-platform-common/common-core/src/main/java/com/baiye/enums/PackageEnum.java @@ -0,0 +1,43 @@ +package com.baiye.enums; + +import com.baiye.constant.DefaultNumberConstants; +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.Objects; + +/** + * @author Enzo + * @date : 2024/4/1 + */ +@Getter +@AllArgsConstructor +public enum PackageEnum { + /** + * 月度 + */ + MONTH(1, 30), + + /** + * 季度 + */ + QUARTER(2, 90), + + /** + * 年度 + */ + YEAR(3, 365); + + + private final Integer type; + private final Integer num; + + public static Integer find(Integer val) { + for (PackageEnum packageEnum : PackageEnum.values()) { + if (Objects.equals(packageEnum.getType(), val)) { + return packageEnum.getNum(); + } + } + return DefaultNumberConstants.MINUS_ONE_NUMBER; + } +} diff --git a/marketing-platform-common/common-core/src/main/java/com/baiye/util/RedisUtils.java b/marketing-platform-common/common-core/src/main/java/com/baiye/util/RedisUtils.java index d8f1b64..d68d631 100644 --- a/marketing-platform-common/common-core/src/main/java/com/baiye/util/RedisUtils.java +++ b/marketing-platform-common/common-core/src/main/java/com/baiye/util/RedisUtils.java @@ -5,7 +5,6 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.text.StrPool; import cn.hutool.core.util.ObjectUtil; import com.baiye.constant.DefaultNumberConstants; -import com.baiye.enums.MailRequestEnum; import com.google.common.collect.Lists; import com.google.common.collect.Sets; import lombok.extern.slf4j.Slf4j; @@ -22,7 +21,6 @@ import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.util.*; -import java.util.List; import java.util.concurrent.TimeUnit; @Component @@ -698,24 +696,6 @@ public class RedisUtils { log.debug("--------------------------------------------"); } - /** - * 批次获取 - * - * @param prefix - * @param ids - */ - public String acquisitionBatch(String cacheType) { - String format = DateUtil.format(DateUtil.date(), DatePattern.PURE_DATE_PATTERN); - Integer num = (Integer) get(cacheType.concat(format)); - Integer batch = ObjectUtil.isNull(num) ? - DefaultNumberConstants.ONE_NUMBER : num + DefaultNumberConstants.ONE_NUMBER; - // 保存批次号 - set(cacheType.concat(format), batch, DefaultNumberConstants.ONE_NUMBER, TimeUnit.DAYS); - String parameter = MailRequestEnum.find(cacheType).getType(); - return parameter.concat(StrPool.DASHED). - concat(format).concat(StrPool.DASHED).concat(String.valueOf(batch)); - - } /** * 存储经纬度 diff --git a/marketing-platform-common/common-model/src/main/java/com/baiye/result/WeChatResponse.java b/marketing-platform-common/common-model/src/main/java/com/baiye/result/WeChatResponse.java new file mode 100644 index 0000000..9da46eb --- /dev/null +++ b/marketing-platform-common/common-model/src/main/java/com/baiye/result/WeChatResponse.java @@ -0,0 +1,29 @@ +package com.baiye.result; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.io.Serializable; + +/** + * @author Enzo + * @date : 2022/6/23 + */ +@Getter +@Setter +@ToString +public class WeChatResponse implements Serializable { + + private static final long serialVersionUID = 6763956796736587193L; + + private T data; + + private String msg; + + private Integer status; + + private Boolean success; + + +} diff --git a/marketing-platform-notify/distribute-notify-biz/src/main/java/com/baiye/notify/handler/NotifyInfoDelegateHandler.java b/marketing-platform-notify/distribute-notify-biz/src/main/java/com/baiye/notify/handler/NotifyInfoDelegateHandler.java index b9ace65..24267c4 100644 --- a/marketing-platform-notify/distribute-notify-biz/src/main/java/com/baiye/notify/handler/NotifyInfoDelegateHandler.java +++ b/marketing-platform-notify/distribute-notify-biz/src/main/java/com/baiye/notify/handler/NotifyInfoDelegateHandler.java @@ -14,39 +14,40 @@ import java.util.Map; /** * 消息处理代理 * - * @author huyuanzhi * @param 消息类型 + * @author huyuanzhi */ @Slf4j @Component @AllArgsConstructor public class NotifyInfoDelegateHandler { - private final List> notifyInfoHandlers; - - private Map, NotifyInfoHandler> handlerMap; - - @PostConstruct - public void init() { - handlerMap = new HashMap<>(notifyInfoHandlers.size()); - for (NotifyInfoHandler handler : notifyInfoHandlers) { - handlerMap.put(handler.getNotifyClass(), handler); - } - } - - /** - * 代理方法 - * @param userIdList 发送用户列表 - * @param info 消息 - */ - public void handle(List userIdList, T info) { - Assert.notNull(info, "event message cant be null!"); - NotifyInfoHandler notifyInfoHandler = handlerMap.get(info.getClass()); - if (notifyInfoHandler == null) { - log.warn("no notifyHandler bean for class:{},please check!", info.getClass().getName()); - return; - } - notifyInfoHandler.handle(userIdList, info); - } + private final List> notifyInfoHandlers; + + private Map, NotifyInfoHandler> handlerMap; + + @PostConstruct + public void init() { + handlerMap = new HashMap<>(notifyInfoHandlers.size()); + for (NotifyInfoHandler handler : notifyInfoHandlers) { + handlerMap.put(handler.getNotifyClass(), handler); + } + } + + /** + * 代理方法 + * + * @param userIdList 发送用户列表 + * @param info 消息 + */ + public void handle(List userIdList, T info) { + Assert.notNull(info, "event message cant be null!"); + NotifyInfoHandler notifyInfoHandler = handlerMap.get(info.getClass()); + if (notifyInfoHandler == null) { + log.warn("no notifyHandler bean for class:{},please check!", info.getClass().getName()); + return; + } + notifyInfoHandler.handle(userIdList, info); + } } diff --git a/marketing-platform-notify/distribute-notify-biz/src/main/java/com/baiye/notify/handler/NotifyInfoHandler.java b/marketing-platform-notify/distribute-notify-biz/src/main/java/com/baiye/notify/handler/NotifyInfoHandler.java index b496303..33b9ed0 100644 --- a/marketing-platform-notify/distribute-notify-biz/src/main/java/com/baiye/notify/handler/NotifyInfoHandler.java +++ b/marketing-platform-notify/distribute-notify-biz/src/main/java/com/baiye/notify/handler/NotifyInfoHandler.java @@ -2,7 +2,6 @@ package com.baiye.notify.handler; import com.baiye.notify.model.domain.NotifyInfo; -import com.baiye.system.model.entity.SysUser; import java.util.List; diff --git a/marketing-platform-system/system-biz/src/main/java/com/baiye/system/properties/AliPayProperties.java b/marketing-platform-system/system-biz/src/main/java/com/baiye/system/properties/AliPayProperties.java new file mode 100644 index 0000000..e639b56 --- /dev/null +++ b/marketing-platform-system/system-biz/src/main/java/com/baiye/system/properties/AliPayProperties.java @@ -0,0 +1,30 @@ +package com.baiye.system.properties; +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; + +/** + * @author Enzo + */ +@Data +@ConfigurationProperties(prefix = "alipay") +public class AliPayProperties { + + private String protocol; + + private String gatewayHost; + + private String signType; + + private String appId; + + private String merchantPrivateKey; + + private String aliPayPublicKey; + + private String notifyUrl; + + private String encryptKey; + + private String returnUrl; + +} diff --git a/marketing-platform-system/system-biz/src/main/java/com/baiye/system/properties/WeChatProperties.java b/marketing-platform-system/system-biz/src/main/java/com/baiye/system/properties/WeChatProperties.java new file mode 100644 index 0000000..f4d210b --- /dev/null +++ b/marketing-platform-system/system-biz/src/main/java/com/baiye/system/properties/WeChatProperties.java @@ -0,0 +1,23 @@ +package com.baiye.system.properties; + +import lombok.Getter; +import lombok.Setter; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * @author Enzo + * @date : 2022/6/24 + */ +@Getter +@Setter +@Component +@ConfigurationProperties(prefix = "wechat") +public class WeChatProperties { + + private String gatewayHost; + + + private String appKey; + +} diff --git a/marketing-platform-system/system-model/src/main/java/com/baiye/system/model/dto/SysUserNameRoleDTO.java b/marketing-platform-system/system-model/src/main/java/com/baiye/system/model/dto/SysUserNameRoleDTO.java index f16321c..87b461b 100644 --- a/marketing-platform-system/system-model/src/main/java/com/baiye/system/model/dto/SysUserNameRoleDTO.java +++ b/marketing-platform-system/system-model/src/main/java/com/baiye/system/model/dto/SysUserNameRoleDTO.java @@ -3,8 +3,8 @@ package com.baiye.system.model.dto; import lombok.Data; /** - * @author wjt - * @date 2023/9/15 + * @author Enzo + * @date 2024-4-1 */ @Data public class SysUserNameRoleDTO { diff --git a/pom.xml b/pom.xml index 1a81836..2374d62 100644 --- a/pom.xml +++ b/pom.xml @@ -51,6 +51,7 @@ 3.5.3.1 3.5.10 4.1.2 + 2.2.0 1.3.2 2.2.0 2.20.70 @@ -403,6 +404,15 @@ ${zip4j.version} + + + + com.alipay.sdk + alipay-easysdk + ${alipay.version} + + +