jiangqs
2023-08-06 431dde90aa20f7652092fc0bfa9e6a1a28b06b9f
Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/HongRuiTang
145个文件已修改
1个文件已删除
16个文件已添加
3870 ■■■■ 已修改文件
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/constant/AppErrorConstant.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/AppBaseDto.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/AppEditUserDto.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/CodeGetDto.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/MemberTotalChangeDto.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/poji/shop/Shop.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/poji/shop/ShopProportionVo.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/MerMemberCouponVo.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteFileFallbackFactory.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteGoodsFallbackFactory.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteShopFallbackFactory.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteFileService.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteGoodsService.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteShopService.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-auth/src/main/java/com/ruoyi/auth/fliter/ParamsAuthFilter.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/StringUtils.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/utils/SecurityUtils.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/controller/FileController.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/ActivityCodeService.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/ActivityCodeServiceImpl.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/utils/OBSUploadUtils.java 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/MgtActivityController.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/MgtGoodsController.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/pojo/activity/Activity.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/AppGoodsInfoVo.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/AppShoppingCartVo.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/AppSimpleActivityGoodsVo.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/AppSimpleGoodsVo.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/MerActivityPageVo.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/MerGoodsPageVo.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/MgtActivityGoodsListVo.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/MgtActivityPageVo.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/MgtGoodsEditInfoVo.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/MgtGoodsPageVo.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/MgtGoodsTotalVo.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/fliter/ParamsAuthFilter.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/activity/ActivityServiceImpl.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/resources/mapper/activity/ActivityMapper.xml 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/business/MerMemberController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/console/MemberController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/management/MgtMemberController.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/miniapp/AppMemberController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/dto/MerMemberAddDto.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/dto/MerMemberEditDto.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/pojo/member/MemberTotal.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerMemberBasicFileVo.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerMemberInfoVo.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MgtMemberSuggestPageVo.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/fliter/ParamsAuthFilter.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/mapper/member/MemberCouponMapper.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/birthday/BirthdayCardServiceImpl.java 33 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/coupon/CouponServiceImpl.java 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java 127 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberSuggestServiceImpl.java 33 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/member/MemberService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberCouponMapper.xml 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberMapper.xml 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberSuggestMapper.xml 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/config/MyWxPayConfig.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/config/WxPayConfiguration.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/config/WxPayProperties.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/business/MerOrderController.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/management/MgtMemberController.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/management/MgtOrderController.java 29 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/miniapp/AppOrderController.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/miniapp/NotifyController.java 219 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/dto/MerCloseOrderDto.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/dto/MerNewOrderDto.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/dto/MerVerifyOrderDto.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/dto/MgtMemberOrderTotalDto.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/dto/MgtShopOrderPageDto.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/account/BackMessage.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/account/OrderPayment.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/account/OrderRefund.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/account/PaymentMessage.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/account/ProfitSharing.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/order/ConsumerGoods.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/order/OrderGoods.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/AppConsumerPageVo.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/AppPlaceOrderVo.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/AppUserOrderGoodsPageVo.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerMemberNoClearOrderVo.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerMemberOrderVo.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerOrderPageVo.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerVerifyOrderVo.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MgtMemberOrderPageVo.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MgtMemberOrderTotalVo.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MgtShopAllOrderTotal.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/ProfitSharingNotifyNewResult.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/enums/RefundStatusEnum.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/enums/WxPayNotifyEventTypeEnum.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/enums/dict/DictBean.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/enums/dict/IDict.java 170 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/fliter/ParamsAuthFilter.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/order/OrderMapper.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/account/BackMessageService.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/account/OrderPaymentService.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/account/PaymentMessageService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/account/ProfitSharingService.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/account/BackMessageServiceImpl.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/account/OrderPaymentServiceImpl.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/account/PaymentMessageServiceImpl.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/account/ProfitSharingServiceImpl.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/ConsumerGoodsServiceImpl.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java 945 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/order/OrderService.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/resources/bootstrap.yml 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/ConsumerGoodsMapper.xml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderGoodsMapper.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml 141 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/UserServiceRecordMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/config/WxPayConfiguration.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/console/ShopController.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/management/MgtShopController.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/dto/MerFollowAgencyTaskDto.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/dto/MerFollowMemberTaskDto.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/dto/MgtFollowShopTaskDto.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/dto/StaffFollowShopTaskDto.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/pojo/task/AgencyTaskRecord.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/pojo/task/MemberTaskRecord.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/pojo/task/ShopTaskRecord.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/vo/MerAgencyTaskPageVo.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/vo/MerAgencyTaskRecordPageVo.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/vo/MerMemberTaskRecordPageVo.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/vo/MgtAgencyTaskRecordPageVo.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/vo/MgtMemberFollowPageVo.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/vo/MgtShopTaskRecordPageVo.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/vo/StaffAgencyTaskRecordPageVo.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/vo/StaffMyShopTaskRecordPageVo.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/enums/WxApplyMentSignStateEnum.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/enums/WxApplyMentStateEnum.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/enums/dict/DictBean.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/enums/dict/IDict.java 170 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/fliter/ParamsAuthFilter.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/mapper/shop/ShopStaffMapper.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/scheduler/ShopScheduler.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopAuthenticationServiceImpl.java 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopProportionServiceImpl.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopServiceImpl.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopStaffServiceImpl.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/task/AgencyTaskServiceImpl.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/task/MemberTaskServiceImpl.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/task/ShopTaskServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/shop/ShopAuthenticationService.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/shop/ShopProportionService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/shop/ShopService.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/util/WechatPayUtils.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/resources/mapper/shop/ShopMapper.xml 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/resources/mapper/shop/ShopStaffMapper.xml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/resources/mapper/task/AgencyTaskMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/resources/mapper/task/AgencyTaskRecordMapper.xml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/resources/mapper/task/MemberTaskMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/resources/mapper/task/MemberTaskRecordMapper.xml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/resources/mapper/task/ShopTaskRecordMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/management/MgtConfigController.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/management/MgtStaffController.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/fliter/ParamsAuthFilter.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/config/CustomConfigMapper.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/config/CustomConfigServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/sys/SysUserServiceImpl.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/resources/mapper/config/CustomConfigMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/resources/mapper/staff/SysStaffMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/constant/AppErrorConstant.java
@@ -84,6 +84,8 @@
    String ACTIVITY_END = "活动已经结束";
    String ACTIVITY_SE_ERROR = "开始时间不能大于结束时间";
    String ACTIVITY_GOODS_NULL = "商品已被抢完";
    String ACTIVITY_GOODS_BEYOND = "超出商品购买限制";
@@ -103,4 +105,6 @@
    String TRANS_NOT_MYSELF = "不能转移给自己";
    String GOODS_SURE_FAILED = "商品没有确认次数";
    String BIRTHDAYCARD_NO_GIFT = "请先配置礼物再开启";
}
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/AppBaseDto.java
@@ -13,7 +13,12 @@
@Data
public class AppBaseDto {
    @ApiModelProperty(value = "userId",hidden = true)
    @ApiModelProperty(value = "userId", hidden = true)
    private Long userId;
    @ApiModelProperty(value = "openid", hidden = true)
    private String openid;
    @ApiModelProperty(value = "终端IP", hidden = true)
    private String spbillCreateIp;
}
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/AppEditUserDto.java
@@ -13,7 +13,7 @@
@Data
public class AppEditUserDto extends AppBaseDto{
    @ApiModelProperty(value = "修改类型1.昵称2.头像3.性别4.生日")
    @ApiModelProperty(value = "修改类型1.昵称2.头像3.性别4.生日5.姓名")
    private Integer editType;
    @ApiModelProperty(value = "修改值 性别0=男,1=女,2=未知 生日YYYY-MM-DD ")
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/CodeGetDto.java
New file
@@ -0,0 +1,18 @@
package com.ruoyi.system.api.domain.dto;
import lombok.Data;
/**
 * @ClassName CodeGetDto
 * @Description TODO
 * @Author jqs
 * @Date 2023/8/3 12:53
 * @Version 1.0
 */
@Data
public class CodeGetDto {
    private String url;
    private String fileName;
}
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/MemberTotalChangeDto.java
@@ -42,7 +42,7 @@
    private Integer serviceCount;
    @ApiModelProperty(value = "下次跟进时间")
    private Date nextTaskTime;
    private String nextTaskTime;
    @ApiModelProperty(value = "活动时间")
    private Date activityTime;
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/poji/shop/Shop.java
@@ -281,6 +281,9 @@
    @TableField("auth_flag")
    private Integer authFlag;
    @TableField("shop_code")
    private String shopCode;
    @Override
    protected Serializable pkVal() {
        return this.shopId;
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/poji/shop/ShopProportionVo.java
New file
@@ -0,0 +1,31 @@
package com.ruoyi.system.api.domain.poji.shop;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
@Data
public class ShopProportionVo {
    /**
     * 分成id
     */
    private Long proportionId;
    /**
     * 商户id
     */
    private Long shopId;
    /**
     * 商户类型
     */
    private Integer shopType;
    /**
     * 分成比例
     */
    private BigDecimal proportionPercent;
}
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/MerMemberCouponVo.java
@@ -42,4 +42,11 @@
    @ApiModelProperty(value="使用有效期")
    private Date deadlineTime;
    @ApiModelProperty(value="使用范围1.全场2.指定商品")
    private Integer useScope;
    @ApiModelProperty(value = "关联商品id")
    private String relGoodsIds;
}
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteFileFallbackFactory.java
@@ -1,5 +1,6 @@
package com.ruoyi.system.api.factory;
import com.ruoyi.system.api.domain.dto.CodeGetDto;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cloud.openfeign.FallbackFactory;
@@ -30,6 +31,11 @@
            {
                return R.fail("上传文件失败:" + throwable.getMessage());
            }
            @Override
            public R<String> getAppOrderTotal(CodeGetDto codeGetDto) {
                return R.fail("获取二维码失败:" + throwable.getMessage());
            }
        };
    }
}
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteGoodsFallbackFactory.java
@@ -2,6 +2,7 @@
import com.ruoyi.common.core.domain.R;
import com.ruoyi.system.api.domain.dto.AppShopGoodsGetDto;
import com.ruoyi.system.api.domain.dto.GoodsTotalChangeDto;
import com.ruoyi.system.api.domain.poji.goods.Goods;
import com.ruoyi.system.api.domain.poji.goods.GoodsFile;
import com.ruoyi.system.api.domain.poji.goods.ShopGoods;
@@ -68,6 +69,11 @@
            public R<List<MerGoodsPriceListVo>> listGoodsPriceByGoodsId(String goodsIds) {
                return R.fail("获取商品列表失败:" + throwable.getMessage());
            }
            @Override
            public R changeGoodsTotal(List<GoodsTotalChangeDto> goodsTotalChangeDtoList) {
                return R.fail("改变商品统计失败:" + throwable.getMessage());
            }
        };
    }
}
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteShopFallbackFactory.java
@@ -2,6 +2,7 @@
import com.ruoyi.common.core.domain.R;
import com.ruoyi.system.api.domain.dto.*;
import com.ruoyi.system.api.domain.poji.shop.ShopProportionVo;
import com.ruoyi.system.api.domain.vo.*;
import com.ruoyi.system.api.model.QwH5LoginVo;
import com.ruoyi.system.api.model.QwUserDetailDto;
@@ -33,6 +34,11 @@
            @Override
            public R<Shop> getShop(Long shopId) {
                return R.fail("获取商户失败:" + throwable.getMessage());
            }
            @Override
            public R<String> getShopSubMchId(Long shopId) {
                return R.fail("获取微信商户号失败:" + throwable.getMessage());
            }
            @Override
@@ -109,6 +115,11 @@
            public R editMgtShopStaff(MgtShopStaffEditDto mgtShopStaffEditDto) {
                return R.fail("修改员工失败:" + throwable.getMessage());
            }
            @Override
            public R<ShopProportionVo> getShopProportion(Long shopId) {
                return R.fail("获取商户分成信息失败:" + throwable.getMessage());
            }
        };
    }
}
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteFileService.java
@@ -1,8 +1,10 @@
package com.ruoyi.system.api.service;
import com.ruoyi.system.api.domain.dto.CodeGetDto;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.multipart.MultipartFile;
import com.ruoyi.common.core.constant.ServiceNameConstants;
@@ -26,4 +28,14 @@
     */
    @PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    public R<SysFile> upload(@RequestPart(value = "file") MultipartFile file);
    /**
     * @description  生成二维码
     * @author  jqs
     * @date    2023/8/3 12:57
     * @param codeGetDto
     * @return  R<String>
     */
    @PostMapping("/file/getCodeUrl")
    public R<String> getAppOrderTotal(@RequestBody CodeGetDto codeGetDto);
}
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteGoodsService.java
@@ -3,6 +3,7 @@
import com.ruoyi.common.core.constant.ServiceNameConstants;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.system.api.domain.dto.AppShopGoodsGetDto;
import com.ruoyi.system.api.domain.dto.GoodsTotalChangeDto;
import com.ruoyi.system.api.domain.poji.goods.Goods;
import com.ruoyi.system.api.domain.poji.goods.GoodsFile;
import com.ruoyi.system.api.domain.poji.goods.ShopGoods;
@@ -59,6 +60,10 @@
     * @param goodsIds
     * @return  R<List<MerGoodsPriceListVo>>
     */
    @PostMapping("/listGoodsPriceByGoodsId")
    @PostMapping("/goods/listGoodsPriceByGoodsId")
    public R<List<MerGoodsPriceListVo>> listGoodsPriceByGoodsId(@RequestBody String goodsIds);
    @PostMapping("/goods/changeGoodsTotal")
    public R changeGoodsTotal(@RequestBody List<GoodsTotalChangeDto> goodsTotalChangeDtoList);
}
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteShopService.java
@@ -4,6 +4,7 @@
import com.ruoyi.common.core.domain.R;
import com.ruoyi.system.api.domain.dto.*;
import com.ruoyi.system.api.domain.poji.shop.Shop;
import com.ruoyi.system.api.domain.poji.shop.ShopProportionVo;
import com.ruoyi.system.api.domain.vo.*;
import com.ruoyi.system.api.factory.RemoteShopFallbackFactory;
import com.ruoyi.system.api.model.QwH5LoginVo;
@@ -19,6 +20,10 @@
    @PostMapping("/shop/getShop")
    public R<Shop> getShop(@RequestBody Long shopId);
    @PostMapping("/shop/getShopSubMchId")
    public R<String> getShopSubMchId(@RequestBody Long shopId);
    @PostMapping("/shop/getShopByUserId")
    public R<ShopRelUserVo> getShopByUserId(@RequestBody Long userId);
@@ -149,4 +154,12 @@
     */
    @PostMapping("/shop/editMgtShopStaff")
    public R editMgtShopStaff(@RequestBody MgtShopStaffEditDto mgtShopStaffEditDto);
    /**
     * 获取商户分成
     * @param shopId
     * @return
     */
    @PostMapping("/shop/getShopProportion")
    R<ShopProportionVo> getShopProportion(@RequestBody Long shopId);
}
ruoyi-auth/src/main/java/com/ruoyi/auth/fliter/ParamsAuthFilter.java
@@ -30,7 +30,14 @@
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        String requestUrl = request.getRequestURI();
        String requestUrlUpperCase = requestUrl.toUpperCase();
        if(requestUrlUpperCase.contains("EXPORT")
                ||requestUrlUpperCase.contains("IMPORTTEMPLATE")
        ){
            filterChain.doFilter(request, response);
            return;
        }
        RepeatedlyRequestWrapper wrapper = new RepeatedlyRequestWrapper(request, response);
        getRequestParams(wrapper);
@@ -39,7 +46,6 @@
        // 返回的结果
        String content = responseWrapper.getTextContent();
        String requestUrl = request.getRequestURI();
        log.info("-------------------- Response Data ----------------------");
        log.info(requestUrl + " -> " + content);
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/StringUtils.java
@@ -1,10 +1,10 @@
package com.ruoyi.common.core.utils;
import java.util.*;
import org.springframework.util.AntPathMatcher;
import com.ruoyi.common.core.constant.Constants;
import com.ruoyi.common.core.text.StrFormatter;
import org.springframework.util.AntPathMatcher;
import java.util.*;
/**
 * 字符串工具类
@@ -570,4 +570,13 @@
        }
        return result.toArray(new String[0]);
    }
    public static boolean checkString(String originalString, String targetString) {
        // 使用逗号分隔字符串
        String[] stringArray = originalString.split(",");
        // 转换为列表
        List<String> stringList = Arrays.asList(stringArray);
        // 检查目标字符串是否在列表中
        return stringList.contains(targetString);
    }
}
ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/utils/SecurityUtils.java
@@ -1,6 +1,8 @@
package com.ruoyi.common.security.utils;
import javax.servlet.http.HttpServletRequest;
import com.ruoyi.system.api.domain.poji.sys.SysUser;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import com.ruoyi.common.core.constant.SecurityConstants;
import com.ruoyi.common.core.constant.TokenConstants;
@@ -11,7 +13,7 @@
/**
 * 权限获取工具类
 *
 *
 * @author jqs
 */
public class SecurityUtils
@@ -48,6 +50,11 @@
        return SecurityContextHolder.get(SecurityConstants.LOGIN_USER, LoginUser.class);
    }
    public static SysUser getSysUser()
    {
        return getLoginUser().getSysUser();
    }
    /**
     * 获取请求token
     */
@@ -81,7 +88,7 @@
    /**
     * 是否为管理员
     *
     *
     * @param userId 用户ID
     * @return 结果
     */
ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/controller/FileController.java
New file
@@ -0,0 +1,40 @@
package com.ruoyi.file.controller;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.file.service.ActivityCodeService;
import com.ruoyi.system.api.domain.dto.CodeGetDto;
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;
import javax.annotation.Resource;
/**
 * @ClassName FileController
 * @Description TODO
 * @Author jqs
 * @Date 2023/8/3 12:50
 * @Version 1.0
 */
@RestController
@RequestMapping("/file")
public class FileController {
    @Resource
    private ActivityCodeService activityCodeService;
    @PostMapping("/getCodeUrl")
    public R<String> getAppOrderTotal(@RequestBody CodeGetDto codeGetDto){
        String url = null;
        try {
            url = activityCodeService.createActivityCode(codeGetDto.getUrl(),codeGetDto.getFileName());
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        return R.ok(url);
    }
}
ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/ActivityCodeService.java
@@ -1,9 +1,5 @@
package com.ruoyi.file.service;
import me.chanjar.weixin.common.error.WxErrorException;
import java.io.FileNotFoundException;
/**
 * @ClassName ActivityCodeService
 * @Description TODO
@@ -16,22 +12,32 @@
    /**
     * @description  生成活动二维码
     * @description  生成二维码
     * @author  jqs
     * @date    2023/7/26 19:09
     * @param activityId
     * @return  void
     * @date    2023/8/3 12:44
     * @param url
     * @return  String
     */
    public String createActivityCode(String activityId);
    public String createActivityCode(String url, String fileName) throws Exception;
    /**
     * @description  生成活动二维码
     * @description  生成微信活动二维码
     * @author  jqs
     * @date    2023/7/26 19:09
     * @param activityId
     * @return  void
     */
    public String createActivityCode(String activityId,String backImageUrl) throws WxErrorException, FileNotFoundException;
    public String createActivityWxCode(String activityId);
    /**
     * @description  生成活动海报
     * @author  jqs
     * @date    2023/7/26 19:09
     * @param activityId
     * @return  void
     */
    public String createActivityPoster(String activityId, String backImageUrl) throws Exception;
}
ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/ActivityCodeServiceImpl.java
@@ -5,7 +5,6 @@
import cn.hutool.core.img.ImgUtil;
import cn.hutool.extra.qrcode.QrCodeUtil;
import com.ruoyi.file.utils.OBSUploadUtils;
import me.chanjar.weixin.common.error.WxErrorException;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@@ -27,6 +26,22 @@
    /**
     * @description  生成二维码
     * @author  jqs
     * @date    2023/8/3 12:44
     * @param url
     * @return  String
     */
    @Override
    public String createActivityCode(String url, String fileName) throws Exception {
        File qrCodeFile = new File("/home/image/qrcode.png");// 生成二维码
        QrCodeUtil.generate(url, 100, 100, qrCodeFile);
        InputStream codeStream = new FileInputStream(qrCodeFile);
        String fileUrl =  OBSUploadUtils.uploadInputStream(codeStream,fileName);
        return fileUrl;
    }
    /**
     * @description  生成活动二维码
     * @author  jqs
     * @date    2023/7/26 19:09
@@ -34,7 +49,7 @@
     * @return  void
     */
    @Override
    public String createActivityCode(String activityId){
    public String createActivityWxCode(String activityId){
        WxMaQrcodeService wxMaQrcodeService = wxMaService.getQrcodeService();
        String scene = activityId;
@@ -57,29 +72,28 @@
     * @return  void
     */
    @Override
    public String createActivityCode(String activityId,String backImageUrl) throws WxErrorException, FileNotFoundException {
    public String createActivityPoster(String activityId,String backImageUrl) throws Exception {
        String fileUrl = null;
        File qrCodeFile = new File("/home/image/qrcode.png");
        // 二维码内容
        String text = ""+activityId;
        String text = "https://wxapp.hhhrt.cn/mini/activity?"+activityId;
        // 生成二维码
        QrCodeUtil.generate(text, 100, 100, qrCodeFile);
        File backFile ;
        QrCodeUtil.generate(text, 200, 200, qrCodeFile);
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        InputStream codeStream = new FileInputStream(qrCodeFile);
        InputStream backStream = new FileInputStream(qrCodeFile);
        backImageUrl = backImageUrl.replace("https://hongruitang.oss-cn-beijing.aliyuncs.com/","");
        InputStream backStream = OBSUploadUtils.getOSSInputStream(backImageUrl);
        // 将图片合成在一起
        ImgUtil.pressImage(
                backStream, // 主图片
                out, // 输出图片
                ImgUtil.read(codeStream).getScaledInstance(516, 516, Image.SCALE_DEFAULT), //水印图片
                ImgUtil.read(codeStream).getScaledInstance(200, 200, Image.SCALE_DEFAULT), //水印图片
                0, //x坐标修正值。 默认在中间,偏移量相对于中间偏移
                0, //y坐标修正值。 默认在中间,偏移量相对于中间偏移
                350, //y坐标修正值。 默认在中间,偏移量相对于中间偏移
                1.0f
        );
        InputStream inputStream = new ByteArrayInputStream(out.toByteArray());
        fileUrl =  OBSUploadUtils.uploadInputStream(inputStream,activityId);
        return fileUrl;
    }
}
ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/utils/OBSUploadUtils.java
@@ -1,16 +1,17 @@
package com.ruoyi.file.utils;
import cn.hutool.extra.qrcode.QrCodeUtil;
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.OSSObject;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import com.ruoyi.common.core.utils.uuid.IdUtils;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.InputStream;
import java.io.*;
import java.util.Calendar;
/**
@@ -22,6 +23,17 @@
 */
public class OBSUploadUtils {
    public static void main(String[] args) throws Exception {
        String fileUrl = null;
        File qrCodeFile = new File("/home/image/qrcode.png");
        // 二维码内容
        String text = "https://wxapp.hhhrt.cn/mini/coupon";
        // 生成二维码
        QrCodeUtil.generate(text, 100, 100, qrCodeFile);
        InputStream codeStream = new FileInputStream(qrCodeFile);
        fileUrl =  OBSUploadUtils.uploadInputStream(codeStream,"couponCode");
        System.out.println(fileUrl);
    }
    protected static OSS createOss(){
        // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
@@ -58,6 +70,55 @@
            String prefix = fileName.substring(fileName.lastIndexOf("."));
            String objectName = filePath + uuid + prefix;
            InputStream inputStream = file.getInputStream();
            // 创建PutObjectRequest对象。
            PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, inputStream);
            // 设置该属性可以返回response。如果不设置,则返回的response为空。
            putObjectRequest.setProcess("true");
            // 创建PutObject请求。
            result = ossClient.putObject(putObjectRequest);
            // 如果上传成功,则返回200。
            System.out.println(fileName + "上传返回" + result.getResponse().getStatusCode());
            return result.getResponse().getUri();
        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
        return result.getResponse().getErrorResponseAsString();
    }
    public static String uploadInputStream (InputStream inputStream,String fileName) throws Exception {
        // 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。
        String bucketName = "hongruitang";
        Calendar calendar = Calendar.getInstance();
        // 获取当前年
        String year = String.valueOf(calendar.get(Calendar.YEAR));
        // 获取当前月
        String month = String.valueOf(calendar.get(Calendar.MONTH) + 1);
        // 获取当前日
        String day = String.valueOf(calendar.get(Calendar.DATE));
        String filePath = year+"/"+month+"/"+day+"/";
        String uuid = IdUtils.fastSimpleUUID();
        // 创建OSSClient实例。
        OSS ossClient = createOss();
        PutObjectResult result = null;
        try {
            System.out.println(fileName + "开始上传");
            String objectName = filePath + fileName + ".jpg";
            // 创建PutObjectRequest对象。
            PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, inputStream);
            // 设置该属性可以返回response。如果不设置,则返回的response为空。
@@ -134,9 +195,13 @@
        return result.getResponse().getErrorResponseAsString();
    }
    public static void getOSSFile(String key) throws Exception {
    public static InputStream getOSSInputStream(String key) throws Exception {
        String bucketName = "hongruitang";
        // 创建OSSClient实例。
        OSS ossClient = createOss();
        OSSObject ossObject = ossClient.getObject(bucketName,key);
        InputStream inputStream = ossObject.getObjectContent();
        return inputStream;
    }
}
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/MgtActivityController.java
@@ -95,8 +95,10 @@
    @ApiOperation(value = "导出活动参与记录列表")
    public void exportPageMgtActivityRecord( MgtActivityRecordPageDto mgtActivityRecordPageDto, HttpServletResponse response) {
        Page<MgtActivityRecordPageVo> page = new Page<>();
        page.setSize(2000);
        page.setCurrent(1);
        if(page.getSize()>5000){
            page.setSize(5000);
            page.setCurrent(1);
        }
        List<MgtActivityRecordPageVo> activityRecordPageVoList = activityService.pageMgtActivityRecord(page,mgtActivityRecordPageDto);
        ExcelUtil<MgtActivityRecordPageVo> util = new ExcelUtil<MgtActivityRecordPageVo>(MgtActivityRecordPageVo.class);
        util.exportExcel(response, activityRecordPageVoList, "商品列表");
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/MgtGoodsController.java
@@ -55,8 +55,10 @@
    @ApiOperation(value = "导出商品列表")
    public void exportPageMgtGoods( MgtGoodsPageDto mgtGoodsPageDto, HttpServletResponse response) {
        Page<MgtGoodsPageVo> page = new Page<>();
        page.setSize(2000);
        page.setCurrent(1);
        if(page.getSize()>5000){
            page.setSize(5000);
            page.setCurrent(1);
        }
        List<MgtGoodsPageVo> mgtGoodsPageVoList = goodsService.pageMgtGoods(page,mgtGoodsPageDto);
        ExcelUtil<MgtGoodsPageVo> util = new ExcelUtil<MgtGoodsPageVo>(MgtGoodsPageVo.class);
        util.exportExcel(response, mgtGoodsPageVoList, "商品列表");
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/pojo/activity/Activity.java
@@ -127,7 +127,11 @@
     */
    @TableField("activity_introduce")
    private String activityIntroduce;
    /**
     * 活动二维码
     */
    @TableField("activity_code")
    private String activityCode;
    @Override
    protected Serializable pkVal() {
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/AppGoodsInfoVo.java
@@ -1,6 +1,8 @@
package com.ruoyi.goods.domain.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -50,6 +52,7 @@
    private Integer serviceNum;
    @ApiModelProperty(value = "商品售价")
    @JsonSerialize(using = ToStringSerializer.class)
    private BigDecimal salesPrice;
    @ApiModelProperty(value = "商品详情")
@@ -74,6 +77,7 @@
    private Integer availableBuyNum;
    @ApiModelProperty(value = "商品活动价")
    @JsonSerialize(using = ToStringSerializer.class)
    private BigDecimal activityPrice;
    @ApiModelProperty(value = "售罄标记0否1是")
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/AppShoppingCartVo.java
@@ -1,5 +1,7 @@
package com.ruoyi.goods.domain.vo;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -40,6 +42,7 @@
    private String goodsNurses;
    @ApiModelProperty(value = "商品售价")
    @JsonSerialize(using = ToStringSerializer.class)
    private BigDecimal salesPrice;
    @ApiModelProperty(value = "购买数量")
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/AppSimpleActivityGoodsVo.java
@@ -1,5 +1,7 @@
package com.ruoyi.goods.domain.vo;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -38,9 +40,11 @@
    private String goodsNurses;
    @ApiModelProperty(value = "商品售价")
    @JsonSerialize(using = ToStringSerializer.class)
    private BigDecimal salesPrice;
    @ApiModelProperty(value = "商品活动价")
    @JsonSerialize(using = ToStringSerializer.class)
    private BigDecimal activityPrice;
    @ApiModelProperty(value = "活动销售数量")
@@ -50,6 +54,7 @@
    private Integer salesNumber;
    @ApiModelProperty(value = "已售比例")
    @JsonSerialize(using = ToStringSerializer.class)
    private BigDecimal salesPercent;
    @ApiModelProperty(value = "结束时间戳")
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/AppSimpleGoodsVo.java
@@ -1,5 +1,7 @@
package com.ruoyi.goods.domain.vo;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -37,9 +39,11 @@
    private String goodsNurses;
    @ApiModelProperty(value = "商品售价")
    @JsonSerialize(using = ToStringSerializer.class)
    private BigDecimal salesPrice;
    @ApiModelProperty(value = "活动售价")
    @JsonSerialize(using = ToStringSerializer.class)
    private BigDecimal activityPrice;
    @ApiModelProperty(value = "活动id")
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/MerActivityPageVo.java
@@ -38,4 +38,7 @@
    @ApiModelProperty(value = "商品数量")
    private Integer goodsNum;
    @ApiModelProperty(value = "活动二维码地址")
    private String activityCode;
}
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/MerGoodsPageVo.java
@@ -1,6 +1,7 @@
package com.ruoyi.goods.domain.vo;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -38,9 +39,11 @@
    private String goodsNurses;
    @ApiModelProperty(value = "商品建议售价")
    @JsonSerialize(using = ToStringSerializer.class)
    private BigDecimal suggestSalesPrice;;
    @ApiModelProperty(value = "商品售价")
    @JsonSerialize(using = ToStringSerializer.class)
    private BigDecimal salesPrice;;
    @ApiModelProperty(value="周期次数标记0否1是")
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/MgtActivityGoodsListVo.java
@@ -1,5 +1,7 @@
package com.ruoyi.goods.domain.vo;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -28,12 +30,15 @@
    private String goodsType;
    @ApiModelProperty(value = "商品售价")
    @JsonSerialize(using = ToStringSerializer.class)
    private BigDecimal salesPrice;;
    @ApiModelProperty(value = "秒杀活动价")
    @JsonSerialize(using = ToStringSerializer.class)
    private BigDecimal activityPrice;
    @ApiModelProperty(value = "秒杀活动订金")
    @JsonSerialize(using = ToStringSerializer.class)
    private BigDecimal activitySubscription;
    @ApiModelProperty(value = "秒杀活动库存")
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/MgtActivityPageVo.java
@@ -48,4 +48,10 @@
    @ApiModelProperty(value = "创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;
    @ApiModelProperty(value = "活动二维码地址")
    private String activityCode;
    @ApiModelProperty(value = "背景海报地址")
    private String propagandaPoster;
}
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/MgtGoodsEditInfoVo.java
@@ -1,5 +1,7 @@
package com.ruoyi.goods.domain.vo;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -49,12 +51,15 @@
    private String goodsIntroduction;
    @ApiModelProperty(value = "建议售价")
    @JsonSerialize(using = ToStringSerializer.class)
    private BigDecimal salesPrice;
    @ApiModelProperty(value = "最低售价")
    @JsonSerialize(using = ToStringSerializer.class)
    private BigDecimal mininumPrice;
    @ApiModelProperty(value = "订金")
    @JsonSerialize(using = ToStringSerializer.class)
    private BigDecimal subscription;
    @ApiModelProperty(value = "商品详情")
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/MgtGoodsPageVo.java
@@ -1,6 +1,8 @@
package com.ruoyi.goods.domain.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.ruoyi.common.core.annotation.Excel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -48,10 +50,12 @@
    @Excel(name = "商品建议售价", width = 30)
    @ApiModelProperty(value = "商品建议售价")
    @JsonSerialize(using = ToStringSerializer.class)
    private BigDecimal suggestSalesPrice;;
    @Excel(name = "最低售价", width = 30)
    @ApiModelProperty(value = "最低售价")
    @JsonSerialize(using = ToStringSerializer.class)
    private BigDecimal mininumPrice;;
    @Excel(name = "销量", width = 30)
@@ -60,6 +64,7 @@
    @Excel(name = "销售额", width = 30)
    @ApiModelProperty(value = "销售额")
    @JsonSerialize(using = ToStringSerializer.class)
    private BigDecimal buyMoneyTotal;
    @Excel(name = "是否推荐", width = 30)
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/MgtGoodsTotalVo.java
@@ -1,5 +1,7 @@
package com.ruoyi.goods.domain.vo;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -22,6 +24,7 @@
    private Integer buyNumCount;
    @ApiModelProperty(value = "销售额")
    @JsonSerialize(using = ToStringSerializer.class)
    private BigDecimal buyMoneyTotal;
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/fliter/ParamsAuthFilter.java
@@ -30,7 +30,14 @@
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        String requestUrl = request.getRequestURI();
        String requestUrlUpperCase = requestUrl.toUpperCase();
        if(requestUrlUpperCase.contains("EXPORT")
                ||requestUrlUpperCase.contains("IMPORTTEMPLATE")
        ){
            filterChain.doFilter(request, response);
            return;
        }
        RepeatedlyRequestWrapper wrapper = new RepeatedlyRequestWrapper(request, response);
        getRequestParams(wrapper);
@@ -39,7 +46,6 @@
        // 返回的结果
        String content = responseWrapper.getTextContent();
        String requestUrl = request.getRequestURI();
        log.info("-------------------- Response Data ----------------------");
        log.info(requestUrl + " -> " + content);
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/activity/ActivityServiceImpl.java
@@ -29,6 +29,7 @@
import com.ruoyi.system.api.domain.vo.MgtSimpleShopVo;
import com.ruoyi.system.api.domain.vo.MgtUserIdByKeywordVo;
import com.ruoyi.system.api.service.RemoteConfigService;
import com.ruoyi.system.api.service.RemoteFileService;
import com.ruoyi.system.api.service.RemoteMemberService;
import com.ruoyi.system.api.service.RemoteShopService;
import org.redisson.api.RLock;
@@ -85,6 +86,9 @@
    @Autowired
    private RedissonClient redissonClient;
    @Resource
    private RemoteFileService remoteFileService;
    /**
     * @param mgtActivityEditDto
     * @return void
@@ -97,6 +101,9 @@
        Activity activity;
        // 获取当前时间
        Date nowTime = new Date();
        if(mgtActivityEditDto.getActivityStartTime().compareTo(mgtActivityEditDto.getActivityEndTime())>0){
            throw new ServiceException(AppErrorConstant.ACTIVITY_SE_ERROR);
        }
        // 如果活动ID不为空,则表示修改活动信息
        if (StringUtils.isNotBlank(mgtActivityEditDto.getActivityId())) {
            // 获取活动信息
@@ -123,6 +130,12 @@
            activityTotal.setRefundTotal(0);
            activityTotal.setOrderMoneyTotal(BigDecimal.ZERO);
            activityTotalService.save(activityTotal);
            CodeGetDto codeGetDto = new CodeGetDto();
            String url = "https://wxapp.hhhrt.cn/mini/activity?activityId="+activityId;
            codeGetDto.setUrl(url);
            codeGetDto.setFileName("activity-"+activityId);
            String codeUrl = remoteFileService.getAppOrderTotal(codeGetDto).getData();
            activity.setActivityCode(codeUrl);
        }
        // 获取活动开始时间和结束时间
        Date activityStartTime = mgtActivityEditDto.getActivityStartTime();
@@ -577,9 +590,10 @@
        try {
            lock.lock(30, TimeUnit.SECONDS);
            if(agStockChangeDto.getChangeType()==1){
                //减少销量增加库存
                activityMapper.addActivityGoodsStock(agStockChangeDto);
            }else{
                //更新库存
                //增加销量减少库存
                activityMapper.subActivityGoodsStock(agStockChangeDto);
            }
        } finally {
ruoyi-modules/ruoyi-goods/src/main/resources/mapper/activity/ActivityMapper.xml
@@ -23,7 +23,9 @@
                WHEN 1 THEN '是'
                ELSE '否'
                END recommendFlag,
            ta.create_time createTime
            ta.create_time createTime,
            ta.activity_code activityCode,
            ta.propaganda_poster propagandaPoster
        FROM t_activity ta
        INNER JOIN t_activity_total tat ON ta.activity_id = tat.activity_id
        WHERE ta.del_flag = 0
@@ -34,10 +36,10 @@
            AND FIND_IN_SET(#{param.shopId}, ta.applicable_shop) &gt; 0
        </if>
        <if test="param.activityStartTime!=null and param.activityStartTime != ''">
            AND ta.activity_start_time &gt;= #{param.activityStartTime}
            AND Date(ta.activity_start_time) &gt;= #{param.activityStartTime}
        </if>
        <if test="param.activityEndTime!=null and param.activityEndTime != ''">
            AND ta.activity_start_time &lt;= #{param.activityEndTime}
            AND Date(ta.activity_start_time) &lt;= #{param.activityEndTime}
        </if>
        <if test="param.activityStatus!=null">
            AND ta.activity_status = #{param.activityStatus}
@@ -61,10 +63,10 @@
            AND FIND_IN_SET(#{param.userIds}, user_id) &gt; 0
        </if>
        <if test="param.createStartTime!=null and param.createStartTime != ''">
            AND Date(ta.create_time) &gt;= #{param.createStartTime}
            AND Date(create_time) &gt;= #{param.createStartTime}
        </if>
        <if test="param.createEndTime!=null and param.createEndTime != ''">
            AND Date(ta.create_time) &lt;= #{param.createEndTime}
            AND Date(create_time) &lt;= #{param.createEndTime}
        </if>
        <if test="param.orderFlag!=null and param.orderFlag == 1">
            AND order_id IS NOT NULL
@@ -86,7 +88,8 @@
        WHEN 2 THEN '已结束'
        END activityStatus,
        ta.propaganda_poster propagandaPoster,
        COUNT(ag.activity_id) goodsNum
        COUNT(ag.activity_id) goodsNum,
        ta.activity_code activityCode
        FROM t_activity ta
        LEFT JOIN t_activity_goods ag ON ta.activity_id = ag.activity_id AND ag.del_flag = 0
        WHERE ta.del_flag = 0 AND shop_flag = 1 OR (shop_flag = 2 AND FIND_IN_SET(#{param.shopId}, ta.applicable_shop) &gt; 0)
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/business/MerMemberController.java
@@ -106,7 +106,7 @@
    @RequestMapping(value = "/addMerMember", method = RequestMethod.POST)
    @ApiOperation(value = "新增会员")
    public R addMerMember(@RequestBody MerMemberAddDto merMemberAddDto) {
    public R<Long> addMerMember(@RequestBody MerMemberAddDto merMemberAddDto) {
        Long userId = SecurityUtils.getUserId();
        merMemberAddDto.setUserId(userId);
        memberService.addMerMember(merMemberAddDto);
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/console/MemberController.java
@@ -299,7 +299,7 @@
     * @return  R
     */
    @PostMapping("/changeIntegral")
    public R signShare(@RequestBody IntegralChangeDto integralChangeDto) {
    public R changeIntegral(@RequestBody IntegralChangeDto integralChangeDto) {
        memberService.changeIntegral(integralChangeDto);
        return R.ok();
    }
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/management/MgtMemberController.java
@@ -65,8 +65,10 @@
    @ApiOperation(value = "导出会员列表")
    public void exportPageMgtMember(MgtMemberPageDto mgtMemberPageDto, HttpServletResponse response) {
        Page<MgtMemberPageVo> page = new Page<>();
        page.setSize(2000);
        page.setCurrent(1);
        if(page.getSize()>5000){
            page.setSize(5000);
            page.setCurrent(1);
        }
        List<MgtMemberPageVo> mgtShopPageVoList = memberService.pageMgtMember(page,mgtMemberPageDto);
        ExcelUtil<MgtMemberPageVo> util = new ExcelUtil<MgtMemberPageVo>(MgtMemberPageVo.class);
        util.exportExcel(response, mgtShopPageVoList, "用户管理");
@@ -124,8 +126,10 @@
        Long userId = SecurityUtils.getUserId();
        mgtMemberIntegralPageDto.setUserId(userId);
        Page<MgtMemberIntegralPageVo> page = new Page<>();
        page.setSize(2000);
        page.setCurrent(1);
        if(page.getSize()>5000){
            page.setSize(5000);
            page.setCurrent(1);
        }
        List<MgtMemberIntegralPageVo> mgtMemberIntegralPageVoList = integralRecordService.pageMgtMemberIntegral(page,mgtMemberIntegralPageDto);
        return R.ok(page.setRecords(mgtMemberIntegralPageVoList));
    }
@@ -161,8 +165,10 @@
        Long userId = SecurityUtils.getUserId();
        mgtMemberBrowsePageDto.setUserId(userId);
        Page<MgtMemberBrowsePageVo> page = new Page<>();
        page.setSize(2000);
        page.setCurrent(1);
        if(page.getSize()>5000){
            page.setSize(5000);
            page.setCurrent(1);
        }
        List<MgtMemberBrowsePageVo> mgtMemberBrowsePageVoList = browseRecordService.pageMgtMemberBrowse(page,mgtMemberBrowsePageDto);
        ExcelUtil<MgtMemberBrowsePageVo> util = new ExcelUtil<MgtMemberBrowsePageVo>(MgtMemberBrowsePageVo.class);
        util.exportExcel(response, mgtMemberBrowsePageVoList, "用户浏览记录");
@@ -207,8 +213,10 @@
        Long userId = SecurityUtils.getUserId();
        memberSuggestPageDto.setUserId(userId);
        Page<MgtMemberSuggestPageVo> page = new Page<>();
        page.setSize(2000);
        page.setCurrent(1);
        if(page.getSize()>5000){
            page.setSize(5000);
            page.setCurrent(1);
        }
        List<MgtMemberSuggestPageVo> mgtMemberSuggestPageVoList = memberSuggestService.pageMgtMemberSuggest(page,memberSuggestPageDto);
        ExcelUtil<MgtMemberSuggestPageVo> util = new ExcelUtil<MgtMemberSuggestPageVo>(MgtMemberSuggestPageVo.class);
        util.exportExcel(response, mgtMemberSuggestPageVoList, "用户建议列表");
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/miniapp/AppMemberController.java
@@ -118,6 +118,7 @@
                    int todayMonth = today.getMonthValue();
                    if (birthdayMonth == todayMonth) {
                        appBirthdayCardVo = birthdayCardService.getUserBirthdayCard(userId,member.getRelationShopId());
                        appBirthdayCardVo.setCheckBirthdayCard(1);
                        appBirthdayCardVo.setHaveBirthdayFlag(1);
                        appBirthdayCardVo.setInBirthdayFlag(1);
                    } else {
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/dto/MerMemberAddDto.java
@@ -19,7 +19,7 @@
    @ApiModelProperty(value = "用户昵称")
    private String nickName;
    private String realName;
    @ApiModelProperty(value = "手机号码")
    private String phonenumber;
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/dto/MerMemberEditDto.java
@@ -22,7 +22,7 @@
    private Long editUserId;
    @ApiModelProperty(value = "用户昵称")
    private String nickName;
    private String realName;
    @ApiModelProperty(value = "手机号码")
    private String phonenumber;
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/pojo/member/MemberTotal.java
@@ -82,7 +82,7 @@
     * 下次跟进时间
     */
    @TableField("next_task_time")
    private Date nextTaskTime;
    private String nextTaskTime;
    /**
     * 总服务次数
     */
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerMemberBasicFileVo.java
@@ -21,7 +21,7 @@
    private Long userId;
    @ApiModelProperty(value = "用户名称")
    private String nickName;
    private String realName;
    @ApiModelProperty(value = "手机号码")
    private String phonenumber;
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerMemberInfoVo.java
@@ -21,7 +21,7 @@
    private Long userId;
    @ApiModelProperty(value = "用户名称")
    private String nickName;
    private String realName;
    @ApiModelProperty(value = "手机号码")
    private String phonenumber;
@@ -58,8 +58,7 @@
    private Date lastTaskTime;
    @ApiModelProperty(value = "下次跟进任务时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date nextTaskTime;
    private String nextTaskTime;
    @ApiModelProperty(value = "最近消费时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MgtMemberSuggestPageVo.java
@@ -61,9 +61,11 @@
    @Excel(name = "平台响应时间", width = 30)
    @ApiModelProperty(value = "平台响应时间")
    private String responseTime;
    @Excel(name = "回复商户名", width = 30)
    @ApiModelProperty(value = "回复商户名")
    private String replayShopName;
    @ApiModelProperty(value = "商户id")
    private Long shopId;
    @Excel(name = "商户名", width = 30)
    @ApiModelProperty(value = "商户名")
    private String shopName;
    @Excel(name = "商户回复人姓名", width = 30)
    @ApiModelProperty(value = "商户回复人姓名")
    private String shopReplayUserName;
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/fliter/ParamsAuthFilter.java
@@ -30,7 +30,14 @@
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        String requestUrl = request.getRequestURI();
        String requestUrlUpperCase = requestUrl.toUpperCase();
        if(requestUrlUpperCase.contains("EXPORT")
                ||requestUrlUpperCase.contains("IMPORTTEMPLATE")
        ){
            filterChain.doFilter(request, response);
            return;
        }
        RepeatedlyRequestWrapper wrapper = new RepeatedlyRequestWrapper(request, response);
        getRequestParams(wrapper);
@@ -39,7 +46,6 @@
        // 返回的结果
        String content = responseWrapper.getTextContent();
        String requestUrl = request.getRequestURI();
        log.info("-------------------- Response Data ----------------------");
        log.info(requestUrl + " -> " + content);
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/mapper/member/MemberCouponMapper.java
@@ -76,5 +76,5 @@
     * @param
     * @return  List<MerMemberCouponVo>
     */
    List<MerMemberCouponVo> listMerShopGoodsMemberCoupon(MerGoodsCouponListDto merGoodsCouponListDto);
    List<MerMemberCouponVo> listMerShopGoodsMemberCoupon(@Param("param") MerGoodsCouponListDto merGoodsCouponListDto);
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/birthday/BirthdayCardServiceImpl.java
@@ -3,6 +3,8 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.core.utils.bean.BeanUtils;
import com.ruoyi.common.core.utils.uuid.IdUtils;
import com.ruoyi.member.domain.dto.MerBirthdayEditDto;
@@ -16,6 +18,7 @@
import com.ruoyi.member.service.birthday.BirthdayCardService;
import com.ruoyi.member.service.birthday.BirthdayGiftService;
import com.ruoyi.member.service.member.MemberGiftRecordService;
import com.ruoyi.system.api.constant.AppErrorConstant;
import com.ruoyi.system.api.domain.dto.BirthdayGiftSendDto;
import com.ruoyi.system.api.domain.dto.MgtBaseBathDto;
import com.ruoyi.system.api.domain.poji.member.MemberGiftRecord;
@@ -412,6 +415,12 @@
        }
        birthdayCard.setCardStatus(merBirthdayEditDto.getCardStatus());
        this.saveOrUpdate(birthdayCard);
        List<BirthdayGift> birthdayGiftList = birthdayGiftService.listByCardId(birthdayCard.getCardId());
        if(merBirthdayEditDto.getCardStatus()==1){
            if(birthdayGiftList==null||birthdayGiftList.isEmpty()){
                throw new ServiceException(AppErrorConstant.BIRTHDAYCARD_NO_GIFT);
            }
        }
    }
    /**
@@ -493,7 +502,7 @@
        if (plBirthdayCard != null && plBirthdayCard.getCardStatus()==1) {
            // 获取生日卡对应的生日礼物列表
            List<BirthdayGift> birthdayGiftList = birthdayGiftService.listByCardId(plBirthdayCard.getCardId());
            if(!birthdayGiftList.isEmpty()){
            if(birthdayGiftList!=null&&!birthdayGiftList.isEmpty()){
                // 遍历生日礼物列表
                for (BirthdayGift birthdayGift : birthdayGiftList) {
                    winningProbability = birthdayGift.getWinningProbability();
@@ -691,15 +700,29 @@
    @Override
    public Integer checkBirthdayCard(Long shopId){
        // 获取平台生日卡信息
        BirthdayCard plBirthdayCard = birthdayCardMapper.getPlatformBirthdayCard(shopId);
        // 如果生日卡存在
        Boolean platformBirthdayCardOpen = true;
        BirthdayCard plBirthdayCard = birthdayCardMapper.getMerShopBirthdayCard(0L);
        if (plBirthdayCard == null || plBirthdayCard.getCardStatus()!=1) {
            return 0;
            platformBirthdayCardOpen = false;
        }else{
            if(plBirthdayCard.getAreaFlag()==2&&!StringUtils.checkString(plBirthdayCard.getApplicableShop(),shopId.toString())){
                platformBirthdayCardOpen = false;
            }
        }
        BirthdayCard shopBirthdayCard = birthdayCardMapper.getMerShopBirthdayCard(shopId);
        // 如果生日卡存在
        Boolean shopBirthdayCardOpen  = true;
        if (shopBirthdayCard == null || shopBirthdayCard.getCardStatus()!=1) {
            shopBirthdayCardOpen = false;
        }
        Integer marketingStatus = remoteShopService.getShopMarketingStatus(shopId).getData();
        if(marketingStatus<=1){
            shopBirthdayCardOpen = false;
        }
        if(!platformBirthdayCardOpen||!shopBirthdayCardOpen){
            return 1;
        }else{
            return 0;
        }
        return 1;
    }
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/coupon/CouponServiceImpl.java
@@ -223,7 +223,7 @@
            if(StringUtils.isNotBlank(relGoodsIds)){
                //获取指定商品列表
                List<MerGoodsPriceListVo> goodsList = remoteGoodsService.listGoodsPriceByGoodsId(relGoodsIds).getData();
                if(!goodsList.isEmpty()){
                if(goodsList!=null&&!goodsList.isEmpty()){
                    merCouponGetVo.setRelGoodsList(goodsList);
                }
            }
@@ -384,47 +384,93 @@
            String memberCouponId;
            Integer sendUserTotal;
            for(Long userId : userIdList){
                memberCouponId = IdUtils.simpleUUID();
                memberCoupon = new MemberCoupon();
                memberCoupon.setId(memberCouponId);
                memberCoupon.setDelFlag(0);
                memberCoupon.setCouponId(coupon.getCouponId());
                memberCoupon.setUserId(userId);
                memberCoupon.setShopId(coupon.getShopId());
                memberCoupon.setCouponType(coupon.getCouponType());
                memberCoupon.setCouponStatus(coupon.getCouponStatus());
                memberCoupon.setCouponName(coupon.getCouponName());
                memberCoupon.setSendType(coupon.getSendType());
                memberCoupon.setSendTarget(coupon.getSendTarget());
                memberCoupon.setSendTimeType(coupon.getSendTimeType());
                memberCoupon.setSendTime(coupon.getSendTime());
                memberCoupon.setMoneyThreshold(coupon.getMoneyThreshold());
                memberCoupon.setDiscountMoney(coupon.getDiscountMoney());
                memberCoupon.setDiscountPercent(coupon.getDiscountPercent());
                memberCoupon.setUseScope(coupon.getUseScope());
                memberCoupon.setValidTimeType(coupon.getValidTimeType());
                memberCoupon.setValidStartTime(coupon.getValidStartTime());
                memberCoupon.setValidEndTime(coupon.getValidEndTime());
                memberCoupon.setValidDay(coupon.getValidDay());
                memberCoupon.setCouponFrom(coupon.getCouponFrom());
                memberCoupon.setReceiveTime(nowTime);
                memberCoupon.setRelGoodsIds(coupon.getRelGoodsIds());
                //有效期处理1.时间段2.领取之日起
                if(coupon.getValidTimeType()==1){
                    memberCoupon.setDeadlineTime(coupon.getValidEndTime());
                }else if(coupon.getValidTimeType()==2){
                    memberCoupon.setDeadlineTime(DateUtils.addDays(nowTime,coupon.getValidDay()));
                if(coupon.getCouponFrom()==2){
                    for(int i=0;i<coupon.getLimitNumber();i++){
                        memberCouponId = IdUtils.simpleUUID();
                        memberCoupon = new MemberCoupon();
                        memberCoupon.setId(memberCouponId);
                        memberCoupon.setDelFlag(0);
                        memberCoupon.setCouponId(coupon.getCouponId());
                        memberCoupon.setUserId(userId);
                        memberCoupon.setShopId(coupon.getShopId());
                        memberCoupon.setCouponType(coupon.getCouponType());
                        memberCoupon.setCouponStatus(coupon.getCouponStatus());
                        memberCoupon.setCouponName(coupon.getCouponName());
                        memberCoupon.setSendType(coupon.getSendType());
                        memberCoupon.setSendTarget(coupon.getSendTarget());
                        memberCoupon.setSendTimeType(coupon.getSendTimeType());
                        memberCoupon.setSendTime(coupon.getSendTime());
                        memberCoupon.setMoneyThreshold(coupon.getMoneyThreshold());
                        memberCoupon.setDiscountMoney(coupon.getDiscountMoney());
                        memberCoupon.setDiscountPercent(coupon.getDiscountPercent());
                        memberCoupon.setUseScope(coupon.getUseScope());
                        memberCoupon.setValidTimeType(coupon.getValidTimeType());
                        memberCoupon.setValidStartTime(coupon.getValidStartTime());
                        memberCoupon.setValidEndTime(coupon.getValidEndTime());
                        memberCoupon.setValidDay(coupon.getValidDay());
                        memberCoupon.setCouponFrom(coupon.getCouponFrom());
                        memberCoupon.setReceiveTime(nowTime);
                        memberCoupon.setRelGoodsIds(coupon.getRelGoodsIds());
                        //有效期处理1.时间段2.领取之日起
                        if(coupon.getValidTimeType()==1){
                            memberCoupon.setDeadlineTime(coupon.getValidEndTime());
                        }else if(coupon.getValidTimeType()==2){
                            memberCoupon.setDeadlineTime(DateUtils.addDays(nowTime,coupon.getValidDay()));
                        }
                        memberCouponList.add(memberCoupon);
                        sendTotal = sendTotal + 1;
                        if(coupon.getSendType()==1){
                            sendUserTotal = memberCouponService.totalMemberCouponByUserAndCoupon(userId,coupon.getCouponId());
                            if(sendUserTotal!=null&&sendUserTotal>0){
                            }else{
                                sendPerson = sendPerson + 1;
                            }
                        }
                        memberCouponRecordService.updateMemberCouponRecord(coupon,userId,1);
                    }
                }else{
                    memberCouponId = IdUtils.simpleUUID();
                    memberCoupon = new MemberCoupon();
                    memberCoupon.setId(memberCouponId);
                    memberCoupon.setDelFlag(0);
                    memberCoupon.setCouponId(coupon.getCouponId());
                    memberCoupon.setUserId(userId);
                    memberCoupon.setShopId(coupon.getShopId());
                    memberCoupon.setCouponType(coupon.getCouponType());
                    memberCoupon.setCouponStatus(coupon.getCouponStatus());
                    memberCoupon.setCouponName(coupon.getCouponName());
                    memberCoupon.setSendType(coupon.getSendType());
                    memberCoupon.setSendTarget(coupon.getSendTarget());
                    memberCoupon.setSendTimeType(coupon.getSendTimeType());
                    memberCoupon.setSendTime(coupon.getSendTime());
                    memberCoupon.setMoneyThreshold(coupon.getMoneyThreshold());
                    memberCoupon.setDiscountMoney(coupon.getDiscountMoney());
                    memberCoupon.setDiscountPercent(coupon.getDiscountPercent());
                    memberCoupon.setUseScope(coupon.getUseScope());
                    memberCoupon.setValidTimeType(coupon.getValidTimeType());
                    memberCoupon.setValidStartTime(coupon.getValidStartTime());
                    memberCoupon.setValidEndTime(coupon.getValidEndTime());
                    memberCoupon.setValidDay(coupon.getValidDay());
                    memberCoupon.setCouponFrom(coupon.getCouponFrom());
                    memberCoupon.setReceiveTime(nowTime);
                    memberCoupon.setRelGoodsIds(coupon.getRelGoodsIds());
                    //有效期处理1.时间段2.领取之日起
                    if(coupon.getValidTimeType()==1){
                        memberCoupon.setDeadlineTime(coupon.getValidEndTime());
                    }else if(coupon.getValidTimeType()==2){
                        memberCoupon.setDeadlineTime(DateUtils.addDays(nowTime,coupon.getValidDay()));
                    }
                    memberCouponList.add(memberCoupon);
                    sendTotal = sendTotal + 1;
                    if(coupon.getSendType()==1){
                        sendUserTotal = memberCouponService.totalMemberCouponByUserAndCoupon(userId,coupon.getCouponId());
                        if(sendUserTotal!=null&&sendUserTotal>0){
                        }else{
                            sendPerson = sendPerson + 1;
                        }
                    }
                    memberCouponRecordService.updateMemberCouponRecord(coupon,userId,1);
                }
                memberCouponList.add(memberCoupon);
                sendTotal = sendTotal + 1;
                if(coupon.getSendType()==1){
                   sendUserTotal = memberCouponService.totalMemberCouponByUserAndCoupon(userId,coupon.getCouponId());
                   if(sendUserTotal!=null&&sendUserTotal>0){
                   }else{
                       sendPerson = sendPerson + 1;
                   }
                }
                memberCouponRecordService.updateMemberCouponRecord(coupon,userId,1);
            }
            memberCouponService.saveBatch(memberCouponList);
            //处理优惠券统计
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java
@@ -360,6 +360,9 @@
            case 4:
                member.setBirthday(editValue);
                break;
            case 5:
                member.setRealName(editValue);
                break;
            default:
                break;
        }
@@ -457,7 +460,7 @@
        Member member = this.getByUserId(userId);
        // 设置MerMemberInfoVo对象的属性值
        merMemberInfoVo.setUserId(userId);
        merMemberInfoVo.setNickName(member.getNickName());
        merMemberInfoVo.setRealName(member.getRealName());
        merMemberInfoVo.setPhonenumber(member.getMobile());
        merMemberInfoVo.setAvatar(member.getAvatar());
        merMemberInfoVo.setBirthday(member.getBirthday());
@@ -532,7 +535,7 @@
        MerMemberBasicFileVo merMemberBasicFileVo = new MerMemberBasicFileVo();
        Member member = this.getByUserId(userId);
        BeanUtils.copyProperties(member, merMemberBasicFileVo);
        merMemberBasicFileVo.setNickName(member.getNickName());
        merMemberBasicFileVo.setRealName(member.getRealName());
        merMemberBasicFileVo.setPhonenumber(member.getMobile());
        merMemberBasicFileVo.setCreateTime(member.getCreateTime());
        /*List<MemberNurse> memberNurseList = memberNurseService.listByUserId(userId);
@@ -607,7 +610,7 @@
     * @param merMemberAddDto
     */
    @Override
    public void addMerMember(MerMemberAddDto merMemberAddDto) {
    public Long addMerMember(MerMemberAddDto merMemberAddDto) {
        String phoneNumber = merMemberAddDto.getPhonenumber();
        Member oldMember = this.getByMobile(phoneNumber);
        // Check if the member already exists
@@ -622,7 +625,7 @@
            sysUser = new SysUser();
            sysUser.setUserName(memberId);
            sysUser.setUserType("03");
            sysUser.setNickName(merMemberAddDto.getNickName());
            sysUser.setNickName(merMemberAddDto.getRealName());
            sysUser.setAvatar("https://hongruitang.oss-cn-beijing.aliyuncs.com/default.png");
            String password = "hongruitang";
            sysUser.setPassword(SecurityUtils.encryptPassword(password));
@@ -636,8 +639,8 @@
            member.setUserId(sysUser.getUserId());
            member.setDelFlag(0);
            member.setFrozenFlag(0);
            member.setNickName(merMemberAddDto.getNickName());
            member.setRealName(merMemberAddDto.getNickName());
            member.setNickName(merMemberAddDto.getRealName());
            member.setRealName(merMemberAddDto.getRealName());
            member.setGender(merMemberAddDto.getGender());
            member.setMobile(phoneNumber);
            member.setReferrer(merMemberAddDto.getReferrer());
@@ -671,6 +674,7 @@
                memberArchiveService.saveBatch(memberArchiveList);
            }
        }
        return sysUser.getUserId();
    }
    /**
@@ -680,54 +684,54 @@
     */
    @Override
    public void editMerMember(MerMemberEditDto merMemberEditDto) {
    // 获取用户信息
    Member member = this.getByUserId(merMemberEditDto.getEditUserId());
     // 检查手机号是否已经存在
    if (!member.getMobile().equals(merMemberEditDto.getPhonenumber())) {
        Member memberOld = getByMobile(merMemberEditDto.getPhonenumber());
        if (memberOld != null) {
            throw new ServiceException(AppErrorConstant.MOBILE_DOUBLE);
        // 获取用户信息
        Member member = this.getByUserId(merMemberEditDto.getEditUserId());
         // 检查手机号是否已经存在
        if (!member.getMobile().equals(merMemberEditDto.getPhonenumber())) {
            Member memberOld = getByMobile(merMemberEditDto.getPhonenumber());
            if (memberOld != null) {
                throw new ServiceException(AppErrorConstant.MOBILE_DOUBLE);
            }
        }
         // 更新用户信息
        member.setRealName(merMemberEditDto.getRealName());
        member.setMobile(merMemberEditDto.getPhonenumber());
        member.setGender(merMemberEditDto.getGender());
        member.setReferrer(merMemberEditDto.getReferrer());
        member.setCustomerSource(merMemberEditDto.getCustomerSource());
        member.setLevel(merMemberEditDto.getLevel());
        member.setBirthday(merMemberEditDto.getBirthday());
        member.setUpdateUserId(merMemberEditDto.getUserId());
        member.setUpdateTime(new Date());
        List<String> memberNurse = merMemberEditDto.getMemberNurse();
        if(memberNurse!=null&&!memberNurse.isEmpty()){
            String memberNurseString = String.join(",", memberNurse);
            member.setMemberNurse(memberNurseString);
        }
        this.saveOrUpdate(member);
         // 更新用户手机号
        SysUser sysUser = new SysUser();
        sysUser.setUserId(merMemberEditDto.getEditUserId());
        sysUser.setPhonenumber(merMemberEditDto.getPhonenumber());
        sysUserService.updateUserMobile(sysUser);
         // 删除用户的档案信息
        memberArchiveService.deleteByUserId(sysUser.getUserId());
         // 添加用户的档案信息
        List<MemberArchiveVo> achiveList = merMemberEditDto.getAchiveList();
        if (achiveList != null && !achiveList.isEmpty()) {
            // 构造用户档案列表
            List<MemberArchive> memberArchiveList = achiveList.stream().map(memberArchiveVo -> {
                MemberArchive memberArchive = new MemberArchive();
                memberArchive.setDelFlag(0);
                memberArchive.setUserId(sysUser.getUserId());
                memberArchive.setFieldId(memberArchiveVo.getFieldId());
                memberArchive.setFieldValue(memberArchiveVo.getFieldValue());
                return memberArchive;
            }).collect(Collectors.toList());
             // 批量保存用户档案信息
            memberArchiveService.saveBatch(memberArchiveList);
        }
    }
     // 更新用户信息
    member.setRealName(merMemberEditDto.getNickName());
    member.setMobile(merMemberEditDto.getPhonenumber());
    member.setGender(merMemberEditDto.getGender());
    member.setReferrer(merMemberEditDto.getReferrer());
    member.setCustomerSource(merMemberEditDto.getCustomerSource());
    member.setLevel(merMemberEditDto.getLevel());
    member.setBirthday(merMemberEditDto.getBirthday());
    member.setUpdateUserId(merMemberEditDto.getUserId());
    member.setUpdateTime(new Date());
    List<String> memberNurse = merMemberEditDto.getMemberNurse();
    if(memberNurse!=null&&!memberNurse.isEmpty()){
        String memberNurseString = String.join(",", memberNurse);
        member.setMemberNurse(memberNurseString);
    }
    this.saveOrUpdate(member);
     // 更新用户手机号
    SysUser sysUser = new SysUser();
    sysUser.setUserId(merMemberEditDto.getEditUserId());
    sysUser.setPhonenumber(merMemberEditDto.getPhonenumber());
    sysUserService.updateUserMobile(sysUser);
     // 删除用户的档案信息
    memberArchiveService.deleteByUserId(sysUser.getUserId());
     // 添加用户的档案信息
    List<MemberArchiveVo> achiveList = merMemberEditDto.getAchiveList();
    if (achiveList != null && !achiveList.isEmpty()) {
        // 构造用户档案列表
        List<MemberArchive> memberArchiveList = achiveList.stream().map(memberArchiveVo -> {
            MemberArchive memberArchive = new MemberArchive();
            memberArchive.setDelFlag(0);
            memberArchive.setUserId(sysUser.getUserId());
            memberArchive.setFieldId(memberArchiveVo.getFieldId());
            memberArchive.setFieldValue(memberArchiveVo.getFieldValue());
            return memberArchive;
        }).collect(Collectors.toList());
         // 批量保存用户档案信息
        memberArchiveService.saveBatch(memberArchiveList);
    }
}
    /**
     * @param mobile
@@ -972,11 +976,14 @@
            String memberUserIds = mgtMemberRelDelDto.getMemberUserIds();
            String[] memberUserIdArr = memberUserIds.split(",");
            for (String str : memberUserIdArr) {
                Member member = this.getByUserId(Long.valueOf(str));
                member.setBindingFlag(0);
                member.setUpdateTime(new Date());
                member.setUpdateUserId(mgtMemberRelDelDto.getUserId());
                this.saveOrUpdate(member);
                LambdaUpdateWrapper<Member> updateWrapper = Wrappers.lambdaUpdate();
                updateWrapper.eq(Member::getUserId, str)
                        .set(Member::getBindingFlag, 0)
                        .set(Member::getRelationShopId,null)
                        .set(Member::getRelationShopName,null)
                        .set(Member::getUpdateUserId,mgtMemberRelDelDto.getUserId())
                        .set(Member::getUpdateTime,new Date());
                this.update(updateWrapper);
            }
        }
    }
@@ -1105,7 +1112,9 @@
        mgtMemberGetVo.setCreateTime(member.getCreateTime());
        mgtMemberGetVo.setLastPayTime(memberTotal.getLastPayTime());
        mgtMemberGetVo.setGoodsType(member.getGoodsType());
        mgtMemberGetVo.setRelationShopName(member.getRelationShopName());
        if(member.getBindingFlag()==1){
            mgtMemberGetVo.setRelationShopName(member.getRelationShopName());
        }
        mgtMemberGetVo.setIntegral(memberTotal.getTotalIntegral());
        mgtMemberGetVo.setMemberFrom(member.getCustomerSource());
        mgtMemberGetVo.setTotalActivityCount(memberTotal.getTotalActivityCount());
@@ -1508,7 +1517,7 @@
                memberTotal.setUseableServiceCount(memberTotal.getUseableServiceCount() - memberTotalChangeDto.getServiceCount());
                memberTotal.setUsedServiceCount(memberTotal.getUsedServiceCount() + memberTotalChangeDto.getServiceCount());
            } else {
                memberTotal.setUseableIntegral(memberTotal.getUseableIntegral() + memberTotalChangeDto.getServiceCount());
                memberTotal.setUseableServiceCount(memberTotal.getUseableServiceCount() + memberTotalChangeDto.getServiceCount());
                memberTotal.setTotalServiceCount(memberTotal.getTotalServiceCount() + memberTotalChangeDto.getServiceCount());
            }
        }
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberSuggestServiceImpl.java
@@ -17,19 +17,21 @@
import com.ruoyi.member.service.member.MemberSuggestService;
import com.ruoyi.system.api.domain.dto.AppSuggestPageDto;
import com.ruoyi.system.api.domain.dto.AppUserSuggestDto;
import com.ruoyi.system.api.domain.dto.MgtBaseBathDto;
import com.ruoyi.system.api.domain.dto.MgtShopIdByCodeDto;
import com.ruoyi.system.api.domain.poji.config.SysTag;
import com.ruoyi.system.api.domain.poji.sys.SysUser;
import com.ruoyi.system.api.domain.vo.MgtShopIdByCodeVo;
import com.ruoyi.system.api.domain.vo.MgtSimpleShopVo;
import com.ruoyi.system.api.service.RemoteConfigService;
import com.ruoyi.system.api.service.RemoteShopService;
import com.ruoyi.system.api.service.RemoteUserService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
 * <p>
@@ -112,11 +114,7 @@
            mgtShopIdByCodeDto.setShopCityCode(memberSuggestPageDto.getShopCityCode());
            mgtShopIdByCodeDto.setShopAreaCode(memberSuggestPageDto.getShopAreaCode());
            MgtShopIdByCodeVo mgtShopIdByCodeVo = remoteShopService.getShopIdByCode(mgtShopIdByCodeDto).getData();
            if(StringUtils.isNotBlank(mgtShopIdByCodeVo.getShopIds())){
                memberSuggestPageDto.setShopIds(mgtShopIdByCodeVo.getShopIds());
            }else{
                return mgtMemberSuggestPageVoList;
            }
            memberSuggestPageDto.setShopIds(mgtShopIdByCodeVo.getShopIds());
        }
        //处理标签为正则方便sql判断
        if(StringUtils.isNotBlank(memberSuggestPageDto.getTags())){
@@ -127,6 +125,25 @@
        }
        //获取返回结果
        mgtMemberSuggestPageVoList = memberSuggestMapper.pageMgtMemberSuggest(page, memberSuggestPageDto);
        if(mgtMemberSuggestPageVoList!=null&&!mgtMemberSuggestPageVoList.isEmpty()){
            HashSet<Long> shopIdSet = new HashSet<>();
            for(MgtMemberSuggestPageVo mgtMemberSuggestPageVo : mgtMemberSuggestPageVoList){
                if(mgtMemberSuggestPageVo.getShopId()!=null){
                    shopIdSet.add(mgtMemberSuggestPageVo.getShopId());
                }
            }
            String shopJoinedString = String.join(",", shopIdSet.stream().map(Object::toString).collect(Collectors.toList()));
            MgtBaseBathDto mgtBaseBathDto = new MgtBaseBathDto();
            mgtBaseBathDto.setIds(shopJoinedString);
            List<MgtSimpleShopVo> simpleShopVoList = remoteShopService.listShopSimpleVoByIds(mgtBaseBathDto).getData();
            Map<Long, MgtSimpleShopVo> shopMap = simpleShopVoList.stream()
                    .collect(Collectors.toMap(MgtSimpleShopVo::getShopId, Function.identity()));
            for(MgtMemberSuggestPageVo mgtMemberSuggestPageVo : mgtMemberSuggestPageVoList){
                if(mgtMemberSuggestPageVo.getShopId()!=null){
                    mgtMemberSuggestPageVo.setShopName(shopMap.get(mgtMemberSuggestPageVo.getShopId()).getShopName());
                }
            }
        }
        return mgtMemberSuggestPageVoList;
    }
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/member/MemberService.java
@@ -111,7 +111,7 @@
     * 添加会员
     * @param merMemberAddDto
     */
    void addMerMember(MerMemberAddDto merMemberAddDto);
    Long addMerMember(MerMemberAddDto merMemberAddDto);
    /**
     * 编辑会员
ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberCouponMapper.xml
@@ -206,6 +206,8 @@
    <select id="listMerShopGoodsMemberCoupon" resultType="com.ruoyi.system.api.domain.vo.MerMemberCouponVo">
        SELECT
            tuc.id memberCouponId,
            tuc.use_scope,
            tuc.rel_goods_ids relGoodsIds,
            tuc.coupon_type couponType,
            tuc.coupon_name couponName,
            tuc.money_threshold moneyThreshold,
@@ -214,9 +216,11 @@
            tuc.valid_start_time validStartTime,
            tuc.deadline_time deadlineTime
        FROM t_member_coupon tuc
        WHERE tuc.del_flag = 0 AND tuc.coupon_status = 1 AND tuc.user_id = #{param.userId} AND tuc.coupon_type IN (1,2,3)
        WHERE tuc.del_flag = 0 AND tuc.coupon_status = 1 AND tuc.user_id = #{param.memberUserId} AND tuc.coupon_type IN (1,2,3)
            AND (tuc.coupon_from = 1 OR (tuc.coupon_from = 2 AND tuc.shop_id = #{param.shopId}))
            AND (tuc.use_scope = 1 OR (tuc.use_scope = 2 AND FIND_IN_SET(#{param.goodsId}, rel_goods_ids) &gt; 0))
          <if test="param.goodsId!=null and param.goodsId!=''">
              AND (tuc.use_scope = 1 OR (tuc.use_scope = 2 AND FIND_IN_SET(#{param.goodsId}, rel_goods_ids) &gt; 0))
          </if>
        ORDER BY tuc.receive_time DESC
    </select>
</mapper>
ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberMapper.xml
@@ -199,10 +199,10 @@
            AND FIND_IN_SET(#{param.memberNurse},tm.member_nurse) &gt; 0
        </if>
        <if test="param.actStartDate!=null and param.actStartDate!=''">
            AND Date(tmt.last_pay_time) &gt;= #{param.actStartDate}
            AND Date(tmt.last_service_time) &gt;= #{param.actStartDate}
        </if>
        <if test="param.actEndDate!=null and param.actEndDate!=''">
            AND Date(tmt.last_pay_time) &lt;= #{param.actEndDate}
            AND Date(tmt.last_service_time) &lt;= #{param.actEndDate}
        </if>
        <if test="param.keyword != null and param.keyword != ''">
            AND (tm.real_name LIKE CONCAT('%',#{param.keyword},'%') OR tm.mobile LIKE CONCAT('%',#{param.keyword},'%') OR tm.referrer LIKE CONCAT('%',#{param.keyword},'%'))
@@ -213,7 +213,7 @@
    <select id="pageMerCashMember" resultType="com.ruoyi.member.domain.vo.MerCashMemberPageVo">
        SELECT
        tm.user_id userId,
        tm.nick_name nickName,
        tm.real_name nickName,
        tm.mobile mobile
        FROM t_member tm
        WHERE tm.relation_shop_id = #{param.shopId}
@@ -240,7 +240,7 @@
        tm.create_time createTime,
        tmt.last_pay_time lastPayTime,
        tm.goods_type goodsType,
        tm.relation_shop_name relationShopName,
        CASE binding_flag WHEN 1 THEN tm.relation_shop_name ELSE "" END relationShopName,
        tmt.total_integral integral,
        tm.referrer referrer,
        tm.customer_source memberFrom,
@@ -252,7 +252,7 @@
        LEFT JOIN t_member_total tmt ON tm.member_id = tmt.member_id
        WHERE tm.del_flag = 0
        <if test="param.keyword != null and param.keyword != ''">
            AND (tm.member_no LIKE CONCAT('%',#{param.keyword},'%') OR tm.mobile LIKE CONCAT('%',#{param.keyword},'%') OR tm.real_name LIKE CONCAT('%',#{param.keyword},'%') OR tm.nick_name LIKE CONCAT('%',#{param.keyword},'%') OR FIND_IN_SET(#{param.keyword},tm.member_nurse) &gt; 0)
            AND (tm.user_id LIKE CONCAT('%',#{param.keyword},'%') OR tm.mobile LIKE CONCAT('%',#{param.keyword},'%') OR tm.real_name LIKE CONCAT('%',#{param.keyword},'%') OR tm.nick_name LIKE CONCAT('%',#{param.keyword},'%') OR FIND_IN_SET(#{param.keyword},tm.member_nurse) &gt; 0)
        </if>
        <if test="param.belongDistrict != null and param.belongDistrict != ''">
            AND tm.belong_district = #{param.belongDistrict}
@@ -270,7 +270,7 @@
            AND FIND_IN_SET(#{param.goodsType},tm.goods_type) &gt; 0
        </if>
        <if test="param.relationShopId != null and param.relationShopId != ''">
            AND tm.relation_shop_id = #{param.relationShopId}
            AND tm.relation_shop_id = #{param.relationShopId} AND tm.binding_flag = 1
        </if>
        <if test="param.memberFrom != null and param.memberFrom != ''">
            AND tm.customer_source = #{param.memberFrom}
@@ -294,10 +294,10 @@
            AND tmt.total_integral &lt;= #{param.endIntegral}
        </if>
        <if test="param.actStartDate != null and param.actStartDate != ''">
            AND Date(tmt.last_pay_time) &gt;= #{param.actStartDate}
            AND Date(tmt.last_service_time) &gt;= #{param.actStartDate}
        </if>
        <if test="param.actEndDate != null and param.actEndDate != ''">
            AND Date(tmt.last_pay_time) &lt;= #{param.actEndDate}
            AND Date(tmt.last_service_time) &lt;= #{param.actEndDate}
        </if>
        <if test="param.startPayCount != null and param.startPayCount != ''">
            AND tmt.total_pay_count &gt;= #{param.startPayCount}
@@ -327,7 +327,7 @@
        <if test="sendType != null and sendType == 4">
            AND tm.binding_flag = 0
        </if>
        <if test="shopId != null and shopId != ''">
        <if test="shopId != null and shopId != '' and sendType != null and sendType != 4">
            AND tm.relation_shop_id = #{shopId}
        </if>
    </select>
@@ -483,10 +483,10 @@
            AND tm.relation_shop_id = #{shopId}
        </if>
        <if test="actStartDate != null and actStartDate != ''">
            AND Date(tmt.last_pay_time) &gt;= #{actStartDate}
            AND Date(tmt.last_service_time) &gt;= #{actStartDate}
        </if>
        <if test="actEndDate != null and actEndDate != ''">
            AND Date(tmt.last_pay_time) &lt;= #{actEndDate}
            AND Date(tmt.last_service_time) &lt;= #{actEndDate}
        </if>
    </select>
@@ -664,10 +664,10 @@
            </foreach>
        </if>
        <if test="actStartDate != null and actStartDate != ''">
            AND Date(tmt.last_pay_time) &gt;= #{actStartDate}
            AND Date(tmt.last_service_time) &gt;= #{actStartDate}
        </if>
        <if test="actEndDate != null and actEndDate != ''">
            AND Date(tmt.last_pay_time) &lt;= #{actEndDate}
            AND Date(tmt.last_service_time) &lt;= #{actEndDate}
        </if>
    </select>
ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberSuggestMapper.xml
@@ -39,7 +39,8 @@
            tms.shop_replay_user_name shopReplayUserName,
            tms.shop_replay_time shopReplayTime,
            tms.shop_response_time shopResponseTime,
            tms.suggest_tags suggestTags
            tms.suggest_tags suggestTags,
            tms.shop_id shopId
        FROM
            t_member_suggest tms
        INNER JOIN t_member tm ON tms.create_user_id = tm.user_id
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/config/MyWxPayConfig.java
File was deleted
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/config/WxPayConfiguration.java
New file
@@ -0,0 +1,54 @@
package com.ruoyi.order.config;
import com.github.binarywang.wxpay.config.WxPayConfig;
import com.github.binarywang.wxpay.service.WxPayService;
import com.github.binarywang.wxpay.service.impl.WxPayServiceImpl;
import lombok.AllArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
 * @author Binary Wang
 */
@Configuration
@ConditionalOnClass(WxPayService.class)
@EnableConfigurationProperties(WxPayProperties.class)
@AllArgsConstructor
public class WxPayConfiguration {
  private WxPayProperties properties;
  // 分账特约商户
  private static String PLATFORM_TY_MAC_ID = "";
  public static String getPlatformTyMacId() {
    return PLATFORM_TY_MAC_ID;
  }
  @Bean
  @ConditionalOnMissingBean
  public WxPayService wxService() {
    WxPayConfig payConfig = new WxPayConfig();
    payConfig.setAppId(StringUtils.trimToNull(this.properties.getAppId()));
    payConfig.setMchId(StringUtils.trimToNull(this.properties.getMchId()));
    payConfig.setMchKey(StringUtils.trimToNull(this.properties.getMchKey()));
    payConfig.setSubAppId(StringUtils.trimToNull(this.properties.getSubAppId()));
    payConfig.setSubMchId(StringUtils.trimToNull(this.properties.getSubMchId()));
    payConfig.setKeyPath(StringUtils.trimToNull(this.properties.getKeyPath()));
    // 平台特约商户号
    PLATFORM_TY_MAC_ID = this.properties.getPlatformTyMacId();
    // 可以指定是否使用沙箱环境
    payConfig.setUseSandboxEnv(false);
    WxPayService wxPayService = new WxPayServiceImpl();
    wxPayService.setConfig(payConfig);
    return wxPayService;
  }
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/config/WxPayProperties.java
New file
@@ -0,0 +1,49 @@
package com.ruoyi.order.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
/**
 * wxpay pay properties.
 *
 * @author Binary Wang
 */
@Data
@ConfigurationProperties(prefix = "wx.pay")
public class WxPayProperties {
  /**
   * 设置微信公众号或者小程序等的appid
   */
  private String appId;
  /**
   * 微信支付商户号
   */
  private String mchId;
  /**
   * 微信支付商户密钥
   */
  private String mchKey;
  /**
   * 平台特约商户号,用户平台收取服务费
   */
  private String platformTyMacId;
  /**
   * 服务商模式下的子商户公众账号ID,普通模式请不要配置,请在配置文件中将对应项删除
   */
  private String subAppId;
  /**
   * 服务商模式下的子商户号,普通模式请不要配置,最好是请在配置文件中将对应项删除
   */
  private String subMchId;
  /**
   * apiclient_cert.p12文件的绝对路径,或者如果放在项目中,请以classpath:开头指定
   */
  private String keyPath;
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/business/MerOrderController.java
@@ -18,8 +18,6 @@
import javax.annotation.Resource;
import java.util.List;
import static org.reflections.Reflections.log;
/**
 * @author jqs34
 * @ClassName MerOrderController
@@ -154,10 +152,20 @@
        Page<MerMemberNoClearOrderVo> page = new Page<>();
        page.setSize(merMemberNoClearOrderDto.getPageSize());
        page.setCurrent(merMemberNoClearOrderDto.getPageNum());
        log.info("merMemberNoClearOrderDto----"+merMemberNoClearOrderDto.toString());
        List<MerMemberNoClearOrderVo> merMemberNoClearOrderVoList = orderService.pageMerMemberOrder(page,merMemberNoClearOrderDto);
        return R.ok(page.setRecords(merMemberNoClearOrderVoList));
    }
    @RequestMapping(value = "/pageMerMemberPayOrder", method = RequestMethod.POST)
    @ApiOperation(value = "获取商户端用户消费记录")
    public R<Page<MerOrderPageVo>> pageMerMemberPayOrder(@RequestBody MerMemberNoClearOrderDto merOrderPageDto) {
        Long userId = SecurityUtils.getUserId();
        merOrderPageDto.setUserId(userId);
        Page<MerOrderPageVo> page = new Page<>();
        page.setSize(merOrderPageDto.getPageSize());
        page.setCurrent(merOrderPageDto.getPageNum());
        List<MerOrderPageVo> merOrderPageVoList = orderService.pageMerMemberPayOrder(page,merOrderPageDto);
        return R.ok(page.setRecords(merOrderPageVoList));
    }
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/management/MgtMemberController.java
@@ -53,8 +53,10 @@
        Long userId = SecurityUtils.getUserId();
        mgtMemberServiceRecordPageDto.setUserId(userId);
        Page<MgtMemberServiceRecordPageVo> page = new Page<>();
        page.setSize(2000);
        page.setCurrent(1);
        if(page.getSize()>5000){
            page.setSize(5000);
            page.setCurrent(1);
        }
        List<MgtMemberServiceRecordPageVo> list = userServiceRecordService.pageMgtMemberServiceRecord(page,mgtMemberServiceRecordPageDto);
        ExcelUtil<MgtMemberServiceRecordPageVo> util = new ExcelUtil<MgtMemberServiceRecordPageVo>(MgtMemberServiceRecordPageVo.class);
        util.exportExcel(response, list, "用户浏览记录");
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/management/MgtOrderController.java
@@ -65,8 +65,10 @@
        Long userId = SecurityUtils.getUserId();
        mgtMemberOrderPageDto.setUserId(userId);
        Page<MgtMemberOrderPageVo> page = new Page<>();
        page.setSize(2000);
        page.setCurrent(1);
        if(page.getSize()>5000){
            page.setSize(5000);
            page.setCurrent(1);
        }
        List<MgtMemberOrderPageVo> mgtMemberOrderPageVoList = orderService.pageMgtMemberOrder(page,mgtMemberOrderPageDto);
        if(!mgtMemberOrderPageVoList.isEmpty()){
            List<MgtOrderGoodsPageVo> mgtOrderGoodsVoList;
@@ -92,6 +94,8 @@
        return R.ok(mgtOrderTotal);
    }
    @RequestMapping(value = "/pageMgtActivityOrder", method = RequestMethod.POST)
    @ApiOperation(value = "平台获取秒杀订单列表")
    public R<Page<MgtActivityOrderPageVo>> pageMgtActivityOrder(@RequestBody MgtShopOrderPageDto mgtShopOrderPageDto) {
@@ -110,8 +114,10 @@
        Long userId = SecurityUtils.getUserId();
        mgtShopOrderPageDto.setUserId(userId);
        Page<MgtActivityOrderPageVo> page = new Page<>();
        page.setSize(2000);
        page.setCurrent(1);
        if(page.getSize()>5000){
            page.setSize(5000);
            page.setCurrent(1);
        }
        List<MgtActivityOrderPageVo> mgtActivityOrderPageVos = orderService.pageMgtActivityOrder(page,mgtShopOrderPageDto);
        ExcelUtil<MgtActivityOrderPageVo> util = new ExcelUtil<MgtActivityOrderPageVo>(MgtActivityOrderPageVo.class);
        util.exportExcel(response, mgtActivityOrderPageVos, "秒杀订单列表");
@@ -135,8 +141,10 @@
        Long userId = SecurityUtils.getUserId();
        mgtShopOrderPageDto.setUserId(userId);
        Page<MgtShopOrderPageVo> page = new Page<>();
        page.setSize(2000);
        page.setCurrent(1);
        if(page.getSize()>5000){
            page.setSize(5000);
            page.setCurrent(1);
        }
        List<MgtShopOrderPageVo> shopOrderPageVoList = orderService.pageMgtShopOrder(page,mgtShopOrderPageDto);
        ExcelUtil<MgtShopOrderPageVo> util = new ExcelUtil<MgtShopOrderPageVo>(MgtShopOrderPageVo.class);
        util.exportExcel(response, shopOrderPageVoList, "门店订单列表");
@@ -151,6 +159,15 @@
        return R.ok(mgtOrderDetail);
    }
    @RequestMapping(value = "/getMgtShopAllOrderTotal", method = RequestMethod.POST)
    @ApiOperation(value = "获取商户订单统计")
    public R<MgtShopAllOrderTotal> getMgtShopAllOrderTotal(@RequestBody MgtShopAllOrderPageDto mgtShopAllOrderPageDto) {
        Long userId = SecurityUtils.getUserId();
        mgtShopAllOrderPageDto.setUserId(userId);
        MgtShopAllOrderTotal shopAllOrderTotal = orderService.getMgtShopAllOrderTotal(mgtShopAllOrderPageDto);
        return R.ok(shopAllOrderTotal);
    }
    @RequestMapping(value = "/pageMgtShopAllOrder", method = RequestMethod.POST)
    @ApiOperation(value = "平台获取商户订单记录")
    public R<Page<MgtShopAllOrderPageVo>> pageMgtShopAllOrder(@RequestBody MgtShopAllOrderPageDto mgtShopAllOrderPageDto) {
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/miniapp/AppOrderController.java
@@ -15,6 +15,7 @@
import com.ruoyi.system.api.domain.dto.AppBaseGetDto;
import com.ruoyi.system.api.domain.dto.AppMemberBindingDto;
import com.ruoyi.system.api.domain.poji.member.Member;
import com.ruoyi.system.api.model.LoginUser;
import com.ruoyi.system.api.service.RemoteConfigService;
import com.ruoyi.system.api.service.RemoteMemberService;
import io.swagger.annotations.Api;
@@ -57,10 +58,10 @@
    @ApiOperation(value = "购买商品")
    public R<AppSureOrderVo> buyGoods(@RequestBody AppSureOrderDto appSureOrderDto) {
        Long userId = SecurityUtils.getUserId();
        if(userId!=null){
        if (userId != null) {
            Member member = memberService.getMember(userId).getData();
            appSureOrderDto.setUserId(userId);
            if(member!=null&&member.getRelationShopId()!=null){
            if (member != null && member.getRelationShopId() != null) {
                appSureOrderDto.setShopId(member.getRelationShopId());
            }
        }
@@ -73,10 +74,10 @@
    @ApiOperation(value = "抢购商品")
    public R<AppPanicBuyVo> panicBuyGoods(@RequestBody AppPanicBuyDto appPanicBuyDto) {
        Long userId = SecurityUtils.getUserId();
        if(userId!=null){
        if (userId != null) {
            Member member = memberService.getMember(userId).getData();
            appPanicBuyDto.setUserId(userId);
            if(member!=null&&member.getRelationShopId()!=null){
            if (member != null && member.getRelationShopId() != null) {
                appPanicBuyDto.setShopId(member.getRelationShopId());
            }
        }
@@ -87,20 +88,26 @@
    @RequestMapping(value = "/placeOrder", method = RequestMethod.POST)
    @ApiOperation(value = "创建订单")
    public R<AppPlaceOrderVo> placeOrder(@RequestBody AppPlaceOrderDto appPlaceOrderDto) {
        Long userId = SecurityUtils.getUserId();
        if(userId!=null){
        LoginUser loginUser = SecurityUtils.getLoginUser();
        Long userId = loginUser.getUserid();
        appPlaceOrderDto.setUserId(userId);
        appPlaceOrderDto.setSpbillCreateIp(loginUser.getIpaddr());
        if (userId != null) {
            Member member = memberService.getMember(userId).getData();
            appPlaceOrderDto.setUserId(userId);
            if(member!=null&&member.getRelationShopId()!=null){
            if (member != null) {
                appPlaceOrderDto.setOpenid(member.getMiniOpenid());
                appPlaceOrderDto.setShopId(member.getRelationShopId());
            }
            if(member.getBindingFlag()!=1){
                //绑定商户
                AppMemberBindingDto appMemberBindingDto = new AppMemberBindingDto();
                appMemberBindingDto.setShopId(appPlaceOrderDto.getShopId());
                appMemberBindingDto.setUserId(userId);
                appMemberBindingDto.setBindingFlag(1);
                memberService.updateMemberBinding(appMemberBindingDto);
                if (member.getBindingFlag() != 1) {
                    //绑定商户
                    AppMemberBindingDto appMemberBindingDto = new AppMemberBindingDto();
                    appMemberBindingDto.setShopId(appPlaceOrderDto.getShopId());
                    appMemberBindingDto.setUserId(userId);
                    appMemberBindingDto.setBindingFlag(1);
                    memberService.updateMemberBinding(appMemberBindingDto);
                }
            }
        }
        AppPlaceOrderVo appPlaceOrderVo = orderService.placeOrder(appPlaceOrderDto);
@@ -111,13 +118,13 @@
    @ApiOperation(value = "创建活动订单")
    public R<AppPlaceOrderVo> placeActivityOrder(@Validated @RequestBody AppPlaceActivityDto appPlaceActivityDto) {
        Long userId = SecurityUtils.getUserId();
        if(userId!=null){
        if (userId != null) {
            Member member = memberService.getMember(userId).getData();
            appPlaceActivityDto.setUserId(userId);
            if(member!=null&&member.getRelationShopId()!=null){
            if (member != null && member.getRelationShopId() != null) {
                appPlaceActivityDto.setShopId(member.getRelationShopId());
            }
            if(member.getBindingFlag()!=1){
            if (member.getBindingFlag() != 1) {
                //绑定商户
                AppMemberBindingDto appMemberBindingDto = new AppMemberBindingDto();
                appMemberBindingDto.setShopId(appPlaceActivityDto.getShopId());
@@ -134,18 +141,18 @@
    @ApiOperation(value = "分页获取用户订单")
    public R<Page<AppUserOrderPageVo>> pageUserOrder(@RequestBody AppUserOrderPageDto appUserOrderPageDto) {
        Long userId = SecurityUtils.getUserId();
        if(userId!=null){
        if (userId != null) {
            Member member = memberService.getMember(userId).getData();
            appUserOrderPageDto.setUserId(userId);
            if(member!=null&&member.getRelationShopId()!=null){
            if (member != null && member.getRelationShopId() != null) {
                appUserOrderPageDto.setShopId(member.getRelationShopId());
            }
        }
        logger.info("appUserOrderPageDto:"+appUserOrderPageDto.toString());
        logger.info("appUserOrderPageDto:" + appUserOrderPageDto.toString());
        Page<AppUserOrderPageVo> page = new Page<>();
        page.setSize(appUserOrderPageDto.getPageSize());
        page.setCurrent(appUserOrderPageDto.getPageNum());
        List<AppUserOrderPageVo> appUserOrderPageVoList = orderService.pageUserOrder(page,appUserOrderPageDto);
        List<AppUserOrderPageVo> appUserOrderPageVoList = orderService.pageUserOrder(page, appUserOrderPageDto);
        return R.ok(page.setRecords(appUserOrderPageVoList));
    }
@@ -154,17 +161,17 @@
    public R<AppUserOrderGetVo> getAppOrderDetail(@RequestBody AppBaseGetDto appBaseGetDto) {
        Long userId = SecurityUtils.getUserId();
        Long shopId = null;
        if(userId!=null){
        if (userId != null) {
            Member member = memberService.getMember(userId).getData();
            appBaseGetDto.setUserId(userId);
            if(member!=null&&member.getRelationShopId()!=null){
            if (member != null && member.getRelationShopId() != null) {
                shopId = member.getRelationShopId();
            }
        }
        AppUserOrderGetVo appUserOrderGetVo = orderService.getAppOrderDetail(appBaseGetDto);
        if(shopId!=null&&appUserOrderGetVo.getShopId().equals(shopId)){
        if (shopId != null && appUserOrderGetVo.getShopId().equals(shopId)) {
            appUserOrderGetVo.setSameShop(1);
        }else{
        } else {
            appUserOrderGetVo.setSameShop(0);
        }
        return R.ok(appUserOrderGetVo);
@@ -184,12 +191,12 @@
        appPlaceOrderVo.setPayMoney(order.getPayMoney());
        appPlaceOrderVo.setUnpaidMoney(order.getPayMoney());
        Integer delayTime = 30;
        if(redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)){
        if (redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)) {
            delayTime = redisService.getCacheObject(SecurityConstant.AUTO_CANCEL_ORDER_TIME);
        }
        redisService.deleteObject(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + order.getOrderId());
        remoteConfigService.deleteDelayTask(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + order.getOrderId());
        appPlaceOrderVo.setEndTime(DateUtils.addMinutes(order.getCreateTime(),delayTime));
        appPlaceOrderVo.setEndTime(DateUtils.addMinutes(order.getCreateTime(), delayTime));
        return R.ok(appPlaceOrderVo);
    }
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/miniapp/NotifyController.java
@@ -1,38 +1,34 @@
package com.ruoyi.order.controller.miniapp;
import com.ruoyi.common.core.domain.R;
import com.github.binarywang.wxpay.bean.ecommerce.*;
import com.github.binarywang.wxpay.bean.notify.WxPayNotifyV3Response;
import com.github.binarywang.wxpay.bean.profitsharingV3.ProfitSharingNotifyData;
import com.github.binarywang.wxpay.bean.profitsharingV3.ProfitSharingNotifyResult;
import com.github.binarywang.wxpay.exception.WxPayException;
import com.github.binarywang.wxpay.service.ProfitSharingV3Service;
import com.github.binarywang.wxpay.service.WxPayService;
import com.github.binarywang.wxpay.v3.auth.Verifier;
import com.github.binarywang.wxpay.v3.util.AesUtils;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.order.domain.dto.AppSureOrderDto;
import com.ruoyi.order.domain.dto.WXPayNotifyDto;
import com.ruoyi.order.domain.vo.AppSureOrderVo;
import com.ruoyi.order.domain.vo.ProfitSharingNotifyNewResult;
import com.ruoyi.order.enums.WxPayNotifyEventTypeEnum;
import com.ruoyi.order.service.account.BackMessageService;
import com.ruoyi.order.service.order.OrderService;
import com.wechat.pay.contrib.apache.httpclient.notification.Notification;
import com.wechat.pay.contrib.apache.httpclient.notification.NotificationHandler;
import com.wechat.pay.contrib.apache.httpclient.notification.NotificationRequest;
import com.wechat.pay.java.core.Config;
import com.wechat.pay.java.core.RSAAutoCertificateConfig;
import com.wechat.pay.java.core.RSAConfig;
import com.wechat.pay.java.core.cipher.PrivacyEncryptor;
import com.wechat.pay.java.core.notification.NotificationConfig;
import com.wechat.pay.java.core.notification.NotificationParser;
import com.wechat.pay.java.core.notification.RequestParam;
import com.wechat.pay.java.service.partnerpayments.jsapi.model.Transaction;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import net.bytebuddy.asm.Advice;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedReader;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.security.GeneralSecurityException;
import java.util.Map;
import java.util.Objects;
/**
 * @program: ruoyi
@@ -44,88 +40,82 @@
@RestController
@RequestMapping("/app/notify")
public class NotifyController extends BaseController {
    /** 商户号 */
    public static String merchantId = "";
    /** 商户API私钥路径 */
    public static String privateKeyPath = "";
    /** 商户证书序列号 */
    public static String merchantSerialNumber = "";
    /** 微信支付平台证书路径 */
    public static String wechatPayCertificatePath = "";
    /** 商户APIV3密钥 */
    public static String apiV3key = "...";
    public static final String WECHAT_PAY_SERIAL = "Wechatpay-Serial";
    public static final String WECHAT_PAY_SIGNATURE = "Wechatpay-Signature";
    public static final String WECHAT_PAY_TIMESTAMP = "Wechatpay-Timestamp";
    public static final String WECHAT_PAY_NONCE = "Wechatpay-Nonce";
    private static final Gson GSON = new GsonBuilder().create();
    @Resource
    private OrderService orderService;
    @RequestMapping(value = "/payNotify", method = RequestMethod.POST)
    @ApiOperation(value = "微信支付通知")
    public Map payNotify(HttpServletRequest request, HttpServletResponse response) {
        Config config =
                new RSAConfig.Builder()
                        .merchantId(merchantId)
                        .privateKeyFromPath(privateKeyPath)
                        .merchantSerialNumber(merchantSerialNumber)
                        .wechatPayCertificatesFromPath(wechatPayCertificatePath)
                        .build();
    @Autowired
    private WxPayService wxService;
    @Resource
    private BackMessageService backMessageService;
        PrivacyEncryptor encryptor = config.createEncryptor();
        String wechatPayCertificateSerialNumber = encryptor.getWechatpaySerial();
    @PostMapping(value = "/payNotify")
    @ApiOperation(value = "微信支付/退款通知")
    public String payNotify(@RequestBody String notifyData, HttpServletRequest request, HttpServletResponse response) throws WxPayException {
        // 获取请求头
        SignatureHeader signatureHeader = getSignatureHeader(response);
        String nonoc=request.getHeader("Wechatpay-Nonce");
        String signature=request.getHeader("Wechatpay-Signature");
        String timestamp=request.getHeader("Wechatpay-Timestamp");
        String serial=request.getHeader("Wechatpay-Serial");
        String signatureType=request.getHeader("Wechatpay-Signature-Type");
        NotifyResponse responseData = GSON.fromJson(notifyData, NotifyResponse.class);
        String eventType = responseData.getEventType();
        String requestBody="";
        try {
            BufferedReader reader = request.getReader();
            String line = "";
            StringBuffer inputString = new StringBuffer();
            while ( (line = reader.readLine()) != null ) {
                inputString.append(line);
        int resultType = 1;
        String resultMessage = "";
        if(WxPayNotifyEventTypeEnum.TRANSACTION_SUCCESS.getCode().equals(eventType)){
            PartnerTransactionsNotifyResult notifyResult = wxService.getEcommerceService().parsePartnerNotifyResult(notifyData, signatureHeader);
            PartnerTransactionsResult result = notifyResult.getResult();
            // 支付通知回调
            if("SUCCESS".equals(result.getTradeState())){
                orderService.payBack(result);
            }
            if(inputString!=null && !"".equals(inputString)) {
                requestBody = inputString.toString();
            }
            reader.close();
        } catch (IOException e) {
            e.printStackTrace();
            resultMessage = GSON.toJson(notifyResult);
        } else if(WxPayNotifyEventTypeEnum.REFUND_SUCCESS.getCode().equals(eventType)
            || WxPayNotifyEventTypeEnum.REFUND_ABNORMAL.getCode().equals(eventType)
            || WxPayNotifyEventTypeEnum.REFUND_CLOSED.getCode().equals(eventType)){
            RefundNotifyResult result = wxService.getEcommerceService().parseRefundNotifyResult(notifyData, signatureHeader);
            orderService.orderRefundBack(result);
            resultType = 2;
            resultMessage = GSON.toJson(result);
        }
        // 保存支付/退款回调信息
        backMessageService.saveBackMessage(resultType, resultMessage);
        return WxPayNotifyV3Response.success("成功");
    }
    @PostMapping(value = "/profitSharingNotify")
    @ApiOperation(value = "微信分账通知")
    public String profitSharingNotify(@RequestBody String notifyData, HttpServletRequest request, HttpServletResponse response) throws WxPayException {
        ProfitSharingV3Service sharingV3Service = wxService.getProfitSharingV3Service();
        // ProfitSharingNotifyResult
        // 获取请求头
        SignatureHeader signatureHeader = getSignatureHeader(response);
        ProfitSharingNotifyNewResult notifyResult = getProfitSharingNotifyData(notifyData, signatureHeader);
        ProfitSharingNotifyResult result = notifyResult.getResult();
        String eventType = notifyResult.getRawData().getEventType();
        if(WxPayNotifyEventTypeEnum.PROFIT_SHARING_SUCCESS.getCode().equals(eventType)){
            // 分账通知回调
            orderService.profitSharingBack(result);
        }
        RequestParam requestParam = new RequestParam.Builder()
                .serialNumber(wechatPayCertificateSerialNumber)
                .nonce(nonoc)
                .signature(signature)
                .timestamp(timestamp)
                .body(requestBody)
                .build();
        String resultMessage = GSON.toJson(notifyResult);
        // 保存记录分账回调信息
        backMessageService.saveBackMessage(3, resultMessage);
        NotificationConfig notifiConfig = new RSAAutoCertificateConfig.Builder()
                .merchantId(merchantId)
                .privateKeyFromPath(privateKeyPath)
                .merchantSerialNumber(merchantSerialNumber)
                .apiV3Key(apiV3key)
                .build();
        NotificationParser parser = new NotificationParser(notifiConfig);
        Transaction transaction = parser.parse(requestParam, Transaction.class);
        String tradeStateEnum=transaction.getTradeState().toString();
        if(tradeStateEnum.equals("success")){
            orderService.payBack(transaction);
        }
        Map map=new HashMap();
        map.put("code","SUCCESS");
        map.put("message","成功");
        return map;
        return WxPayNotifyV3Response.success("成功");
    }
    @RequestMapping(value = "/shareNotify", method = RequestMethod.POST)
@@ -135,4 +125,49 @@
        return null;
    }
    public ProfitSharingNotifyNewResult getProfitSharingNotifyData(String notifyData, SignatureHeader header) throws WxPayException {
        if (Objects.nonNull(header) && !this.verifyNotifySign(header, notifyData)) {
            throw new WxPayException("非法请求,头部信息验证失败");
        }
        ProfitSharingNotifyData response = GSON.fromJson(notifyData, ProfitSharingNotifyData.class);
        ProfitSharingNotifyData.Resource resource = response.getResource();
        String cipherText = resource.getCipherText();
        String associatedData = resource.getAssociatedData();
        String nonce = resource.getNonce();
        String apiV3Key = this.wxService.getConfig().getApiV3Key();
        try {
            String result = AesUtils.decryptToString(associatedData, nonce, cipherText, apiV3Key);
            ProfitSharingNotifyResult profitSharingResult = GSON.fromJson(result, ProfitSharingNotifyResult.class);
            ProfitSharingNotifyNewResult notifyResult = new ProfitSharingNotifyNewResult();
            notifyResult.setRawData(response);
            notifyResult.setResult(profitSharingResult);
            return notifyResult;
        } catch (GeneralSecurityException | IOException e) {
            throw new WxPayException("解析报文异常!", e);
        }
    }
    private boolean verifyNotifySign(SignatureHeader header, String data) throws WxPayException {
        String beforeSign = String.format("%s\n%s\n%s\n",
                header.getTimeStamp(),
                header.getNonce(),
                data);
        Verifier verifier = this.wxService.getConfig().getVerifier();
        if (verifier == null) {
            throw new WxPayException("证书检验对象为空");
        }
        return verifier.verify(header.getSerialNo(),
                beforeSign.getBytes(StandardCharsets.UTF_8), header.getSigned());
    }
    private SignatureHeader getSignatureHeader(HttpServletResponse response){
        SignatureHeader signatureHeader = new SignatureHeader();
        signatureHeader.setSerialNo(response.getHeader(WECHAT_PAY_SERIAL));
        signatureHeader.setSigned(response.getHeader(WECHAT_PAY_SIGNATURE));
        signatureHeader.setNonce(response.getHeader(WECHAT_PAY_NONCE));
        signatureHeader.setTimeStamp(response.getHeader(WECHAT_PAY_TIMESTAMP));
        return signatureHeader;
    }
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/dto/MerCloseOrderDto.java
@@ -24,4 +24,7 @@
    @ApiModelProperty(value = "支付备注")
    private String payRemark;
    @ApiModelProperty(value = "支付方式1微信2现金3支付宝")
    private Integer payType;
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/dto/MerNewOrderDto.java
@@ -35,7 +35,7 @@
    @ApiModelProperty(value = "改变金额")
    private BigDecimal changeMoney;
    @ApiModelProperty(value = "支付方式")
    @ApiModelProperty(value = "支付方式1微信2现金3支付宝")
    private Integer payType;
    @ApiModelProperty(value = "订单备注")
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/dto/MerVerifyOrderDto.java
@@ -24,4 +24,7 @@
    @ApiModelProperty(value = "实付金额")
    private BigDecimal relPayMoney;
    @ApiModelProperty(value = "支付方式1微信2现金3支付宝")
    private Integer payType;
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/dto/MgtMemberOrderTotalDto.java
@@ -4,8 +4,6 @@
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
 * @author jqs34
 * @ClassName MgtMemberOrderTotalDto
@@ -17,7 +15,7 @@
public class MgtMemberOrderTotalDto extends MgtBaseDto {
    @ApiModelProperty(value = "用户id")
    private Long userId;
    private Long memberUserId;
    @ApiModelProperty(value = "搜索关键词")
    private String keyword;
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/dto/MgtShopOrderPageDto.java
@@ -17,6 +17,9 @@
    @ApiModelProperty(value = "关键词")
    private String keyword;
    @ApiModelProperty(value = "订单来源")
    private Integer orderFrom;
    @ApiModelProperty(value = "订单状态0.已取消1.待支付2.待核销3.已完成")
    private Integer orderStatus;
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/account/BackMessage.java
@@ -6,6 +6,7 @@
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.util.Date;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -38,7 +39,7 @@
    @TableField("del_flag")
    private String delFlag;
    /**
     * 回调类型1支付回调2退款回调
     * 回调类型 1支付回调 2退款回调 3、分账
     */
    @TableField("result_type")
    private Integer resultType;
@@ -47,6 +48,11 @@
     */
    @TableField("result_message")
    private String resultMessage;
    /**
     * 回调时间
     */
    @TableField("create_time")
    private Date createTime;
    @Override
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/account/OrderPayment.java
@@ -49,6 +49,12 @@
    @TableField("shop_id")
    private Long shopId;
    /**
     * 订单二级商户号
     */
    @TableField("sub_mch_id")
    private String subMchId;
    /**
     * 订单id
     */
    @TableField("order_id")
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/account/OrderRefund.java
@@ -99,7 +99,21 @@
     * 回调时间
     */
    @TableField("back_time")
    private Date backTime;
    private String backTime;
    /**
     * 微信退款订单id
     */
    @TableField("wx_refund_id")
    private String wxRefundId;
    /**
     * 1、发起退款 2、已退款
     */
    @TableField("refund_status")
    private Integer refundStatus;
    @Override
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/account/PaymentMessage.java
@@ -47,7 +47,7 @@
     * 发起关联id
     */
    @TableField("send_id")
    private Long sendId;
    private String sendId;
    /**
     * 发送报文
     */
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/account/ProfitSharing.java
@@ -40,7 +40,7 @@
    private Integer delFlag;
    /**
     * 1:PROCESSING:处理中
2:FINISHED:分账完成
        2:FINISHED:分账完成
     */
    @TableField("share_status")
    private Integer shareStatus;
@@ -93,7 +93,15 @@
     * 完成时间
     */
    @TableField("finish_time")
    private Date finishTime;
    private String finishTime;
    /**
     * 微信分账/回退单号
     */
    @TableField("wx_order_id")
    private String wxOrderId;
    /**
     * 分账失败原因
1、ACCOUNT_ABNORMAL : 分账接收账户异常
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/order/ConsumerGoods.java
@@ -108,6 +108,9 @@
     */
    @TableField("goods_type")
    private Integer goodsType;
    @TableField("goods_tag")
    private String goodsTag;
    /**
     * 商品名称
     */
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/order/OrderGoods.java
@@ -94,6 +94,9 @@
    @TableField("goods_name")
    private String goodsName;
    @TableField("goods_tag")
    private String goodsTag;
    @TableField("goods_introduction")
    private String goodsIntroduction;
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/AppConsumerPageVo.java
@@ -1,7 +1,5 @@
package com.ruoyi.order.domain.vo;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -27,8 +25,14 @@
    @ApiModelProperty(value="商品类型1周期2服务3体验4单品")
    private Integer goodsType;
    @ApiModelProperty(value="商品标签")
    private String goodsTag;
    @ApiModelProperty(value="商品名称")
    private String goodsName;
    @ApiModelProperty(value="商品名称")
    private String goodsIntroduction;
    @ApiModelProperty(value="商品图片")
    private String goodsPicture;
@@ -45,4 +49,7 @@
    @ApiModelProperty(value="消耗次数")
    private Integer usedNum;
    @ApiModelProperty(value="消耗次数")
    private Integer sureNum;
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/AppPlaceOrderVo.java
@@ -54,7 +54,7 @@
    private String packageStr;
    @ApiModelProperty(value = "签名方式")
    private String tradeType;
    private String signType;
    @ApiModelProperty(value = "签名")
    private String paySign;
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/AppUserOrderGoodsPageVo.java
@@ -27,6 +27,9 @@
    @ApiModelProperty(value = "商品简介")
    private String goodsIntroduction;
    @ApiModelProperty(value="商品标签")
    private String goodsTag;
    @ApiModelProperty(value="商品图片")
    private String goodsPicture;
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerMemberNoClearOrderVo.java
@@ -6,7 +6,6 @@
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
/**
 * @author jqs34
@@ -39,10 +38,13 @@
    @ApiModelProperty(value="应收订金")
    private BigDecimal receivableDeposit;
    @ApiModelProperty(value="订单实际支付金额")
    @ApiModelProperty(value="实收金额")
    private BigDecimal receiveMoney;
    @ApiModelProperty(value="已收金额")
    private BigDecimal payMoney;
    @ApiModelProperty(value="订单未支付金额")
    @ApiModelProperty(value="未收金额")
    private BigDecimal unPaidMoney;
    @ApiModelProperty(value="创建时间")
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerMemberOrderVo.java
New file
@@ -0,0 +1,59 @@
package com.ruoyi.order.domain.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
 * @ClassName MerMemberOrderVo
 * @Description TODO
 * @Author jqs
 * @Date 2023/8/5 16:08
 * @Version 1.0
 */
@Data
public class MerMemberOrderVo {
    @ApiModelProperty(value = "订单id")
    private String orderId;
    @ApiModelProperty(value="订单编号")
    private String orderNo;
    @ApiModelProperty(value="订单状态")
    private Integer orderStatus;
    @ApiModelProperty(value = "商品总价")
    private BigDecimal orderGoodsMoney;
    @ApiModelProperty(value = "优惠券抵扣")
    private BigDecimal couponDiscount;
    @ApiModelProperty(value="应付金额")
    private BigDecimal receivableMoney;
    @ApiModelProperty(value="应收订金")
    private BigDecimal receivableDeposit;
    @ApiModelProperty(value="实收金额")
    private BigDecimal receiveMoney;
    @ApiModelProperty(value="已收金额")
    private BigDecimal payMoney;
    @ApiModelProperty(value="未收金额")
    private BigDecimal unPaidMoney;
    @ApiModelProperty(value="收款时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date receiveMoneyTime;
    @ApiModelProperty(value="收款金额")
    private BigDecimal thisReceiveMoney;
    @ApiModelProperty(value="收款方式")
    private String thisReceiveType;
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerOrderPageVo.java
@@ -76,6 +76,9 @@
    @ApiModelProperty(value="订单来源")
    private String orderFromDesc;
    @ApiModelProperty(value="活动名字")
    private String activityName;
    @ApiModelProperty(value="订单商品列表")
    private List<MerOrderGoodsPageVo> merOrderGoodsVoList;
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerVerifyOrderVo.java
@@ -72,6 +72,18 @@
    @ApiModelProperty(value = "用户电话")
    private String userMobile;
    @ApiModelProperty(value="实收金额")
    private BigDecimal realReceiveMoney;
    @ApiModelProperty(value="已收金额")
    private BigDecimal receiveMoney;
    @ApiModelProperty(value="未收金额")
    private BigDecimal unReceiveMoney;
    @ApiModelProperty(value="支付方式1.全款2订金")
    private Integer payType;
    @ApiModelProperty(value="结清标记0否1是")
    private Integer closeFlag;
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MgtMemberOrderPageVo.java
@@ -50,10 +50,13 @@
    @ApiModelProperty(value="应收金额")
    private BigDecimal receivableMoney;
    @Excel(name = "订单实际支付金额", width = 30)
    @ApiModelProperty(value="订单实际支付金额")
    private BigDecimal payMoney;
    @Excel(name = "订单实收金额", width = 30)
    @ApiModelProperty(value = "实收金额")
    private BigDecimal receiveMoney;
    @Excel(name = "订单未支付金额", width = 30)
    @ApiModelProperty(value="订单未支付金额")
    private BigDecimal unPaidMoney;
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MgtMemberOrderTotalVo.java
@@ -29,4 +29,7 @@
    @ApiModelProperty(value = "支付总金额")
    private BigDecimal totalPayMoney;
    @ApiModelProperty(value = "实收金额")
    private BigDecimal totalReceiveMoney;
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MgtShopAllOrderTotal.java
New file
@@ -0,0 +1,28 @@
package com.ruoyi.order.domain.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
 * @ClassName MgtShopAllOrderTotal
 * @Description TODO
 * @Author jqs
 * @Date 2023/8/4 10:23
 * @Version 1.0
 */
@Data
public class MgtShopAllOrderTotal {
    @ApiModelProperty(value = "订单总数")
    private Integer orderTotal;
    @ApiModelProperty(value = "订单总金额")
    private BigDecimal totalOrderMoney;
    @ApiModelProperty(value = "实收金额")
    private BigDecimal totalReceiveMoney;
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/ProfitSharingNotifyNewResult.java
New file
@@ -0,0 +1,23 @@
package com.ruoyi.order.domain.vo;
import com.github.binarywang.wxpay.bean.profitsharingV3.ProfitSharingNotifyData;
import com.github.binarywang.wxpay.bean.profitsharingV3.ProfitSharingNotifyResult;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
@Data
@NoArgsConstructor
public class ProfitSharingNotifyNewResult implements Serializable {
    private static final long serialVersionUID = -6602962275015706689L;
    /**
     * 源数据
     */
    private ProfitSharingNotifyData rawData;
    /**
     * 解密后的数据
     */
    private ProfitSharingNotifyResult result;
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/enums/RefundStatusEnum.java
New file
@@ -0,0 +1,19 @@
package com.ruoyi.order.enums;
import com.ruoyi.order.enums.dict.IDict;
public enum RefundStatusEnum implements IDict<Integer> {
    /**
     * 退款状态,枚举值:
     * SUCCESS:退款成功
     * CLOSE:退款关闭
     * ABNORMAL:退款异常
     */
    SUCCESS(2, "SUCCESS"),
    CLOSE(3, "CLOSE"),
    ABNORMAL(4, "ABNORMAL");
    RefundStatusEnum(Integer code, String text){
        init(code, text);
    }
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/enums/WxPayNotifyEventTypeEnum.java
New file
@@ -0,0 +1,22 @@
package com.ruoyi.order.enums;
import com.ruoyi.order.enums.dict.IDict;
public enum WxPayNotifyEventTypeEnum implements IDict<String> {
    /**
     * 微信回调通知
        支付成功通知的类型为 TRANSACTION.SUCCESS
        分账 PROFITSHARING.SUCCESS
     */
    TRANSACTION_SUCCESS("TRANSACTION.SUCCESS", "TRANSACTION.SUCCESS"),
    PROFIT_SHARING_SUCCESS("PROFITSHARING.SUCCESS", "PROFITSHARING.SUCCESS"),
    REFUND_SUCCESS("REFUND.SUCCESS", "REFUND.SUCCESS"),
    REFUND_ABNORMAL("REFUND.ABNORMAL", "REFUND.ABNORMAL"),
    REFUND_CLOSED("REFUND.CLOSED", "REFUND.CLOSED");
    WxPayNotifyEventTypeEnum(String code, String text){
        init(code, text);
    }
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/enums/dict/DictBean.java
New file
@@ -0,0 +1,15 @@
package com.ruoyi.order.enums.dict;
import lombok.Data;
/**
 * 字典bean
 * 只有code和text,可用于展示下拉框
 *
 * @author luozhan
 */
@Data
public class DictBean<T> implements IDict<T> {
    private final T code;
    private final String text;
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/enums/dict/IDict.java
New file
@@ -0,0 +1,170 @@
package com.ruoyi.order.enums.dict;
import java.lang.reflect.Field;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
 * 字典接口
 * <p>
 * 自定义的字典枚举类实现本接口后可省略属性code和text,以及对应的get方法
 * 在构造方法中只需调用init方法即可初始化
 *
 * @author luozhan
 * @date 2021-12
 */
public interface IDict<T> {
    /**
     * 通过code获取value
     *
     * @param clazz 枚举class
     * @param code  code
     * @return text
     */
    static <T> String getTextByCode(Class<? extends IDict<T>> clazz, T code) {
        return Stream.of(clazz.getEnumConstants())
                .filter((IDict<T> e) -> e.getCode().equals(code))
                .map(IDict::getText)
                .findAny().orElse("");
    }
    /**
     * 通过text获取code
     *
     * @param clazz 枚举class
     * @param text  text
     * @return code
     */
    static <T> T getCodeByText(Class<? extends IDict<T>> clazz, String text) {
        return Stream.of(clazz.getEnumConstants())
                .filter((IDict<T> e) -> e.getText().equals(text))
                .map(IDict::getCode)
                .findAny().orElse(null);
    }
    /**
     * 通过code获取字典枚举实例
     *
     * @param clazz 枚举class
     * @param code  code
     * @param <T>   字典code类型
     * @param <R>   枚举类型
     * @return 字典枚举实例
     */
    @SuppressWarnings("unchecked")
    static <T, R extends IDict<T>> R getByCode(Class<? extends IDict<T>> clazz, T code) {
        return Stream.of(clazz.getEnumConstants())
                .filter((IDict<T> e) -> (e.getCode().equals(code)))
                .map(v -> (R) v)
                .findAny()
                .orElse(null);
    }
    /**
     * 获取给定的字典枚举项(常用下拉框数据请求)
     *
     * @param enums 可指定需要哪些项
     * @return List
     */
    @SafeVarargs
    static <T, E extends IDict<T>> List<IDict<T>> getItems(E... enums) {
        return Stream.of(enums)
                .map(DictPool::getDict)
                .collect(Collectors.toList());
    }
    /**
     * 获取所有字典枚举项,除开指定的枚举
     *
     * @param exclude 指定排除的枚举
     * @return List
     */
    @SafeVarargs
    @SuppressWarnings("unchecked")
    static <T, E extends IDict<T>> List<IDict<T>> getItemsExclude(E... exclude) {
        Class<IDict<T>> clazz = (Class<IDict<T>>) exclude.getClass().getComponentType();
        IDict<T>[] allEnum = clazz.getEnumConstants();
        List<IDict<T>> excludeList = Arrays.asList(exclude);
        return Stream.of(allEnum)
                .filter(e -> !excludeList.contains(e))
                .map(DictPool::getDict)
                .collect(Collectors.toList());
    }
    /**
     * 获取所有字典枚举项(常用下拉框数据请求)
     * 枚举值上标记@Deprecated的不会返回
     *
     * @param clazz 字典枚举类
     * @return List
     */
    static <T> List<IDict<T>> getAll(Class<? extends IDict<T>> clazz) {
        Map<String, Field> fieldCache = Arrays.stream(clazz.getDeclaredFields()).
                filter(Field::isEnumConstant).
                collect(Collectors.toMap(Field::getName, Function.identity()));
        IDict<T>[] allEnum = clazz.getEnumConstants();
        return Stream.of(allEnum)
                .filter(e -> !fieldCache.get(((Enum<?>) e).name()).isAnnotationPresent(Deprecated.class))
                .map(DictPool::getDict)
                .collect(Collectors.toList());
    }
    /**
     * 初始化
     *
     * @param code 字典编码
     * @param text 字典文本
     */
    default void init(T code, String text) {
        DictPool.putDict(this, code, text);
    }
    /**
     * 获取编码
     *
     * @return 编码
     */
    default T getCode() {
        return DictPool.getDict(this).getCode();
    }
    /**
     * 获取文本
     *
     * @return 文本
     */
    default String getText() {
        return DictPool.getDict(this).getText();
    }
    @SuppressWarnings("all")
    class DictPool {
        private static final Map<IDict, DictBean> DICT_MAP = new ConcurrentHashMap<>();
        private static final Map<String, Class<? extends IDict>> DICT_NAME_CLASS_MAP = new ConcurrentHashMap<>();
        static <T> void putDict(IDict<T> dict, T code, String text) {
            DICT_NAME_CLASS_MAP.put(dict.getClass().getName(), dict.getClass());
            DICT_MAP.put(dict, new DictBean<>(code, text));
        }
        public static List<IDict<Object>> getDict(String dictName) {
            Class<? extends IDict> aClass = DICT_NAME_CLASS_MAP.get(dictName);
            return IDict.getAll((Class<? extends IDict<Object>>) aClass);
        }
        static <K extends IDict<T>, T> DictBean<T> getDict(K dict) {
            return DICT_MAP.get(dict);
        }
    }
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/fliter/ParamsAuthFilter.java
@@ -30,7 +30,14 @@
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        String requestUrl = request.getRequestURI();
        String requestUrlUpperCase = requestUrl.toUpperCase();
        if(requestUrlUpperCase.contains("EXPORT")
                ||requestUrlUpperCase.contains("IMPORTTEMPLATE")
        ){
            filterChain.doFilter(request, response);
            return;
        }
        RepeatedlyRequestWrapper wrapper = new RepeatedlyRequestWrapper(request, response);
        getRequestParams(wrapper);
@@ -39,7 +46,6 @@
        // 返回的结果
        String content = responseWrapper.getTextContent();
        String requestUrl = request.getRequestURI();
        log.info("-------------------- Response Data ----------------------");
        log.info(requestUrl + " -> " + content);
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/order/OrderMapper.java
@@ -92,7 +92,7 @@
     * @param
     * @return  MgtOrderTotal
     */
    MgtOrderTotal totalOrderFirst();
    MgtOrderTotal totalOrderFirst(@Param("param")MgtShopOrderPageDto mgtShopOrderPageDto);
    /**
     * @description  统计门店订单总数
@@ -141,6 +141,15 @@
     * @date 2023/6/18 17:20
     */
    MgtBulletinBoardVo boardOrderTotal();
    /**
     * @description  活动人数统计
     * @author  jqs
     * @date    2023/8/3 21:12
     * @param
     * @return  Integer
     */
    Integer activityUserTotal();
    /**
    * @description getTotalOrderTotalOrderFrom
@@ -507,7 +516,7 @@
     * @description  商户端订单管理统计
     * @author  jqs
     * @date    2023/7/4 16:27
     * @param shopId
     * @param merOrderPageDto
     * @return  MerTotalOrderVo
     */
    MerTotalOrderVo totalMerOrder(@Param("param")MerOrderPageDto merOrderPageDto);
@@ -600,4 +609,22 @@
     * @return  Integer
     */
    Integer countUserBuyGoodsNum(@Param("userId")Long userId, @Param("goodsId")String goodsId);
    /**
     * @description  获取商户订单统计
     * @author  jqs
     * @date    2023/8/4 10:25
     * @param mgtShopAllOrderPageDto
     * @return  MgtShopAllOrderTotal
     */
    MgtShopAllOrderTotal getMgtShopAllOrderTotal(@Param("param")MgtShopAllOrderPageDto mgtShopAllOrderPageDto);
    /**
     * 分页获取消费记录
     * @param merOrderPageDto
     * @return
     */
    List<MerOrderPageVo> pageMerMemberPayOrder(Page page,@Param("param") MerMemberNoClearOrderDto merOrderPageDto);
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/account/BackMessageService.java
@@ -13,4 +13,10 @@
 */
public interface BackMessageService extends IService<BackMessage> {
    /**
     * 保存回调记录
     * @param resultType
     * @param resultMessage
     */
    void saveBackMessage(int resultType, String resultMessage);
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/account/OrderPaymentService.java
@@ -3,6 +3,9 @@
import com.ruoyi.order.domain.pojo.account.OrderPayment;
import com.baomidou.mybatisplus.extension.service.IService;
import java.math.BigDecimal;
import java.util.Date;
/**
 * <p>
 * 订单支付 服务类
@@ -13,4 +16,24 @@
 */
public interface OrderPaymentService extends IService<OrderPayment> {
    /**
     * 保存支付记录
     * @param userId
     * @param shopId
     * @param orderId
     * @param payMoney
     * @param endTime
     * @param profitSharing
     * @param openid
     * @param goodsNames
     * @param prepayId
     */
    void saveOrderPayment(Long userId, Long shopId, String subMchId, String orderId, BigDecimal payMoney, Date endTime, String profitSharing, String openid, String goodsNames, String prepayId);
    /**
     *
     * @param orderId
     * @return
     */
    OrderPayment getByOrderId(String orderId);
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/account/PaymentMessageService.java
@@ -13,4 +13,12 @@
 */
public interface PaymentMessageService extends IService<PaymentMessage> {
    /**
     * 保存请求信息
     * @param sendType
     * @param sendId
     * @param sendMessage
     * @param resultMessage
     */
    void savePaymentMessage(String sendType, String sendId, String sendMessage, String resultMessage);
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/account/ProfitSharingService.java
@@ -1,7 +1,10 @@
package com.ruoyi.order.service.account;
import com.github.binarywang.wxpay.bean.ecommerce.ProfitSharingResult;
import com.ruoyi.order.domain.pojo.account.ProfitSharing;
import com.baomidou.mybatisplus.extension.service.IService;
import java.math.BigDecimal;
/**
 * <p>
@@ -13,4 +16,12 @@
 */
public interface ProfitSharingService extends IService<ProfitSharing> {
    /**
     * 创建按分账记录
     * @param shopId
     * @param orderId
     * @param orderMoney
     * @param result
     */
    void saveProfitSharing(Long shopId, String orderId, BigDecimal orderMoney, ProfitSharingResult result);
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/account/BackMessageServiceImpl.java
@@ -6,6 +6,8 @@
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import java.util.Date;
/**
 * <p>
 * 回调报文 服务实现类
@@ -17,4 +19,13 @@
@Service
public class BackMessageServiceImpl extends ServiceImpl<BackMessageMapper, BackMessage> implements BackMessageService {
    @Override
    public void saveBackMessage(int resultType, String resultMessage) {
        BackMessage backMessage = new BackMessage();
        backMessage.setDelFlag("0");
        backMessage.setResultType(resultType);
        backMessage.setResultMessage(resultMessage);
        backMessage.setCreateTime(new Date());
        this.saveOrUpdate(backMessage);
    }
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/account/OrderPaymentServiceImpl.java
@@ -1,10 +1,16 @@
package com.ruoyi.order.service.impl.account;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ruoyi.common.core.utils.uuid.IdUtils;
import com.ruoyi.order.domain.pojo.account.OrderPayment;
import com.ruoyi.order.mapper.account.OrderPaymentMapper;
import com.ruoyi.order.service.account.OrderPaymentService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.Date;
/**
 * <p>
@@ -17,4 +23,34 @@
@Service
public class OrderPaymentServiceImpl extends ServiceImpl<OrderPaymentMapper, OrderPayment> implements OrderPaymentService {
    @Override
    public void saveOrderPayment(Long userId, Long shopId, String subMchId, String orderId, BigDecimal payMoney, Date endTime,
                                 String profitSharing, String openid, String goodsNames, String prepayId) {
        OrderPayment payment = new OrderPayment();
        payment.setPaymentId(IdUtils.simpleUUID());
        payment.setUserId(userId);
        payment.setShopId(shopId);
        payment.setOrderId(orderId);
        payment.setPayMoney(payMoney);
        payment.setTimeExpire(endTime);
        payment.setSubMchId(subMchId);
        // 0 否 1、是
        payment.setProfitSharing("Y".equals(profitSharing) ? 1 : 0);
        payment.setUserOpenId(openid);
        payment.setGoodsNames(goodsNames);
        payment.setPrepayId(prepayId);
        payment.setCreateTime(new Date());
        payment.setDelFlag(0);
        this.saveOrUpdate(payment);
    }
    @Override
    public OrderPayment getByOrderId(String orderId) {
        LambdaQueryWrapper<OrderPayment> queryWrapper = Wrappers.lambdaQuery();
        queryWrapper.eq(OrderPayment::getOrderId, orderId)
                .eq(OrderPayment::getDelFlag, 0)
                .eq(OrderPayment::getPayStatus, 2)
                .last(" limit 1 ");
        return this.getOne(queryWrapper);
    }
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/account/PaymentMessageServiceImpl.java
@@ -6,6 +6,8 @@
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import java.util.Date;
/**
 * <p>
 * 支付报文 服务实现类
@@ -17,4 +19,15 @@
@Service
public class PaymentMessageServiceImpl extends ServiceImpl<PaymentMessageMapper, PaymentMessage> implements PaymentMessageService {
    @Override
    public void savePaymentMessage(String sendType, String sendId, String sendMessage, String resultMessage) {
        PaymentMessage paymentMessage = new PaymentMessage();
        paymentMessage.setDelFlag("0");
        paymentMessage.setSendType(sendType);
        paymentMessage.setSendId(sendId);
        paymentMessage.setSendMessage(sendMessage);
        paymentMessage.setResultMessage(resultMessage);
        paymentMessage.setCreateTime(new Date());
        this.saveOrUpdate(paymentMessage);
    }
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/account/ProfitSharingServiceImpl.java
@@ -1,10 +1,17 @@
package com.ruoyi.order.service.impl.account;
import com.github.binarywang.wxpay.bean.ecommerce.ProfitSharingResult;
import com.ruoyi.common.core.utils.uuid.IdUtils;
import com.ruoyi.order.domain.pojo.account.ProfitSharing;
import com.ruoyi.order.mapper.account.ProfitSharingMapper;
import com.ruoyi.order.service.account.ProfitSharingService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Date;
import java.util.List;
/**
 * <p>
@@ -17,4 +24,31 @@
@Service
public class ProfitSharingServiceImpl extends ServiceImpl<ProfitSharingMapper, ProfitSharing> implements ProfitSharingService {
    @Override
    public void saveProfitSharing(Long shopId, String orderId, BigDecimal orderMoney, ProfitSharingResult result) {
        ProfitSharing profitSharing = new ProfitSharing();
        profitSharing.setShareId(result.getOutOrderNo());
        profitSharing.setDelFlag(0);
        profitSharing.setShareStatus("FINISHED".equals(result.getStatus()) ? 2 : 1);
        profitSharing.setShopId(shopId);
        profitSharing.setOrderId(orderId);
        profitSharing.setOrderMoney(orderMoney);
        List<ProfitSharingResult.Receiver> receivers = result.getReceivers();
        if(null != receivers && !receivers.isEmpty()){
            ProfitSharingResult.Receiver receiver = receivers.get(0);
            profitSharing.setReceiverAccount(receiver.getReceiverMchid());
            BigDecimal receiverAmount = new BigDecimal(receiver.getAmount());
            receiverAmount = receiverAmount.divide(new BigDecimal("100"), 2, RoundingMode.HALF_UP);
            profitSharing.setReceiverAmount(receiverAmount);
            profitSharing.setSurpMoney(orderMoney.subtract(receiverAmount));
            profitSharing.setReceiverDescription(receiver.getDescription());
            profitSharing.setFinishFlag(0);
            profitSharing.setFailReason(receiver.getFailReason());
            profitSharing.setDetailId(receiver.getDetailId());
        }
        profitSharing.setCreateTime(new Date());
        this.saveOrUpdate(profitSharing);
    }
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/ConsumerGoodsServiceImpl.java
@@ -142,6 +142,7 @@
                        consumerGoods.setUsedNum(0);
                        consumerGoods.setCreateTime(new Date());
                        consumerGoods.setGoodsType(goods.getGoodsType());
                        consumerGoods.setGoodsTag(goods.getGoodsTags());
                        consumerGoods.setGoodsIntroduction(goods.getGoodsIntroduction());
                        consumerGoods.setGoodsPicture(goodsFile.getFileUrl());
                        consumerGoods.setGoodsNurses(goods.getGoodsNurses());
@@ -420,6 +421,7 @@
                consumerGoods.setUsedNum(0);
                consumerGoods.setCreateTime(new Date());
                consumerGoods.setGoodsType(goods.getGoodsType());
                consumerGoods.setGoodsTag(goods.getGoodsTags());
                consumerGoods.setGoodsIntroduction(goods.getGoodsIntroduction());
                consumerGoods.setGoodsPicture(goodsFile.getFileUrl());
                consumerGoods.setGoodsNurses(goods.getGoodsNurses());
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java
@@ -1,10 +1,21 @@
package com.ruoyi.order.service.impl.order;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.binarywang.wxpay.bean.ecommerce.*;
import com.github.binarywang.wxpay.bean.ecommerce.ProfitSharingRequest.Receiver;
import com.github.binarywang.wxpay.bean.ecommerce.enums.TradeTypeEnum;
import com.github.binarywang.wxpay.bean.profitsharingV3.ProfitSharingNotifyResult;
import com.github.binarywang.wxpay.config.WxPayConfig;
import com.github.binarywang.wxpay.exception.WxPayException;
import com.github.binarywang.wxpay.service.WxPayService;
import com.google.common.base.Joiner;
import com.google.gson.Gson;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.common.core.utils.StringUtils;
@@ -12,15 +23,23 @@
import com.ruoyi.common.redis.service.RedisService;
import com.ruoyi.common.security.utils.CodeFactoryUtil;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.order.config.WxPayConfiguration;
import com.ruoyi.order.domain.dto.*;
import com.ruoyi.order.domain.pojo.account.OrderPayment;
import com.ruoyi.order.domain.pojo.account.OrderRefund;
import com.ruoyi.order.domain.pojo.account.ProfitSharing;
import com.ruoyi.order.domain.pojo.order.ConsumerGoods;
import com.ruoyi.order.domain.pojo.order.Order;
import com.ruoyi.order.domain.pojo.order.OrderGoods;
import com.ruoyi.order.domain.pojo.order.PayRecord;
import com.ruoyi.order.domain.vo.*;
import com.ruoyi.order.enums.RefundStatusEnum;
import com.ruoyi.order.enums.dict.IDict;
import com.ruoyi.order.mapper.order.OrderMapper;
import com.ruoyi.order.service.account.OrderPaymentService;
import com.ruoyi.order.service.account.OrderRefundService;
import com.ruoyi.order.service.account.PaymentMessageService;
import com.ruoyi.order.service.account.ProfitSharingService;
import com.ruoyi.order.service.order.*;
import com.ruoyi.system.api.constant.AppErrorConstant;
import com.ruoyi.system.api.constant.DelayTaskEnum;
@@ -35,10 +54,11 @@
import com.ruoyi.system.api.domain.poji.member.MemberCoupon;
import com.ruoyi.system.api.domain.poji.member.MemberGiftRecord;
import com.ruoyi.system.api.domain.poji.shop.Shop;
import com.ruoyi.system.api.domain.poji.shop.ShopProportionVo;
import com.ruoyi.system.api.domain.poji.sys.SysUser;
import com.ruoyi.system.api.domain.vo.*;
import com.ruoyi.system.api.service.*;
import com.wechat.pay.java.service.partnerpayments.jsapi.model.Transaction;
import lombok.extern.slf4j.Slf4j;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
@@ -47,6 +67,7 @@
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.*;
@@ -63,6 +84,7 @@
 * @since 2023-04-25
 */
@Service
@Slf4j
public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements OrderService {
    @Resource
@@ -110,22 +132,20 @@
    @Autowired
    private RedissonClient redissonClient;
    /** 商户号 */
    public static String merchantId = "";
    /** 商户API私钥路径 */
    public static String privateKeyPath = "";
    /** 商户证书序列号 */
    public static String merchantSerialNumber = "";
    /** 微信支付平台证书路径 */
    public static String wechatPayCertificatePath = "";
    /** 微信支付 APIv3 密钥 */
    public static String apiV3Key = "";
    /** 微信支付APPID */
    public static String appId="";
    /** 微信支付商户ID */
    public static String mchId="";
    /** 通知地址 */
    public static String notifyUrl="";
    @Autowired
    private WxPayService wxService;
    @Resource
    private PaymentMessageService paymentMessageService;
    @Resource
    private OrderPaymentService orderPaymentService;
    @Resource
    private ProfitSharingService profitSharingService;
    @Resource
    private OrderRefundService orderRefundService;
    /**
     * @description: buyGoods
@@ -153,8 +173,8 @@
        Map<String, Goods> goodsMap = goodsList.stream()
                .collect(Collectors.toMap(Goods::getGoodsId, Function.identity()));
        Boolean haveDeposit = false;
        for(Goods goods : goodsList){
            if(goods.getSubscription()!=null&&goods.getSubscription().compareTo(BigDecimal.ZERO)>0){
        for (Goods goods : goodsList) {
            if (goods.getSubscription() != null && goods.getSubscription().compareTo(BigDecimal.ZERO) > 0) {
                haveDeposit = true;
            }
        }
@@ -174,7 +194,7 @@
        // 将优惠券列表转换为Map,以优惠券ID为键
        Map<String, AppMemberCouponVo> appMemberCouponVoMap = new HashMap<>();
        if(appMemberCouponVoList!=null&&!appMemberCouponVoList.isEmpty()){
        if (appMemberCouponVoList != null && !appMemberCouponVoList.isEmpty()) {
            appMemberCouponVoMap = appMemberCouponVoList.stream().collect(Collectors.toMap(AppMemberCouponVo::getMemberCouponId, Function.identity()));
        }
        AppMemberCouponVo appMemberCouponVo;
@@ -201,7 +221,7 @@
            memberCouponId = appBuyGoodsDto.getMemberCouponId();
            // 获取商品信息
            goods = goodsMap.get(goodsId);
            if(goods.getGoodsStatus()!=1){
            if (goods.getGoodsStatus() != 1) {
                throw new ServiceException(AppErrorConstant.GOODS_DOWN);
            }
            // 设置订单商品信息
@@ -234,7 +254,7 @@
                    if (couponType == 1 && appMemberCouponVo.getMoneyThreshold() != null && appMemberCouponVo.getDiscountMoney() != null) {
                        moneyThreshold = appMemberCouponVo.getMoneyThreshold();
                        discountMoney = appMemberCouponVo.getDiscountMoney();
                        if (goodsTotalPrice.compareTo(moneyThreshold) >= 0 && goodsTotalPrice.compareTo(discountMoney)>0) {
                        if (goodsTotalPrice.compareTo(moneyThreshold) >= 0 && goodsTotalPrice.compareTo(discountMoney) > 0) {
                            goodsRealPrice = goodsTotalPrice.subtract(discountMoney);
                            useCoupon = 1;
                            userCouponIdSet.add(memberCouponId);
@@ -242,16 +262,16 @@
                        }
                    } else if (couponType == 2 && appMemberCouponVo.getDiscountPercent() != null) {
                        discountPercent = appMemberCouponVo.getDiscountPercent();
                        goodsRealPrice = goodsTotalPrice.multiply(discountPercent).divide(BigDecimal.TEN,2,BigDecimal.ROUND_HALF_UP);
                        goodsRealPrice = goodsTotalPrice.multiply(discountPercent).divide(BigDecimal.TEN, 2, BigDecimal.ROUND_HALF_UP);
                        discountMoney = goodsTotalPrice.subtract(goodsRealPrice);
                        useCoupon = 1;
                        userCouponIdSet.add(memberCouponId);
                        appSureOrderGoodsVo.setMemberCouponId(memberCouponId);
                    } else if (couponType == 3 && appMemberCouponVo.getDiscountMoney() != null) {
                        discountMoney = appMemberCouponVo.getDiscountMoney();
                        if(goodsTotalPrice.compareTo(discountMoney)>0){
                        if (goodsTotalPrice.compareTo(discountMoney) > 0) {
                            goodsRealPrice = goodsTotalPrice.subtract(discountMoney);
                            if(goodsRealPrice.compareTo(BigDecimal.ZERO)<0){
                            if (goodsRealPrice.compareTo(BigDecimal.ZERO) < 0) {
                                goodsRealPrice = BigDecimal.ZERO;
                            }
                            useCoupon = 1;
@@ -267,12 +287,12 @@
            appSureOrderGoodsVo.setGoodsRealPrice(goodsRealPrice);
            // 获取商品押金
            goodsDeposit = goods.getSubscription();
            if (goodsDeposit != null && goodsDeposit.compareTo(BigDecimal.ZERO)>0) {
            if (goodsDeposit != null && goodsDeposit.compareTo(BigDecimal.ZERO) > 0) {
                goodsDeposit = goodsDeposit.multiply(buyNumBig);
            }else{
                if(haveDeposit){
            } else {
                if (haveDeposit) {
                    goodsDeposit = goodsRealPrice;
                }else{
                } else {
                    goodsDeposit = new BigDecimal("0.00");
                }
            }
@@ -287,9 +307,9 @@
        //处理优惠券列表
        if (appMemberCouponVoList != null && !appMemberCouponVoList.isEmpty()) {
            for (AppMemberCouponVo entity : appMemberCouponVoList) {
                if(userCouponIdSet!=null&&userCouponIdSet.contains(entity.getMemberCouponId())){
                if (userCouponIdSet != null && userCouponIdSet.contains(entity.getMemberCouponId())) {
                    entity.setUseFlag(1);
                }else{
                } else {
                    entity.setUseFlag(0);
                }
@@ -297,18 +317,18 @@
            }
            // 过滤商品优惠券列表
            List<AppMemberCouponVo> appGoodsMemberCouponVoList;
            for(AppSureOrderGoodsVo sureOrderGoodsVo : appSureOrderGoodsVoList) {
            for (AppSureOrderGoodsVo sureOrderGoodsVo : appSureOrderGoodsVoList) {
                appGoodsMemberCouponVoList = new ArrayList<>();
                for(AppMemberCouponVo entity : appMemberCouponVoList){
                    if(StringUtils.isBlank(entity.getRelGoodsIds())||entity.getRelGoodsIds().contains(sureOrderGoodsVo.getGoodsId())){
                        if(entity.getCouponType()==1){
                            if(entity.getMoneyThreshold().compareTo(sureOrderGoodsVo.getGoodsTotalPrice())<0&&entity.getDiscountMoney().compareTo(sureOrderGoodsVo.getGoodsTotalPrice())<0){
                for (AppMemberCouponVo entity : appMemberCouponVoList) {
                    if (StringUtils.isBlank(entity.getRelGoodsIds()) || entity.getRelGoodsIds().contains(sureOrderGoodsVo.getGoodsId())) {
                        if (entity.getCouponType() == 1) {
                            if (entity.getMoneyThreshold().compareTo(sureOrderGoodsVo.getGoodsTotalPrice()) < 0 && entity.getDiscountMoney().compareTo(sureOrderGoodsVo.getGoodsTotalPrice()) < 0) {
                                appGoodsMemberCouponVoList.add(entity);
                            }
                        }else if(entity.getCouponType()==2){
                        } else if (entity.getCouponType() == 2) {
                            appGoodsMemberCouponVoList.add(entity);
                        }else if(entity.getCouponType()==3){
                            if(entity.getDiscountMoney().compareTo(sureOrderGoodsVo.getGoodsTotalPrice())<0){
                        } else if (entity.getCouponType() == 3) {
                            if (entity.getDiscountMoney().compareTo(sureOrderGoodsVo.getGoodsTotalPrice()) < 0) {
                                appGoodsMemberCouponVoList.add(entity);
                            }
                        }
@@ -415,8 +435,8 @@
        if (activityGoodsGetVo.getActivityStatus() == 2) {
            throw new ServiceException(AppErrorConstant.ACTIVITY_END);
        }
        Integer surpNum = redisService.getCacheObject(SecurityConstant.ACTIVITY_GOODS+"-"+activityId+"-"+goodsId);
        if(surpNum==null||surpNum<1){
        Integer surpNum = redisService.getCacheObject(SecurityConstant.ACTIVITY_GOODS + "-" + activityId + "-" + goodsId);
        if (surpNum == null || surpNum < 1) {
            throw new ServiceException(AppErrorConstant.ACTIVITY_GOODS_NULL);
        }
        if (activityGoodsGetVo.getAvailableBuyNum() < 1) {
@@ -426,7 +446,7 @@
            throw new ServiceException(AppErrorConstant.ACTIVITY_GOODS_BEYOND);
        }
        Goods goods = remoteGoodsService.getGoods(goodsId).getData();
        if(goods.getGoodsStatus()!=1){
        if (goods.getGoodsStatus() != 1) {
            throw new ServiceException(AppErrorConstant.GOODS_DOWN);
        }
        appPanicBuyVo.setActivityId(activityId);
@@ -456,9 +476,9 @@
        appPanicBuyVo.setGoodsTotalPrice(goodsTotalPrice);
        appPanicBuyVo.setGoodsRealPrice(goodsRealPrice);
        goodsDeposit = activityGoodsGetVo.getActivitySubscription();
        if (goodsDeposit == null || goodsDeposit.compareTo(BigDecimal.ZERO)==0) {
        if (goodsDeposit == null || goodsDeposit.compareTo(BigDecimal.ZERO) == 0) {
            goodsDeposit = new BigDecimal("0.00");
        }else{
        } else {
            goodsDeposit = goodsDeposit.multiply(buyNumBig);
        }
        appPanicBuyVo.setGoodsDeposit(goodsDeposit);
@@ -498,8 +518,8 @@
        Map<String, Goods> goodsMap = goodsList.stream()
                .collect(Collectors.toMap(Goods::getGoodsId, Function.identity()));
        Boolean haveDeposit = false;
        for(Goods goods : goodsList){
            if(goods.getSubscription()!=null&&goods.getSubscription().compareTo(BigDecimal.ZERO)>0){
        for (Goods goods : goodsList) {
            if (goods.getSubscription() != null && goods.getSubscription().compareTo(BigDecimal.ZERO) > 0) {
                haveDeposit = true;
            }
        }
@@ -510,7 +530,7 @@
        Integer serviceNum;
        Integer goodsNum = 0;
        String memberCouponId;
        Goods goods;
        Goods goods = null;
        GoodsFile goodsFile;
        BigDecimal goodsPrice;
        BigDecimal goodsTotalPrice;
@@ -542,6 +562,7 @@
        HashSet<String> goodsTypeSet = new HashSet<>();
        //使用优惠券
        StringJoiner memberCouponSJ = new StringJoiner(",");
        List<String> goodsNameList = new ArrayList<>();
        // 遍历购买的商品列表
        for (AppBuyGoodsDto appBuyGoodsDto : appBuyGoodsDtoList) {
            appSureOrderGoodsVo = new AppSureOrderGoodsVo();
@@ -551,6 +572,7 @@
            memberCouponId = appBuyGoodsDto.getMemberCouponId();
            // 获取商品信息
            goods = goodsMap.get(goodsId);
            goodsNameList.add(goods.getGoodsName());
            // 设置商品信息
            appSureOrderGoodsVo.setGoodsId(goodsId);
            appSureOrderGoodsVo.setGoodsName(goods.getGoodsName());
@@ -596,7 +618,7 @@
                        }
                    } else if (couponType == 2 && appMemberCouponVo.getDiscountPercent() != null) {
                        discountPercent = appMemberCouponVo.getDiscountPercent();
                        goodsRealPrice = goodsTotalPrice.multiply(discountPercent).divide(BigDecimal.TEN,2, BigDecimal.ROUND_HALF_UP);
                        goodsRealPrice = goodsTotalPrice.multiply(discountPercent).divide(BigDecimal.TEN, 2, BigDecimal.ROUND_HALF_UP);
                        discountMoney = goodsTotalPrice.subtract(goodsRealPrice);
                        useCoupon = 1;
                    } else if (couponType == 3 && appMemberCouponVo.getDiscountMoney() != null) {
@@ -613,12 +635,12 @@
            appSureOrderGoodsVo.setGoodsRealPrice(goodsRealPrice);
            // 获取商品押金
            goodsDeposit = goods.getSubscription();
            if (goodsDeposit != null && goodsDeposit.compareTo(BigDecimal.ZERO)>0) {
            if (goodsDeposit != null && goodsDeposit.compareTo(BigDecimal.ZERO) > 0) {
                goodsDeposit = goodsDeposit.multiply(buyNumBig);
            }else{
                if(haveDeposit){
            } else {
                if (haveDeposit) {
                    goodsDeposit = goodsRealPrice;
                }else{
                } else {
                    goodsDeposit = new BigDecimal("0.00");
                }
            }
@@ -648,6 +670,7 @@
            orderGoods.setServiceNum(serviceNum);
            orderGoods.setGoodsType(goods.getGoodsType());
            orderGoods.setGoodsName(goods.getGoodsName());
            orderGoods.setGoodsTag(goods.getGoodsTags());
            orderGoods.setGoodsIntroduction(goods.getGoodsIntroduction());
            orderGoods.setGoodsPicture(goodsFile.getFileUrl());
            // 保存订单商品
@@ -713,53 +736,127 @@
        }
        appPlaceOrderVo.setOrderId(orderId);
        appPlaceOrderVo.setOrderNo(orderNo);
        // 调用支付
       /* CombineTransactionsJsRequest request=new CombineTransactionsJsRequest();
        request.setCombineAppid();
        request.setCombineMchid();
        profitsSharingService.combineTransactions(request);*/
       //构建预下单支付对象
        /*PrepayRequest request = new PrepayRequest();
        Amount amount = new Amount();
        amount.setTotal(Integer.parseInt(order.getPayMoney().multiply(new BigDecimal(100)).toString()));
        request.setAmount(amount);
        request.setAppid(this.appId);
        request.setMchid(this.mchId);
        request.setDescription(order.getGoodsInfo());
        request.setNotifyUrl(this.notifyUrl);
        request.setOutTradeNo(order.getOrderId());
        Payer payer = new Payer();
        payer.setOpenid("oLTPCuN5a-nBD4rAL_fa********");
        request.setPayer(payer);*/
        //返回前端唤醒支付结果信息
        /*PrepayWithRequestPaymentResponse res = this.getJsApIResponse(request);
        appPlaceOrderVo.setAppId(this.appId);
        appPlaceOrderVo.setTimeStamp(res.getTimeStamp());
        appPlaceOrderVo.setNonceStr(res.getNonceStr());
        appPlaceOrderVo.setPackageStr(res.getPackageVal());
        appPlaceOrderVo.setTradeType(res.getSignType());
        appPlaceOrderVo.setPaySign(res.getPaySign());*/
        String goodsName = "";
        if (null != goods) {
            goodsName = goods.getGoodsName();
        }
        // 小程序微信下单支付
        createWxPayInfo(appPlaceOrderVo, userId, order.getShopId(), goodsName, orderNo,
                orderId, order.getPayMoney(), appPlaceOrderDto.getOpenid(),
                appPlaceOrderDto.getSpbillCreateIp(), goodsNameList);
        //减去优惠券
        if(memberCouponSJ!=null&&StringUtils.isNotBlank(memberCouponSJ.toString())){
        if (StringUtils.isNotBlank(memberCouponSJ.toString())) {
            remoteCouponService.useMemberCoupon(memberCouponSJ.toString());
        }
        //生成自动取消订单延时任务
        Integer delayTime = 30;
        if(redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)){
        if (redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)) {
            delayTime = redisService.getCacheObject(SecurityConstant.AUTO_CANCEL_ORDER_TIME);
        }
        redisService.setCacheObject(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + orderId, orderId, delayTime.longValue(), TimeUnit.MINUTES);
        DelayTask delayTask = new DelayTask();
        delayTask.setDelFlag(0);
        delayTask.setCreateTime(new Date());
        delayTask.setEndTime(DateUtils.addMinutes(new Date(),delayTime));
        delayTask.setEndTime(DateUtils.addMinutes(new Date(), delayTime));
        delayTask.setRedisKey(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + orderId);
        remoteConfigService.addDelayTask(delayTask);
        appPlaceOrderVo.setEndTime(DateUtils.addMinutes(order.getCreateTime(),delayTime));
        appPlaceOrderVo.setEndTime(DateUtils.addMinutes(order.getCreateTime(), delayTime));
        return appPlaceOrderVo;
    }
    /**
     * 小程序支付下单API
     * @param appPlaceOrderVo
     * @param userId
     * @param shopId
     * @param goodsName
     * @param orderNo
     * @param orderId
     * @param payMoney
     * @param openid
     * @param payerClientIp
     * @param goodsNameList
     */
    private void createWxPayInfo(AppPlaceOrderVo appPlaceOrderVo, Long userId, Long shopId,
                                 String goodsName, String orderNo,
                                 String orderId, BigDecimal payMoney,
                                 String openid, String payerClientIp, List<String> goodsNameList){
        try {
            // 创建支付订单
            R<String> resultMch = remoteShopService.getShopSubMchId(shopId);
            String subMchId = resultMch.getData();
            if (StringUtils.isEmpty(subMchId)) {
                throw new ServiceException("获取微信商户号失败");
            }
            WxPayConfig config = wxService.getConfig();
            config.setSubMchId(subMchId);
            PartnerTransactionsRequest request = new PartnerTransactionsRequest();
            request.setSpAppid(config.getAppId());
            request.setSpMchid(config.getMchId());
            request.setSubMchid(config.getSubMchId());
            //  商品描述    body
            String description = goodsName + "-商品购买";
            request.setDescription(description);
            request.setOutTradeNo(orderNo);
            request.setNotifyUrl(config.getNotifyUrl());
            // 结算信息
            PartnerTransactionsRequest.SettleInfo settleInfo = new PartnerTransactionsRequest.SettleInfo();
            settleInfo.setProfitSharing(true);
            settleInfo.setSubsidyAmount(BigDecimal.ZERO);
            request.setSettleInfo(settleInfo);
            // 订单总金额
            Integer totalFee = payMoney.multiply(new BigDecimal(100)).intValue();
            PartnerTransactionsRequest.Amount amount = new PartnerTransactionsRequest.Amount();
            amount.setTotal(totalFee);
            amount.setCurrency("CNY");
            request.setAmount(amount);
            // 支付者
            PartnerTransactionsRequest.Payer payer = new PartnerTransactionsRequest.Payer();
            payer.setSpOpenid(openid);
            request.setPayer(payer);
            // 场景信息
            PartnerTransactionsRequest.SceneInfo sceneInfo = new PartnerTransactionsRequest.SceneInfo();
            sceneInfo.setPayerClientIp(payerClientIp);
            request.setSceneInfo(sceneInfo);
            TransactionsResult.JsapiResult result = wxService.getEcommerceService().partnerTransactions(TradeTypeEnum.JSAPI, request);
            // 请求参数
            Gson gson = new Gson();
            String payRequestJson = gson.toJson(request);
            // 返回参数
            String payResponseJson = gson.toJson(result);
            // 支付相关信息返回
            appPlaceOrderVo.setAppId(result.getAppId());
            appPlaceOrderVo.setMchId(config.getMchId());
            appPlaceOrderVo.setTimeStamp(result.getTimeStamp());
            appPlaceOrderVo.setNonceStr(result.getNonceStr());
            appPlaceOrderVo.setPackageStr(result.getPackageValue());
            appPlaceOrderVo.setSignType(result.getSignType());
            appPlaceOrderVo.setPaySign(result.getPaySign());
            appPlaceOrderVo.setPrepayId(result.getPackageValue());
            // 保存支付订单统一下单日志
            paymentMessageService.savePaymentMessage("1", orderId, payRequestJson, payResponseJson);
            // 保存支付订单统一下单支付记录
            orderPaymentService.saveOrderPayment(userId, shopId, subMchId, orderId, payMoney,
                    appPlaceOrderVo.getEndTime(), "Y", openid,
                    Joiner.on(";").join(goodsNameList), result.getPackageValue());
        } catch (WxPayException e) {
            throw new ServiceException(e.getMessage());
        }
    }
@@ -783,17 +880,17 @@
        String goodsId = appPlaceActivityDto.getGoodsId();
        Integer buyNum = appPlaceActivityDto.getBuyNum();
        //redis库存控制极简版
        String goodsLock = "goods_lock_"+activityId+"_"+goodsId;
        String goodsLock = "goods_lock_" + activityId + "_" + goodsId;
        RLock redissonLock = redissonClient.getLock(goodsLock);
        try{
        try {
            redissonLock.lock(30, TimeUnit.SECONDS);
            Integer surpNum = redisService.getCacheObject(SecurityConstant.ACTIVITY_GOODS+"-"+activityId+"-"+goodsId);
            if(surpNum==null||surpNum<buyNum){
            Integer surpNum = redisService.getCacheObject(SecurityConstant.ACTIVITY_GOODS + "-" + activityId + "-" + goodsId);
            if (surpNum == null || surpNum < buyNum) {
                throw new ServiceException(AppErrorConstant.ACTIVITY_GOODS_NULL);
            }else{
                redisService.setCacheObject(SecurityConstant.ACTIVITY_GOODS+"-"+activityId+"-"+goodsId,surpNum-buyNum);
            } else {
                redisService.setCacheObject(SecurityConstant.ACTIVITY_GOODS + "-" + activityId + "-" + goodsId, surpNum - buyNum);
            }
        }finally{
        } finally {
            redissonLock.unlock();
        }
        // 定义购买数量,服务数量,商品数量
@@ -873,9 +970,9 @@
        appSureOrderGoodsVo.setGoodsRealPrice(goodsRealPrice);
        // 获取商品押金
        goodsDeposit = activityGoodsGetVo.getActivitySubscription();
        if (goodsDeposit == null || goodsDeposit.compareTo(BigDecimal.ZERO)==0) {
        if (goodsDeposit == null || goodsDeposit.compareTo(BigDecimal.ZERO) == 0) {
            goodsDeposit = new BigDecimal("0.00");
        }else{
        } else {
            goodsDeposit = goodsDeposit.multiply(buyNumBig);
        }
        appSureOrderGoodsVo.setGoodsDeposit(goodsDeposit);
@@ -900,6 +997,7 @@
        orderGoods.setCycleNumFlag(goods.getCycleNumFlag());
        orderGoods.setServiceNum(serviceNum);
        orderGoods.setGoodsType(goods.getGoodsType());
        orderGoods.setGoodsTag(goods.getGoodsTags());
        orderGoods.setGoodsName(goods.getGoodsName());
        orderGoods.setGoodsIntroduction(goods.getGoodsIntroduction());
        orderGoods.setGoodsPicture(goodsFile.getFileUrl());
@@ -921,9 +1019,9 @@
            goodsTypeSet.add("单品");
        }
        String goodsNurse = goods.getGoodsNurses();
        if(StringUtils.isNotBlank(goodsNurse)){
        if (StringUtils.isNotBlank(goodsNurse)) {
            String[] goodsNurseArr = goodsNurse.split(",");
            for(String str : goodsNurseArr){
            for (String str : goodsNurseArr) {
                goodsNurseSet.add(str);
            }
        }
@@ -967,7 +1065,7 @@
        // 保存订单
        this.save(order);
        // 更新用户商品类型
        if (goodsTypeSet != null || goodsNurseSet!= null) {
        if (goodsTypeSet != null || goodsNurseSet != null) {
            AppMemberGoodsTypeDto appMemberGoodsTypeDto = new AppMemberGoodsTypeDto();
            appMemberGoodsTypeDto.setUserId(userId);
            appMemberGoodsTypeDto.setGoodsTypeSet(goodsTypeSet);
@@ -1035,17 +1133,17 @@
        remoteActivityService.addActivityRecord(activityRecord);
        //生成自动取消订单延时任务
        Integer delayTime = 30;
        if(redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)){
        if (redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)) {
            delayTime = redisService.getCacheObject(SecurityConstant.AUTO_CANCEL_ORDER_TIME);
        }
        redisService.setCacheObject(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + orderId, orderId, delayTime.longValue(), TimeUnit.MINUTES);
        DelayTask delayTask = new DelayTask();
        delayTask.setDelFlag(0);
        delayTask.setCreateTime(new Date());
        delayTask.setEndTime(DateUtils.addMinutes(new Date(),delayTime));
        delayTask.setEndTime(DateUtils.addMinutes(new Date(), delayTime));
        delayTask.setRedisKey(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + orderId);
        remoteConfigService.addDelayTask(delayTask);
        appPlaceOrderVo.setEndTime(DateUtils.addMinutes(order.getCreateTime(),delayTime));
        appPlaceOrderVo.setEndTime(DateUtils.addMinutes(order.getCreateTime(), delayTime));
        return appPlaceOrderVo;
    }
@@ -1074,7 +1172,7 @@
                shopMap.put(shopIdLong, shopTemp);
            });
            Integer delayTime = 30;
            if(redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)){
            if (redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)) {
                delayTime = redisService.getCacheObject(SecurityConstant.AUTO_CANCEL_ORDER_TIME);
            }
            for (AppUserOrderPageVo appUserOrderPageVo : appUserOrderPageVoList) {
@@ -1087,7 +1185,7 @@
                    appUserOrderPageVo.setSameShop(0);
                }
                appUserOrderPageVo.setVerifyCode("1-" + appUserOrderPageVo.getOrderId());
                appUserOrderPageVo.setEndTime(DateUtils.addMinutes(appUserOrderPageVo.getCreateTime(),delayTime));
                appUserOrderPageVo.setEndTime(DateUtils.addMinutes(appUserOrderPageVo.getCreateTime(), delayTime));
            }
        }
        return appUserOrderPageVoList;
@@ -1128,10 +1226,10 @@
        appUserOrderGetVo.setVerifyCode("1-" + orderId);
        //生成自动取消订单延时任务
        Integer delayTime = 30;
        if(redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)){
        if (redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)) {
            delayTime = redisService.getCacheObject(SecurityConstant.AUTO_CANCEL_ORDER_TIME);
        }
        appUserOrderGetVo.setEndTime(DateUtils.addMinutes(order.getCreateTime(),delayTime));
        appUserOrderGetVo.setEndTime(DateUtils.addMinutes(order.getCreateTime(), delayTime));
        return appUserOrderGetVo;
    }
@@ -1143,13 +1241,15 @@
    @Override
    public void cancelOrder(String orderId) {
        Order order = this.getById(orderId);
        // 订单状态-1.删除 0.已取消 1.待支付 2.待核销 3.已完成
        if (order.getOrderStatus() == 0) {
            throw new ServiceException(AppErrorConstant.CANCEL_CANCEL_ORDER);
        }else if (order.getOrderStatus() == 1) {
        } else if (order.getOrderStatus() == 1) {
            this.autoCancelOrder(orderId);
        }else if(order.getOrderStatus() == 2){
        } else if (order.getOrderStatus() == 2) {
            // 2.待核销 -> 订单退款
            this.refundOrder(orderId);
        }else{
        } else {
            throw new ServiceException(AppErrorConstant.CANCEL_ERROR_ORDER);
        }
    }
@@ -1224,6 +1324,18 @@
        merVerifyOrderVo.setPayTime(order.getPayTime());
        merVerifyOrderVo.setUseTime(order.getUseTime());
        merVerifyOrderVo.setAppUserOrderGoodsPageVoList(appUserOrderGoodsPageVoList);
        merVerifyOrderVo.setPayType(order.getPayType());
        merVerifyOrderVo.setRealReceiveMoney(order.getChangeReceivableMoney());
        if(order.getPayType()==1){
            merVerifyOrderVo.setReceiveMoney(order.getPayMoney());
        }else{
            if(order.getOfflinePayMoney()!=null){
                merVerifyOrderVo.setReceiveMoney(order.getOfflinePayMoney());
            }else{
                merVerifyOrderVo.setReceiveMoney(BigDecimal.ZERO);
            }
        }
        merVerifyOrderVo.setUnReceiveMoney(merVerifyOrderVo.getRealReceiveMoney().subtract(order.getReceivableMoney()));
        // 根据订单用户ID获取用户信息
        Member member = remoteMemberService.getMember(order.getUserId()).getData();
        merVerifyOrderVo.setUserId(order.getUserId());
@@ -1254,7 +1366,7 @@
        }
        ShopRelUserVo shopRelUserVo = remoteShopService.getShopByUserId(merVerifyOrderDto.getUserId()).getData();
        if(!shopRelUserVo.getShopId().equals(order.getShopId())){
        if (!shopRelUserVo.getShopId().equals(order.getShopId())) {
            throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR);
        }
        order.setOrderStatus(3);
@@ -1264,9 +1376,9 @@
        order.setOffPayTime(nowTime);
        order.setPayMoney(order.getPayMoney().add(relPayMoney));
        order.setChangeReceivableMoney(relReceiveMoney);
        if(order.getPayMoney().compareTo(order.getChangeReceivableMoney())>=0){
        if (order.getPayMoney().compareTo(order.getChangeReceivableMoney()) >= 0) {
            order.setCloseFlag(1);
        }else{
        } else {
            order.setCloseFlag(0);
        }
        this.saveOrUpdate(order);
@@ -1286,7 +1398,7 @@
        List<ConsumerGoods> consumerGoodsList = new ArrayList<>();
        for (AppUserOrderGoodsPageVo appUserOrderGoodsPageVo : appUserOrderGoodsPageVoList) {
            Integer buyNum = appUserOrderGoodsPageVo.getBuyNum();
            if(appUserOrderGoodsPageVo.getCycleNumFlag()==0){
            if (appUserOrderGoodsPageVo.getCycleNumFlag() == 0) {
                consumerGoods = new ConsumerGoods();
                goods = goodsMap.get(appUserOrderGoodsPageVo.getGoodsId());
                consumerGoodsId = IdUtils.simpleUUID();
@@ -1303,6 +1415,7 @@
                consumerGoods.setServiceNum(appUserOrderGoodsPageVo.getServiceNum());
                consumerGoods.setUsedNum(0);
                consumerGoods.setGoodsType(appUserOrderGoodsPageVo.getGoodsType());
                consumerGoods.setGoodsTag(appUserOrderGoodsPageVo.getGoodsTag());
                consumerGoods.setCreateTime(nowTime);
                consumerGoods.setGoodsIntroduction(goods.getGoodsIntroduction());
                consumerGoods.setGoodsPicture(appUserOrderGoodsPageVo.getGoodsPicture());
@@ -1310,8 +1423,8 @@
                consumerGoods.setSourceFrom(1);
                consumerGoods.setSureNum(buyNum);
                consumerGoodsList.add(consumerGoods);
            }else{
                for(int i=0;i<buyNum;i++){
            } else {
                for (int i = 0; i < buyNum; i++) {
                    consumerGoods = new ConsumerGoods();
                    goods = goodsMap.get(appUserOrderGoodsPageVo.getGoodsId());
                    consumerGoodsId = IdUtils.simpleUUID();
@@ -1328,6 +1441,7 @@
                    consumerGoods.setServiceNum(appUserOrderGoodsPageVo.getServiceNum());
                    consumerGoods.setUsedNum(0);
                    consumerGoods.setGoodsType(appUserOrderGoodsPageVo.getGoodsType());
                    consumerGoods.setGoodsTag(appUserOrderGoodsPageVo.getGoodsTag());
                    consumerGoods.setCreateTime(nowTime);
                    consumerGoods.setGoodsIntroduction(goods.getGoodsIntroduction());
                    consumerGoods.setGoodsPicture(appUserOrderGoodsPageVo.getGoodsPicture());
@@ -1354,15 +1468,26 @@
        merVerifyOrderVo.setCreateTime(order.getCreateTime());
        merVerifyOrderVo.setPayTime(order.getPayTime());
        merVerifyOrderVo.setUseTime(order.getUseTime());
        merVerifyOrderVo.setPayType(order.getPayType());
        merVerifyOrderVo.setRealReceiveMoney(order.getChangeReceivableMoney());
        if(order.getPayType()==1){
            merVerifyOrderVo.setReceiveMoney(order.getPayMoney());
        }else{
            if(order.getOfflinePayMoney()!=null){
                merVerifyOrderVo.setReceiveMoney(order.getOfflinePayMoney());
            }else{
                merVerifyOrderVo.setReceiveMoney(BigDecimal.ZERO);
            }
        }
        merVerifyOrderVo.setUnReceiveMoney(merVerifyOrderVo.getRealReceiveMoney().subtract(order.getReceivableMoney()));
        Member member = remoteMemberService.getMember(order.getUserId()).getData();
        merVerifyOrderVo.setUserId(order.getUserId());
        merVerifyOrderVo.setUserName(member.getRealName());
        merVerifyOrderVo.setUserMobile(member.getMobile());
        merVerifyOrderVo.setCloseFlag(order.getCloseFlag());
        //
        if(order.getOrderFrom()==2){
            //profitsSharingService.applyProfitSharing();
        if (order.getOrderFrom() == 2) {
            // profitsSharingService.applyProfitSharing();
        }
        //创建支付记录
@@ -1371,10 +1496,89 @@
        payRecord.setOrderId(order.getOrderId());
        payRecord.setPayMoney(merVerifyOrderDto.getRelPayMoney());
        payRecord.setPayTime(new Date());
        payRecord.setPayType(2);
        payRecord.setPayType(merVerifyOrderDto.getPayType());
        payRecordService.save(payRecord);
        return merVerifyOrderVo;
        submitProfitSharing(orderId, order.getOrderNo(), order.getShopId(), order.getOrderMoney());
        return merVerifyOrderVo;
    }
    private void submitProfitSharing(String orderId, String orderNo, Long shopId, BigDecimal orderMoney) {
        String sendMessage = "";
        String resultMessage = "";
        try {
            // 核销完成 开始分账(平台收取服务费)
            OrderPayment payment = orderPaymentService.getByOrderId(orderId);
            String transactionId = payment.getTransactionId();
            // 平台特约商户号,用户平台收取服务费
            String platformTyMacId = WxPayConfiguration.getPlatformTyMacId();
            R<String> resultMch = remoteShopService.getShopSubMchId(shopId);
            String subMchId = resultMch.getData();
            if (!StringUtils.isEmpty(subMchId)) {
                R<ShopProportionVo> resultShopProportion = remoteShopService.getShopProportion(shopId);
                ShopProportionVo shopProportion = resultShopProportion.getData();
                if (null != shopProportion) {
                    ProfitSharingRequest request = new ProfitSharingRequest();
                    request.setSubMchid(subMchId);
                    request.setTransactionId(transactionId);
                    request.setOutOrderNo(orderNo);
                    List<Receiver> receiverList = new ArrayList<>();
                    String description = "订单:" + orderNo + " 平台抽取佣金";
                    BigDecimal proportionPercent = shopProportion.getProportionPercent();
                    if (null == proportionPercent) {
                        proportionPercent = BigDecimal.ZERO;
                    }
                    ProfitSharingResult result = new ProfitSharingResult();
                    result.setOutOrderNo(orderNo);
                    result.setStatus("FINISHED");
                    // 计算分成金额
                    int amount = orderMoney.multiply(proportionPercent).setScale(0, RoundingMode.UP).intValue();
                    log.info("订单分账:{} 分账金额: {}", orderNo, amount);
                    if (amount > 0) {
                        // 分账创建
                        Receiver receiver = new Receiver();
                        receiver.setType("MERCHANT_ID");
                        receiver.setReceiverAccount(platformTyMacId);
                        receiver.setAmount(amount);
                        receiver.setDescription(description);
                        receiverList.add(receiver);
                        request.setReceivers(receiverList);
                        // 分账完成
                        request.setFinish(true);
                        result = wxService.getEcommerceService().profitSharing(request);
                    }
                    // 创建分账记录
                    profitSharingService.saveProfitSharing(shopId, orderId, orderMoney, result);
                    // 保存请求信息
                    sendMessage = JSONObject.toJSONString(request);
                    resultMessage = JSONObject.toJSONString(result);
                } else {
                    resultMessage = String.format("订单分账:%s 获取商户分成失败", orderNo);
                    log.info(resultMessage);
                }
            } else {
                resultMessage = String.format("订单分账:%s 获取微信商户号失败", orderNo);
                log.info(resultMessage);
            }
        } catch (WxPayException e) {
            resultMessage = String.format("订单分账:%s 分账失败:%s", orderNo, e.getMessage());
            log.info(resultMessage);
            e.printStackTrace();
        }
        // 保存分账信息
        paymentMessageService.savePaymentMessage("4", orderId, sendMessage, resultMessage);
    }
    /**
@@ -1389,7 +1593,7 @@
    public MerVerifyCouponVo sureVerifyCoupon(MerVerifyCouponDto merVerifyCouponDto) {
        MerVerifyCouponGetVo verifyCouponGetVo = remoteCouponService.getVerifyCoupon(merVerifyCouponDto.getMemberCouponId()).getData();
        ShopRelUserVo shopRelUserVo = remoteShopService.getShopByUserId(merVerifyCouponDto.getUserId()).getData();
        if(!shopRelUserVo.getShopId().equals(verifyCouponGetVo.getMemberCoupon().getShopId())){
        if (!shopRelUserVo.getShopId().equals(verifyCouponGetVo.getMemberCoupon().getShopId())) {
            throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR);
        }
        // 创建MerVerifyCouponVo对象
@@ -1452,11 +1656,12 @@
            appShopGoodsGetDto.setShopId(memberCoupon.getShopId());
            //获取商户服务次数
            shopGoods = remoteGoodsService.getShopGoods(appShopGoodsGetDto).getData();
            if(shopGoods!=null){
            if (shopGoods != null) {
                consumerGoods.setServiceNum(shopGoods.getServiceNum());
            }
            consumerGoods.setUsedNum(0);
            consumerGoods.setGoodsType(goods.getGoodsType());
            consumerGoods.setGoodsTag(goods.getGoodsTags());
            consumerGoods.setCreateTime(new Date());
            consumerGoods.setGoodsIntroduction(goods.getGoodsIntroduction());
            goodsFile = remoteGoodsService.getGoodsFile(goods.getGoodsId()).getData();
@@ -1472,36 +1677,36 @@
    /**
     * @description  确认核销奖品
     * @author  jqs
     * @date    2023/7/9 9:54
     * @param merVerifyPrizeDto
     * @return  MerVerifyAwardVo
     * @return MerVerifyAwardVo
     * @description 确认核销奖品
     * @author jqs
     * @date 2023/7/9 9:54
     */
    @Override
    @Transactional
    public MerVerifyAwardVo sureVerifyPrize(MerVerifyPrizeDto merVerifyPrizeDto){
    public MerVerifyAwardVo sureVerifyPrize(MerVerifyPrizeDto merVerifyPrizeDto) {
        MerVerifyAwardVo merVerifyAwardVo = new MerVerifyAwardVo();
        MemberGiftRecord memberGiftRecord = remoteMemberService.getVerifyPrize(merVerifyPrizeDto.getPrizeId()).getData();
        if(memberGiftRecord==null||memberGiftRecord.getVerifyStatus()!=1){
        if (memberGiftRecord == null || memberGiftRecord.getVerifyStatus() != 1) {
            throw new ServiceException(AppErrorConstant.COUPON_USED);
        }
        ShopRelUserVo shopRelUserVo = remoteShopService.getShopByUserId(merVerifyPrizeDto.getUserId()).getData();
        if(!shopRelUserVo.getShopId().equals(memberGiftRecord.getShopId())){
        if (!shopRelUserVo.getShopId().equals(memberGiftRecord.getShopId())) {
            throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR);
        }
        Member member = remoteMemberService.getMember(memberGiftRecord.getUserId()).getData();
        merVerifyAwardVo.setUserName(member.getRealName());
        merVerifyAwardVo.setUserMobile(member.getMobile());
        if(memberGiftRecord.getGiftFrom()==1){
        if (memberGiftRecord.getGiftFrom() == 1) {
            merVerifyAwardVo.setGiftFrom("平台生日卡");
        }else{
        } else {
            merVerifyAwardVo.setGiftFrom("商户生日卡");
        }
        merVerifyAwardVo.setGiftType(memberGiftRecord.getGiftType());
        List<BirthdayGiftSendDto> giftSendDtoList = new ArrayList<>();
        BirthdayGiftSendDto birthdayGiftSendDto = new BirthdayGiftSendDto();
        switch(memberGiftRecord.getGiftType()){
        switch (memberGiftRecord.getGiftType()) {
            case 1:
                merVerifyAwardVo.setGiftName(memberGiftRecord.getCouponName());
                merVerifyAwardVo.setGiftNumber(Double.valueOf(memberGiftRecord.getCouponNumber()));
@@ -1550,7 +1755,7 @@
        merVerifyAwardVo.setCreateTime(memberGiftRecord.getCreateTime());
        memberGiftRecord.setVerifyStatus(2);
        memberGiftRecord.setVerifyTime(new Date());
        if(member.getBindingFlag()!=1){
        if (member.getBindingFlag() != 1) {
            AppMemberBindingDto appMemberBindingDto = new AppMemberBindingDto();
            appMemberBindingDto.setBindingFlag(1);
            appMemberBindingDto.setShopId(merVerifyPrizeDto.getShopId());
@@ -1575,7 +1780,7 @@
    @Override
    public List<MerMemberNoClearOrderVo> pageMerMemberNoClearOrder(Page page, MerMemberNoClearOrderDto merMemberNoClearOrderDto) {
        List<MerMemberNoClearOrderVo> merMemberNoClearOrderVoList = orderMapper.pageMerMemberNoClearOrder(page, merMemberNoClearOrderDto.getMemberUserId());
        if (merMemberNoClearOrderVoList != null && !merMemberNoClearOrderVoList.isEmpty()) {
        /*if (merMemberNoClearOrderVoList != null && !merMemberNoClearOrderVoList.isEmpty()) {
            BigDecimal zeroBig = new BigDecimal("0.00");
            for (MerMemberNoClearOrderVo merMemberNoClearOrderVo : merMemberNoClearOrderVoList) {
                merMemberNoClearOrderVo.setUnPaidMoney(merMemberNoClearOrderVo.getReceivableMoney().subtract(merMemberNoClearOrderVo.getPayMoney()));
@@ -1583,7 +1788,7 @@
                    merMemberNoClearOrderVo.setUnPaidMoney(zeroBig);
                }
            }
        }
        }*/
        return merMemberNoClearOrderVoList;
    }
@@ -1598,9 +1803,9 @@
        order.setOfflinePayMoney(order.getOfflinePayMoney().add(merCloseOrderDto.getPayMoney()));
        order.setOffPayTime(new Date());
        order.setPayMoney(order.getPayMoney().add(merCloseOrderDto.getPayMoney()));
        if(order.getPayMoney().compareTo(order.getChangeReceivableMoney())>=0){
        if (order.getPayMoney().compareTo(order.getChangeReceivableMoney()) >= 0) {
            order.setCloseFlag(0);
        }else{
        } else {
            order.setCloseFlag(1);
        }
        this.saveOrUpdate(order);
@@ -1610,7 +1815,7 @@
        payRecord.setOrderId(order.getOrderId());
        payRecord.setPayMoney(merCloseOrderDto.getPayMoney());
        payRecord.setPayTime(new Date());
        payRecord.setPayType(2);
        payRecord.setPayType(merCloseOrderDto.getPayType());
        payRecordService.save(payRecord);
    }
@@ -1731,7 +1936,7 @@
                        }
                    } else if (couponType == 2 && appMemberCouponVo.getDiscountPercent() != null) {
                        discountPercent = appMemberCouponVo.getDiscountPercent();
                        goodsRealPrice = goodsTotalPrice.multiply(discountPercent).divide(BigDecimal.TEN,2, BigDecimal.ROUND_HALF_UP);
                        goodsRealPrice = goodsTotalPrice.multiply(discountPercent).divide(BigDecimal.TEN, 2, BigDecimal.ROUND_HALF_UP);
                        discountMoney = goodsRealPrice.subtract(goodsTotalPrice);
                    } else if (couponType == 3 && appMemberCouponVo.getDiscountMoney() != null) {
                        discountMoney = appMemberCouponVo.getDiscountMoney();
@@ -1741,9 +1946,9 @@
            }
            goodsDeposit = goods.getSubscription();
            if (goodsDeposit == null || goodsDeposit.compareTo(BigDecimal.ZERO)==0) {
            if (goodsDeposit == null || goodsDeposit.compareTo(BigDecimal.ZERO) == 0) {
                goodsDeposit = new BigDecimal("0.00");
            }else{
            } else {
                goodsDeposit = goodsDeposit.multiply(buyNumBig);
            }
            goodsNum = goodsNum + buyNum;
@@ -1768,6 +1973,7 @@
            orderGoods.setCycleNumFlag(goods.getCycleNumFlag());
            orderGoods.setServiceNum(serviceNum);
            orderGoods.setGoodsType(goods.getGoodsType());
            orderGoods.setGoodsTag(goods.getGoodsTags());
            orderGoods.setGoodsName(goods.getGoodsName());
            orderGoods.setGoodsIntroduction(goods.getGoodsIntroduction());
            orderGoods.setGoodsPicture(goodsFile.getFileUrl());
@@ -1815,7 +2021,6 @@
        order.setOrderRemark(merNewOrderDto.getOrderRemark());
        order.setGoodsNum(goodsNum);
        order.setCreateTime(nowTime);
        order.setPayTime(nowTime);
        order.setUseTime(nowTime);
        order.setUseUserId(merNewOrderDto.getUserId());
        order.setPayMoney(merNewOrderDto.getPayMoney());
@@ -1823,9 +2028,9 @@
        order.setOfflinePayMoney(merNewOrderDto.getPayMoney());
        order.setOffPayTime(nowTime);
        order.setPayType(1);
        if(order.getPayMoney().compareTo(order.getChangeReceivableMoney())>=0){
        if (order.getPayMoney().compareTo(order.getChangeReceivableMoney()) >= 0) {
            order.setCloseFlag(0);
        }else{
        } else {
            order.setCloseFlag(1);
        }
        this.save(order);
@@ -1836,7 +2041,7 @@
        List<ConsumerGoods> consumerGoodsList = new ArrayList<>();
        for (AppUserOrderGoodsPageVo appUserOrderGoodsPageVo : appUserOrderGoodsPageVoList) {
            Integer buyGoodsNum = appUserOrderGoodsPageVo.getBuyNum();
            if(appUserOrderGoodsPageVo.getCycleNumFlag()==0){
            if (appUserOrderGoodsPageVo.getCycleNumFlag() == 0) {
                consumerGoods = new ConsumerGoods();
                goods = remoteGoodsService.getGoods(appUserOrderGoodsPageVo.getGoodsId()).getData();
                consumerGoodsId = IdUtils.simpleUUID();
@@ -1853,6 +2058,7 @@
                consumerGoods.setServiceNum(appUserOrderGoodsPageVo.getServiceNum());
                consumerGoods.setUsedNum(0);
                consumerGoods.setGoodsType(appUserOrderGoodsPageVo.getGoodsType());
                consumerGoods.setGoodsTag(appUserOrderGoodsPageVo.getGoodsTag());
                consumerGoods.setCreateTime(nowTime);
                consumerGoods.setGoodsIntroduction(goods.getGoodsIntroduction());
                consumerGoods.setGoodsPicture(appUserOrderGoodsPageVo.getGoodsPicture());
@@ -1860,8 +2066,8 @@
                consumerGoods.setSourceFrom(1);
                consumerGoods.setSureNum(buyGoodsNum);
                consumerGoodsList.add(consumerGoods);
            }else{
                for(int i=0;i<buyGoodsNum;i++) {
            } else {
                for (int i = 0; i < buyGoodsNum; i++) {
                    consumerGoods = new ConsumerGoods();
                    goods = remoteGoodsService.getGoods(appUserOrderGoodsPageVo.getGoodsId()).getData();
                    consumerGoodsId = IdUtils.simpleUUID();
@@ -1878,6 +2084,7 @@
                    consumerGoods.setServiceNum(appUserOrderGoodsPageVo.getServiceNum());
                    consumerGoods.setUsedNum(0);
                    consumerGoods.setGoodsType(appUserOrderGoodsPageVo.getGoodsType());
                    consumerGoods.setGoodsTag(appUserOrderGoodsPageVo.getGoodsTag());
                    consumerGoods.setCreateTime(nowTime);
                    consumerGoods.setGoodsIntroduction(goods.getGoodsIntroduction());
                    consumerGoods.setGoodsPicture(appUserOrderGoodsPageVo.getGoodsPicture());
@@ -1923,11 +2130,11 @@
     */
    @Override
    public List<MerOrderPageVo> pageMerOrder(Page page, MerOrderPageDto merOrderPageDto) {
        if(StringUtils.isNotBlank(merOrderPageDto.getKeyword())){
        if (StringUtils.isNotBlank(merOrderPageDto.getKeyword())) {
            MgtUserIdByKeywordDto userIdByKeywordDto = new MgtUserIdByKeywordDto();
            userIdByKeywordDto.setKeyword(merOrderPageDto.getKeyword());
            MgtUserIdByKeywordVo userIdByKeywordVo = remoteMemberService.getUserIdByKeyword(userIdByKeywordDto).getData();
            if(StringUtils.isNotBlank(userIdByKeywordVo.getUserIds())){
            if (StringUtils.isNotBlank(userIdByKeywordVo.getUserIds())) {
                List<Long> userIdList = Arrays.stream(userIdByKeywordVo.getUserIds().split(","))
                        .map(Long::parseLong)
                        .collect(Collectors.toList());
@@ -1950,6 +2157,9 @@
                if (orderFrom != null) {
                    if (orderFrom == 1) {
                        orderFromDesc = "商城订单";
                    } else if(orderFrom == 2){
                        orderFromDesc = "店铺砍价活动("+merOrderPageVo.getActivityName()+")";
                    } else {
                        orderFromDesc = "线下创建";
                    }
@@ -1968,12 +2178,12 @@
            Map<Long, MgtSimpleMemberVo> userMap = simpleMemberVoList.stream()
                    .collect(Collectors.toMap(MgtSimpleMemberVo::getUserId, Function.identity()));
            for (MerOrderPageVo merOrderPageVo : merOrderPageVoList) {
                if(merOrderPageVo.getUserId()!=null&&userMap.get(merOrderPageVo.getUserId())!=null){
                if (merOrderPageVo.getUserId() != null && userMap.get(merOrderPageVo.getUserId()) != null) {
                    merOrderPageVo.setUserName(userMap.get(merOrderPageVo.getUserId()).getRealName());
                    merOrderPageVo.setNickName(userMap.get(merOrderPageVo.getUserId()).getNickName());
                    merOrderPageVo.setUserMobile(userMap.get(merOrderPageVo.getUserId()).getUserMobile());
                }else{
                    log.debug("订单merOrderPageVo"+merOrderPageVo.getOrderId()+"缺少用户");
                } else {
                    log.debug("订单merOrderPageVo" + merOrderPageVo.getOrderId() + "缺少用户");
                }
            }
        }
@@ -2157,7 +2367,7 @@
            }
        }
        MgtOrderTotal mgtOrderTotal = new MgtOrderTotal();
        MgtOrderTotal mgtOrderTotalFirst = orderMapper.totalOrderFirst();
        MgtOrderTotal mgtOrderTotalFirst = orderMapper.totalOrderFirst(mgtShopOrderPageDto);
        MgtOrderTotal mgtOrderTotalSecond = orderMapper.totalOrderSecond(mgtShopOrderPageDto);
        MgtOrderTotal mgtOrderTotalThird = orderMapper.totalOrderThird(mgtShopOrderPageDto);
        mgtOrderTotal.setOrderTotal(mgtOrderTotalFirst.getOrderTotal());
@@ -2340,9 +2550,9 @@
        mgtOrderDetailVo.setCancelTime(order.getCancelTime());
        mgtOrderDetailVo.setOrderRemark(order.getOrderRemark());
        mgtOrderDetailVo.setShopId(order.getShopId());
        if(shop!=null){
        if (shop != null) {
            mgtOrderDetailVo.setShopName(shop.getShopName());
        }else{
        } else {
            mgtOrderDetailVo.setShopName("商户已被删除");
        }
        mgtOrderDetailVo.setVerifyTime(order.getUseTime());
@@ -2362,6 +2572,8 @@
    @Override
    public MgtBulletinBoardVo boardOrderTotal() {
        MgtBulletinBoardVo mgtBulletinBoardVo = orderMapper.boardOrderTotal();
        Integer activityUserTotal = orderMapper.activityUserTotal();
        mgtBulletinBoardVo.setActivityUserTotal(activityUserTotal);
        return mgtBulletinBoardVo;
    }
@@ -2932,11 +3144,11 @@
        } else if (couponStatus != 1) {
            throw new ServiceException(AppErrorConstant.COUPON_NO_FIND);
        }
        if (memberCoupon.getCouponFrom()==2&&!memberCoupon.getShopId().equals(shopId)) {
        if (memberCoupon.getCouponFrom() == 2 && !memberCoupon.getShopId().equals(shopId)) {
            throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR);
        }
        //如果是平台优惠券
        if(memberCoupon.getCouponFrom()==1&&memberCoupon.getShopId()==null){
        if (memberCoupon.getCouponFrom() == 1 && memberCoupon.getShopId() == null) {
            memberCoupon.setShopId(shopId);
        }
        List<Goods> goodsList = verifyCouponGetVo.getGoodsList();
@@ -2974,34 +3186,34 @@
    }
    /**
     * @description  获取核销奖品
     * @author  jqs
     * @date    2023/7/8 17:46
     * @param verifyCode
     * @param shopId
     * @return  MerVerifyAwardVo
     * @return MerVerifyAwardVo
     * @description 获取核销奖品
     * @author jqs
     * @date 2023/7/8 17:46
     */
    @Override
    public MerVerifyAwardVo verifyPrize(String verifyCode,Long shopId){
    public MerVerifyAwardVo verifyPrize(String verifyCode, Long shopId) {
        MerVerifyAwardVo merVerifyAwardVo = new MerVerifyAwardVo();
        MemberGiftRecord memberGiftRecord = remoteMemberService.getVerifyPrize(verifyCode).getData();
        if(memberGiftRecord==null||memberGiftRecord.getVerifyStatus()!=1){
        if (memberGiftRecord == null || memberGiftRecord.getVerifyStatus() != 1) {
            throw new ServiceException(AppErrorConstant.COUPON_USED);
        }
        if(memberGiftRecord.getGiftFrom()==2&&!memberGiftRecord.getShopId().equals(shopId)){
        if (memberGiftRecord.getGiftFrom() == 2 && !memberGiftRecord.getShopId().equals(shopId)) {
            throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR);
        }
        Member member = remoteMemberService.getMember(memberGiftRecord.getUserId()).getData();
        merVerifyAwardVo.setUserName(member.getRealName());
        merVerifyAwardVo.setUserMobile(member.getMobile());
        if(memberGiftRecord.getGiftFrom()==1){
        if (memberGiftRecord.getGiftFrom() == 1) {
            merVerifyAwardVo.setGiftFrom("平台生日卡");
        }else{
        } else {
            merVerifyAwardVo.setGiftFrom("商户生日卡");
        }
        merVerifyAwardVo.setGiftType(memberGiftRecord.getGiftType());
        switch(memberGiftRecord.getGiftType()){
        switch (memberGiftRecord.getGiftType()) {
            case 1:
                merVerifyAwardVo.setGiftName(memberGiftRecord.getCouponName());
                merVerifyAwardVo.setGiftNumber(Double.valueOf(memberGiftRecord.getCouponNumber()));
@@ -3141,22 +3353,22 @@
                    orderMoneyValue[i] = BigDecimal.ZERO;
                }
            }*/
            List<MgtMapTotalPlusVo> mgtMapTotalPlusVoList =  orderMapper.listMerOrderDistributionTotal(merTotalDto);
            if(mgtMapTotalPlusVoList!=null&&!mgtMapTotalPlusVoList.isEmpty()) {
                String[] orderTotalKey = new String[mgtMapTotalPlusVoList.size()];
                Integer[] orderTotalValue = new Integer[mgtMapTotalPlusVoList.size()];
                BigDecimal[] orderMoneyValue = new BigDecimal[mgtMapTotalPlusVoList.size()];
                MgtMapTotalPlusVo mgtMapTotalPlusVo;
                for (int i = 0; i < mgtMapTotalPlusVoList.size(); i++) {
                    mgtMapTotalPlusVo = mgtMapTotalPlusVoList.get(i);
                    orderTotalKey[i] = mgtMapTotalPlusVo.getMapKey();
                    orderTotalValue[i] = mgtMapTotalPlusVo.getMapValueFirst();
                    orderMoneyValue[i] = mgtMapTotalPlusVo.getMapValueSecond();
                }
                orderDistributionTotalVo.setOrderTotalKey(orderTotalKey);
                orderDistributionTotalVo.setOrderTotalValue(orderTotalValue);
                orderDistributionTotalVo.setOrderMoneyValue(orderMoneyValue);
        List<MgtMapTotalPlusVo> mgtMapTotalPlusVoList = orderMapper.listMerOrderDistributionTotal(merTotalDto);
        if (mgtMapTotalPlusVoList != null && !mgtMapTotalPlusVoList.isEmpty()) {
            String[] orderTotalKey = new String[mgtMapTotalPlusVoList.size()];
            Integer[] orderTotalValue = new Integer[mgtMapTotalPlusVoList.size()];
            BigDecimal[] orderMoneyValue = new BigDecimal[mgtMapTotalPlusVoList.size()];
            MgtMapTotalPlusVo mgtMapTotalPlusVo;
            for (int i = 0; i < mgtMapTotalPlusVoList.size(); i++) {
                mgtMapTotalPlusVo = mgtMapTotalPlusVoList.get(i);
                orderTotalKey[i] = mgtMapTotalPlusVo.getMapKey();
                orderTotalValue[i] = mgtMapTotalPlusVo.getMapValueFirst();
                orderMoneyValue[i] = mgtMapTotalPlusVo.getMapValueSecond();
            }
            orderDistributionTotalVo.setOrderTotalKey(orderTotalKey);
            orderDistributionTotalVo.setOrderTotalValue(orderTotalValue);
            orderDistributionTotalVo.setOrderMoneyValue(orderMoneyValue);
        }
        // 返回订单分布总数对象
        return orderDistributionTotalVo;
    }
@@ -3261,15 +3473,27 @@
    }
    /**
     * @description  商户端订单管理统计
     * @author  jqs
     * @date    2023/7/31 10:53
     * @param merOrderPageDto
     * @return  MerTotalOrderVo
     * @return MerTotalOrderVo
     * @description 商户端订单管理统计
     * @author jqs
     * @date 2023/7/31 10:53
     */
    @Override
    public MerTotalOrderVo totalMerOrder(MerOrderPageDto merOrderPageDto) {
        MerTotalOrderVo merTotalOrderVo = new MerTotalOrderVo();
        if (StringUtils.isNotBlank(merOrderPageDto.getKeyword())) {
            MgtUserIdByKeywordDto userIdByKeywordDto = new MgtUserIdByKeywordDto();
            userIdByKeywordDto.setKeyword(merOrderPageDto.getKeyword());
            MgtUserIdByKeywordVo userIdByKeywordVo = remoteMemberService.getUserIdByKeyword(userIdByKeywordDto).getData();
            if (StringUtils.isNotBlank(userIdByKeywordVo.getUserIds())) {
                List<Long> userIdList = Arrays.stream(userIdByKeywordVo.getUserIds().split(","))
                        .map(Long::parseLong)
                        .collect(Collectors.toList());
                merOrderPageDto.setMemberUserIdList(userIdList);
                merOrderPageDto.setMemberUserId(null);
            }
        }
        merTotalOrderVo = orderMapper.totalMerOrder(merOrderPageDto);
        return merTotalOrderVo;
    }
@@ -3333,33 +3557,33 @@
    }
    /**
     * @description 自动取消订单
     * @author  jqs
     * @date    2023/7/13 17:15
     * @param orderId
     * @return  void
     * @return void
     * @description 自动取消订单
     * @author jqs
     * @date 2023/7/13 17:15
     */
    @Override
    @Transactional
    public void autoCancelOrder(String orderId){
    public void autoCancelOrder(String orderId) {
        //更新订单信息
        Order order = this.getById(orderId);
        order.setOrderStatus(0);
        order.setCancelTime(new Date());
        this.saveOrUpdate(order);
        //活动订单回退库存
        if(order.getOrderFrom()==2){
        if (order.getOrderFrom() == 2) {
            List<OrderGoods> orderGoodsList = orderGoodsService.listByOrderId(orderId);
            if(orderGoodsList!=null&&!orderGoodsList.isEmpty()){
                for(OrderGoods orderGoods : orderGoodsList){
            if (orderGoodsList != null && !orderGoodsList.isEmpty()) {
                for (OrderGoods orderGoods : orderGoodsList) {
                    //redis库存控制极简版
                    String goodsLock = "goods_lock_"+order.getActivityId()+"_"+orderGoods.getGoodsId();
                    String goodsLock = "goods_lock_" + order.getActivityId() + "_" + orderGoods.getGoodsId();
                    RLock redissonLock = redissonClient.getLock(goodsLock);
                    try{
                    try {
                        redissonLock.lock(30, TimeUnit.SECONDS);
                        Integer surpNum = redisService.getCacheObject(SecurityConstant.ACTIVITY_GOODS+"-"+order.getActivityId()+"-"+orderGoods.getGoodsId());
                        redisService.setCacheObject(SecurityConstant.ACTIVITY_GOODS+"-"+order.getActivityId()+"-"+orderGoods.getGoodsId(),surpNum+orderGoods.getBuyNum());
                    }finally{
                        Integer surpNum = redisService.getCacheObject(SecurityConstant.ACTIVITY_GOODS + "-" + order.getActivityId() + "-" + orderGoods.getGoodsId());
                        redisService.setCacheObject(SecurityConstant.ACTIVITY_GOODS + "-" + order.getActivityId() + "-" + orderGoods.getGoodsId(), surpNum + orderGoods.getBuyNum());
                    } finally {
                        redissonLock.unlock();
                    }
                    //改变活动库存
@@ -3380,16 +3604,16 @@
                    remoteActivityService.delActivityRecord(activityRecord);
                }
            }
        }else{
            if(order.getCouponMoney().compareTo(BigDecimal.ZERO)>0){
        } else {
            if (order.getCouponMoney().compareTo(BigDecimal.ZERO) > 0) {
                //回退优惠券
                List<OrderGoods> orderGoodsList = orderGoodsService.listByOrderId(orderId);
                if(orderGoodsList!=null&&!orderGoodsList.isEmpty()) {
                if (orderGoodsList != null && !orderGoodsList.isEmpty()) {
                    StringJoiner memberCouponSJ = new StringJoiner(",");
                    for (OrderGoods orderGoods : orderGoodsList) {
                        memberCouponSJ.add(orderGoods.getCouponId());
                    }
                    if(memberCouponSJ!=null){
                    if (memberCouponSJ != null) {
                        remoteCouponService.backMemberCoupon(memberCouponSJ.toString());
                    }
@@ -3399,17 +3623,17 @@
    }
    /**
     * @description  订单支付回调
     * @author  jqs
     * @date    2023/7/13 17:57
     * @param transaction
     * @return  void
     * @return void
     * @description 订单支付回调
     * @author jqs
     * @date 2023/7/13 17:57
     */
    @Override
    @Transactional
    public void payBack(Transaction transaction) {
    public void payBack(PartnerTransactionsResult transaction) {
        // 更新订单状态
        String orderId=transaction.getOutTradeNo();
        String orderId = transaction.getOutTradeNo();
        Order order = this.getById(orderId);
        order.setOrderStatus(2);
        order.setPayTime(new Date());
@@ -3455,8 +3679,8 @@
            goodsTotalChangeDto.setChangeType(1);
            goodsTotalChangeDto.setChangeNum(orderGoods.getBuyNum());
            goodsTotalChangeDto.setMoney(orderGoods.getGoodsReceivableMoney());
            Integer bugGoodsNum = orderMapper.countUserBuyGoodsNum(order.getUserId(),orderGoods.getGoodsId());
            if(bugGoodsNum==null||bugGoodsNum<1){
            Integer bugGoodsNum = orderMapper.countUserBuyGoodsNum(order.getUserId(), orderGoods.getGoodsId());
            if (bugGoodsNum == null || bugGoodsNum < 1) {
                goodsTotalChangeDto.setPersonNum(1);
            }
            goodsTotalChangeDtoList.add(goodsTotalChangeDto);
@@ -3499,6 +3723,9 @@
        if (haveGoods) {
            memberTotalChangeDto.setGoodsOrderChange(1);
        }
        if(order.getOrderFrom()==2){
            memberTotalChangeDto.setActivityTime(order.getCreateTime());
        }
        // 更新会员统计信息
        remoteMemberService.changeMemberTotal(memberTotalChangeDto);
        // 如果订单来源于活动,则更新活动统计信息
@@ -3537,16 +3764,16 @@
    }
    /**
     * @description  订单退款
     * @author  jqs
     * @date    2023/7/13 18:36
     * @param orderId
     * @return  void
     * @return void
     * @description 订单退款
     * @author jqs
     * @date 2023/7/13 18:36
     */
    @Override
    @Transactional
    public void refundOrder(String orderId){
        //更新订单信息
    public void refundOrder(String orderId) {
        // 更新订单信息
        Order order = this.getById(orderId);
        order.setOrderStatus(0);
        order.setCancelTime(new Date());
@@ -3559,7 +3786,7 @@
        orderRefund.setOrderId(order.getOrderId());
        orderRefund.setUserId(order.getUserId());
        orderRefund.setShopId(order.getShopId());
        orderRefund.setRefundMoney(order.getPayMoney());
        orderRefund.setRefundMoney(order.getOnlinePayMoney());
        orderRefund.setOrderMoney(order.getPayMoney());
        orderRefund.setCreateTime(new Date());
        // 初始化各类商品的收款金额
@@ -3573,19 +3800,19 @@
        Boolean haveExperience = false;
        Boolean haveGoods = false;
        List<OrderGoods> orderGoodsList = orderGoodsService.listByOrderId(orderId);
        if(orderGoodsList!=null&&!orderGoodsList.isEmpty()){
        if (orderGoodsList != null && !orderGoodsList.isEmpty()) {
            StringJoiner memberCouponSJ = new StringJoiner(",");
            for(OrderGoods orderGoods : orderGoodsList){
                if(order.getOrderFrom()==2){
            for (OrderGoods orderGoods : orderGoodsList) {
                if (order.getOrderFrom() == 2) {
                    //redis库存控制极简版
                    //活动订单回退库存
                    String goodsLock = "goods_lock_"+order.getActivityId()+"_"+orderGoods.getGoodsId();
                    String goodsLock = "goods_lock_" + order.getActivityId() + "_" + orderGoods.getGoodsId();
                    RLock redissonLock = redissonClient.getLock(goodsLock);
                    try{
                    try {
                        redissonLock.lock(30, TimeUnit.SECONDS);
                        Integer surpNum = redisService.getCacheObject(SecurityConstant.ACTIVITY_GOODS+"-"+order.getActivityId()+"-"+orderGoods.getGoodsId());
                        redisService.setCacheObject(SecurityConstant.ACTIVITY_GOODS+"-"+order.getActivityId()+"-"+orderGoods.getGoodsId(),surpNum+orderGoods.getBuyNum());
                    }finally{
                        Integer surpNum = redisService.getCacheObject(SecurityConstant.ACTIVITY_GOODS + "-" + order.getActivityId() + "-" + orderGoods.getGoodsId());
                        redisService.setCacheObject(SecurityConstant.ACTIVITY_GOODS + "-" + order.getActivityId() + "-" + orderGoods.getGoodsId(), surpNum + orderGoods.getBuyNum());
                    } finally {
                        redissonLock.unlock();
                    }
                    //改变活动库存
@@ -3604,7 +3831,7 @@
                    activityRecord.setUserId(order.getUserId());
                    activityRecord.setOrderTime(order.getCreateTime());
                    remoteActivityService.delActivityRecord(activityRecord);
                }else{
                } else {
                    memberCouponSJ.add(orderGoods.getCouponId());
                }
                switch (orderGoods.getGoodsType()) {
@@ -3629,7 +3856,7 @@
                }
            }
            //回退优惠券
            if(memberCouponSJ!=null){
            if (memberCouponSJ != null) {
                remoteCouponService.backMemberCoupon(memberCouponSJ.toString());
            }
        }
@@ -3688,43 +3915,97 @@
            activityTotalChangeDto.setUserId(order.getUserId());
            remoteActivityService.changeActivityTotal(activityTotalChangeDto);
        }
        // 用户取消订单退款
        BigDecimal onlinePayMoney = order.getOnlinePayMoney();
        if(BigDecimal.ZERO.compareTo(onlinePayMoney) < 0){
            // 订单支付金额大于0,可发起退款
            orderWxApplyRefund(orderId, refundId, onlinePayMoney, orderRefund);
        }
        orderRefund.setRefundStatus(1);
        orderRefundService.saveOrUpdate(orderRefund);
    }
    /**
     * @description  员工端活动订单统计
     * @author  jqs
     * @date    2023/7/17 15:25
     * 申请退款API
     */
    private void orderWxApplyRefund(String orderId, String outRefundNo, BigDecimal payMoney, OrderRefund orderRefund){
        try {
            // 创建支付订单
            OrderPayment orderPayment = orderPaymentService.getByOrderId(orderId);
            if (null == orderPayment) {
                return;
            }
            String subMchId = orderPayment.getSubMchId();
            WxPayConfig config = wxService.getConfig();
            RefundsRequest request = new RefundsRequest();
            request.setSpAppid(config.getAppId());
            request.setSubMchid(subMchId);
            request.setTransactionId(orderPayment.getTransactionId());
            request.setOutRefundNo(outRefundNo);
            request.setReason("用户取消订单");
            // 订单金额
            int total = payMoney.multiply(new BigDecimal(100)).intValue();
            RefundsRequest.Amount amount = RefundsRequest.Amount.builder().refund(total).total(total).currency("CNY").build();
            request.setAmount(amount);
            request.setNotifyUrl(config.getNotifyUrl());
            RefundsResult result = wxService.getEcommerceService().refunds(request);
            // 微信退款id
            orderRefund.setWxRefundId(result.getRefundId());
            // 请求参数
            Gson gson = new Gson();
            String refundRequestJson = gson.toJson(request);
            // 返回参数
            String refundResponseJson = gson.toJson(result);
            // 保存支付订单统一下单日志
            paymentMessageService.savePaymentMessage("3", orderId, refundRequestJson, refundResponseJson);
        } catch (WxPayException e) {
            throw new ServiceException(e.getMessage());
        }
    }
    /**
     * @param staffTotalDto
     * @return  StaffActivityOrderTotalVo
     * @return StaffActivityOrderTotalVo
     * @description 员工端活动订单统计
     * @author jqs
     * @date 2023/7/17 15:25
     */
    @Override
    public StaffActivityOrderTotalVo getStaffActivityOrderTotal(StaffTotalDto staffTotalDto){
    public StaffActivityOrderTotalVo getStaffActivityOrderTotal(StaffTotalDto staffTotalDto) {
        StaffActivityOrderTotalVo staffActivityOrderTotalVo = orderMapper.getStaffActivityOrderTotal(staffTotalDto);
        return staffActivityOrderTotalVo;
    }
    /**
     * @description  员工端活动统计
     * @author  jqs
     * @date    2023/7/17 15:51
     * @param staffTotalDto
     * @return  StaffActivityTotalVo
     * @return StaffActivityTotalVo
     * @description 员工端活动统计
     * @author jqs
     * @date 2023/7/17 15:51
     */
    @Override
    public StaffActivityTotalVo getStaffActivityTotal(StaffTotalDto staffTotalDto){
    public StaffActivityTotalVo getStaffActivityTotal(StaffTotalDto staffTotalDto) {
        StaffActivityTotalVo staffActivityTotalVo = orderMapper.getStaffActivityTotal(staffTotalDto);
        return staffActivityTotalVo;
    }
    /**
     * @description  员工端活动统计订单分布
     * @author  jqs
     * @date    2023/7/17 16:16
     * @param staffTotalDto
     * @return  MerOrderDistributionTotalVo
     * @return MerOrderDistributionTotalVo
     * @description 员工端活动统计订单分布
     * @author jqs
     * @date 2023/7/17 16:16
     */
    @Override
    public MerOrderDistributionTotalVo getStaffOrderDistributionTotal(StaffTotalDto staffTotalDto){
    public MerOrderDistributionTotalVo getStaffOrderDistributionTotal(StaffTotalDto staffTotalDto) {
        MerOrderDistributionTotalVo orderDistributionTotalVo = new MerOrderDistributionTotalVo();
        // 获取订单年龄用户列表
        MerTotalDto merTotalDto = new MerTotalDto();
@@ -3765,7 +4046,7 @@
                }
                // 如果用户ID列表不为空
                if (userIdList != null && !userIdList.isEmpty()) {
                    mgtMapTotalPlusVo = orderMapper.listStaffActivityOrderDistributionTotal(userIdList,staffTotalDto.getShopId(),staffTotalDto.getActivityId());
                    mgtMapTotalPlusVo = orderMapper.listStaffActivityOrderDistributionTotal(userIdList, staffTotalDto.getShopId(), staffTotalDto.getActivityId());
                    orderTotalValue[i] = mgtMapTotalPlusVo.getMapValueFirst();
                    orderMoneyValue[i] = mgtMapTotalPlusVo.getMapValueSecond();
                } else {
@@ -3784,14 +4065,14 @@
    /**
     * @description  员工端活动统计销售占比
     * @author  jqs
     * @date    2023/7/17 17:03
     * @param staffTotalDto
     * @return  MerOrderTypeTotalVo
     * @return MerOrderTypeTotalVo
     * @description 员工端活动统计销售占比
     * @author jqs
     * @date 2023/7/17 17:03
     */
    @Override
    public MerOrderTypeTotalVo getStaffOrderTypeTotal(StaffTotalDto staffTotalDto){
    public MerOrderTypeTotalVo getStaffOrderTypeTotal(StaffTotalDto staffTotalDto) {
        MerOrderTypeTotalVo orderTypeTotalVo = new MerOrderTypeTotalVo();
        //获取商品分类销售数据
        List<MgtMapTotalPlusVo> MgtMapIntTotalVoGoodsType = orderMapper.listStaffOrderTotalGoodsType(staffTotalDto);
@@ -3829,11 +4110,11 @@
    }
    /**
     * @description  员工端获客人数
     * @author  jqs
     * @date    2023/7/17 18:42
     * @param staffTotalDto
     * @return  StaffActivityDateMemberTotalVo
     * @return StaffActivityDateMemberTotalVo
     * @description 员工端获客人数
     * @author jqs
     * @date 2023/7/17 18:42
     */
    @Override
    public StaffActivityDateMemberTotalVo getStaffActivityGetMemberTotal(StaffTotalDto staffTotalDto) {
@@ -3870,11 +4151,11 @@
    }
    /**
     * @description  员工端获客人数
     * @author  jqs
     * @date    2023/7/17 18:42
     * @param staffTotalDto
     * @return  StaffActivityDateMemberTotalVo
     * @return StaffActivityDateMemberTotalVo
     * @description 员工端获客人数
     * @author jqs
     * @date 2023/7/17 18:42
     */
    @Override
    public StaffActivityDateMemberTotalVo getStaffActivityMemberTotal(StaffTotalDto staffTotalDto) {
@@ -3911,12 +4192,12 @@
    }
    /**
     * @description  获取时间段日期
     * @author  jqs
     * @date    2023/7/17 19:11
     * @param startDate
     * @param endDate
     * @return  List<String>
     * @return List<String>
     * @description 获取时间段日期
     * @author jqs
     * @date 2023/7/17 19:11
     */
    public static List<String> getDateRange(String startDate, String endDate) {
        List<String> dateList = new ArrayList<>();
@@ -3930,50 +4211,87 @@
    }
    /**
     * @description  检查订单状态定时任务
     * @author  jqs
     * @date    2023/7/25 14:40
     * @param
     * @return  void
     * @return void
     * @description 检查订单状态定时任务
     * @author jqs
     * @date 2023/7/25 14:40
     */
    @Override
    public void checkOrderStatus(){
    public void checkOrderStatus() {
        Integer delayTime = 30;
        if(redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)){
        if (redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)) {
            delayTime = redisService.getCacheObject(SecurityConstant.AUTO_CANCEL_ORDER_TIME);
        }
        delayTime = delayTime + 5;
        Date checkTime = DateUtils.addMinutes(new Date(),-delayTime);
        Date checkTime = DateUtils.addMinutes(new Date(), -delayTime);
        LambdaQueryWrapper<Order> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(Order::getDelFlag,0);
        queryWrapper.lt(Order::getCreateTime,checkTime);
        queryWrapper.eq(Order::getOrderStatus,1);
        queryWrapper.eq(Order::getDelFlag, 0);
        queryWrapper.lt(Order::getCreateTime, checkTime);
        queryWrapper.eq(Order::getOrderStatus, 1);
        List<Order> orderList = this.list(queryWrapper);
        if(orderList!=null&&!orderList.isEmpty()){
            for(Order order: orderList){
        if (orderList != null && !orderList.isEmpty()) {
            for (Order order : orderList) {
                autoTimeCancelOrder(order);
            }
        }
    }
    private void autoTimeCancelOrder(Order order){
    @Override
    public void profitSharingBack(ProfitSharingNotifyResult result) {
        try {
            String outOrderNo = result.getOutOrderNo();
            ProfitSharing profitSharing = profitSharingService.getById(outOrderNo);
            if(null != profitSharing){
                profitSharing.setWxOrderId(result.getOrderId());
                profitSharing.setFinishTime(result.getSuccessTime());
                profitSharing.setFinishFlag(1);
                profitSharingService.saveOrUpdate(profitSharing);
            }
        } catch (Exception e){
            log.error("==分账回成功回调操作====【{}】========={}", result.getOutOrderNo(), e.getMessage());
        }
    }
    @Override
    public void orderRefundBack(RefundNotifyResult result) {
        try {
            String outRefundNo = result.getOutRefundNo();
            String refundStatus = result.getRefundStatus();
            OrderRefund orderRefund = orderRefundService.getById(outRefundNo);
            if(null != orderRefund){
                orderRefund.setWxRefundId(result.getRefundId());
                orderRefund.setBackTime(result.getSuccessTime());
                orderRefund.setRefundStatus(IDict.getCodeByText(RefundStatusEnum.class, refundStatus));
                orderRefundService.saveOrUpdate(orderRefund);
            }
        } catch (Exception e){
            log.error("==退款回成功回调操作====【{}】========={}", result.getOutRefundNo(), e.getMessage());
        }
    }
    private void autoTimeCancelOrder(Order order) {
        String orderId = order.getOrderId();
        order.setOrderStatus(0);
        order.setCancelTime(new Date());
        this.saveOrUpdate(order);
        //活动订单回退库存
        if(order.getOrderFrom()==2){
        if (order.getOrderFrom() == 2) {
            List<OrderGoods> orderGoodsList = orderGoodsService.listByOrderId(orderId);
            if(orderGoodsList!=null&&!orderGoodsList.isEmpty()){
                for(OrderGoods orderGoods : orderGoodsList){
            if (orderGoodsList != null && !orderGoodsList.isEmpty()) {
                for (OrderGoods orderGoods : orderGoodsList) {
                    //redis库存控制极简版
                    String goodsLock = "goods_lock_"+order.getActivityId()+"_"+orderGoods.getGoodsId();
                    String goodsLock = "goods_lock_" + order.getActivityId() + "_" + orderGoods.getGoodsId();
                    RLock redissonLock = redissonClient.getLock(goodsLock);
                    try{
                    try {
                        redissonLock.lock(30, TimeUnit.SECONDS);
                        Integer surpNum = redisService.getCacheObject(SecurityConstant.ACTIVITY_GOODS+"-"+order.getActivityId()+"-"+orderGoods.getGoodsId());
                        redisService.setCacheObject(SecurityConstant.ACTIVITY_GOODS+"-"+order.getActivityId()+"-"+orderGoods.getGoodsId(),surpNum+orderGoods.getBuyNum());
                    }finally{
                        Integer surpNum = redisService.getCacheObject(SecurityConstant.ACTIVITY_GOODS + "-" + order.getActivityId() + "-" + orderGoods.getGoodsId());
                        redisService.setCacheObject(SecurityConstant.ACTIVITY_GOODS + "-" + order.getActivityId() + "-" + orderGoods.getGoodsId(), surpNum + orderGoods.getBuyNum());
                    } finally {
                        redissonLock.unlock();
                    }
                    //改变活动库存
@@ -3994,16 +4312,16 @@
                    remoteActivityService.delActivityRecord(activityRecord);
                }
            }
        }else{
            if(order.getCouponMoney().compareTo(BigDecimal.ZERO)>0){
        } else {
            if (order.getCouponMoney().compareTo(BigDecimal.ZERO) > 0) {
                //回退优惠券
                List<OrderGoods> orderGoodsList = orderGoodsService.listByOrderId(orderId);
                if(orderGoodsList!=null&&!orderGoodsList.isEmpty()) {
                if (orderGoodsList != null && !orderGoodsList.isEmpty()) {
                    StringJoiner memberCouponSJ = new StringJoiner(",");
                    for (OrderGoods orderGoods : orderGoodsList) {
                        memberCouponSJ.add(orderGoods.getCouponId());
                    }
                    if(memberCouponSJ!=null){
                    if (memberCouponSJ != null) {
                        remoteCouponService.backMemberCoupon(memberCouponSJ.toString());
                    }
@@ -4011,4 +4329,69 @@
            }
        }
    }
    /**
     * @description  获取商户订单统计
     * @author  jqs
     * @date    2023/8/4 10:25
     * @param mgtShopAllOrderPageDto
     * @return  MgtShopAllOrderTotal
     */
    @Override
    public MgtShopAllOrderTotal getMgtShopAllOrderTotal(MgtShopAllOrderPageDto mgtShopAllOrderPageDto){
        MgtShopAllOrderTotal shopAllOrderTotal = orderMapper.getMgtShopAllOrderTotal(mgtShopAllOrderPageDto);
        return shopAllOrderTotal;
    }
    /**
     * 分页获取会员消费记录
     * @param merOrderPageDto
     * @return
     */
    @Override
    public List<MerOrderPageVo> pageMerMemberPayOrder(Page page,MerMemberNoClearOrderDto merOrderPageDto){
        List<MerOrderPageVo> merOrderPageVoList = orderMapper.pageMerMemberPayOrder(page, merOrderPageDto);
        if (merOrderPageVoList != null && !merOrderPageVoList.isEmpty()) {
            Long userId;
            Member member;
            Integer orderFrom;
            String orderFromDesc;
            BigDecimal zeroBig = new BigDecimal("0.00");
            StringJoiner userIdSj = new StringJoiner(",");
            for (MerOrderPageVo merOrderPageVo : merOrderPageVoList) {
                userId = merOrderPageVo.getUserId();
                userIdSj.add(userId.toString());
                orderFrom = merOrderPageVo.getOrderFrom();
                if (orderFrom != null) {
                    if (orderFrom == 1) {
                        orderFromDesc = "商城订单";
                    } else {
                        orderFromDesc = "线下创建";
                    }
                } else {
                    orderFromDesc = "商城订单";
                }
                merOrderPageVo.setOrderFromDesc(orderFromDesc);
                merOrderPageVo.setUnPaidMoney(merOrderPageVo.getPayMoney().subtract(merOrderPageVo.getReceiveMoney()));
                if (merOrderPageVo.getUnPaidMoney() == null) {
                    merOrderPageVo.setUnPaidMoney(zeroBig);
                }
            }
            MgtBaseBathDto mgtBaseBathDto = new MgtBaseBathDto();
            mgtBaseBathDto.setIds(userIdSj.toString());
            List<MgtSimpleMemberVo> simpleMemberVoList = remoteMemberService.listSimpleVoByIds(mgtBaseBathDto).getData();
            Map<Long, MgtSimpleMemberVo> userMap = simpleMemberVoList.stream()
                    .collect(Collectors.toMap(MgtSimpleMemberVo::getUserId, Function.identity()));
            for (MerOrderPageVo merOrderPageVo : merOrderPageVoList) {
                if(merOrderPageVo.getUserId()!=null&&userMap.get(merOrderPageVo.getUserId())!=null){
                    merOrderPageVo.setUserName(userMap.get(merOrderPageVo.getUserId()).getRealName());
                    merOrderPageVo.setNickName(userMap.get(merOrderPageVo.getUserId()).getNickName());
                    merOrderPageVo.setUserMobile(userMap.get(merOrderPageVo.getUserId()).getUserMobile());
                }else{
                    log.debug("订单merOrderPageVo"+merOrderPageVo.getOrderId()+"缺少用户");
                }
            }
        }
        return merOrderPageVoList;
    }
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/order/OrderService.java
@@ -2,6 +2,9 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.github.binarywang.wxpay.bean.ecommerce.PartnerTransactionsResult;
import com.github.binarywang.wxpay.bean.ecommerce.RefundNotifyResult;
import com.github.binarywang.wxpay.bean.profitsharingV3.ProfitSharingNotifyResult;
import com.ruoyi.order.domain.dto.*;
import com.ruoyi.order.domain.pojo.order.Order;
import com.ruoyi.order.domain.vo.*;
@@ -416,7 +419,7 @@
     * @param Transaction transaction
     * @return  void
     */
    void payBack(Transaction transaction);
    void payBack(PartnerTransactionsResult transaction);
    /**
     * 取消订单
@@ -489,4 +492,33 @@
     * @return  void
     */
    void checkOrderStatus();
    /**
     * 分账通知回调
     * @param result
     */
    void profitSharingBack(ProfitSharingNotifyResult result);
    /**
     * 订单退款回调
     * @param result
     */
    void orderRefundBack(RefundNotifyResult result);
    /**
     * @description  获取商户订单统计
     * @author  jqs
     * @date    2023/8/4 10:25
     * @param mgtShopAllOrderPageDto
     * @return  MgtShopAllOrderTotal
     */
    MgtShopAllOrderTotal getMgtShopAllOrderTotal(MgtShopAllOrderPageDto mgtShopAllOrderPageDto);
    /**
     * 分页获取会员消费记录
     * @param merOrderPageDto
     * @return
     */
    List<MerOrderPageVo> pageMerMemberPayOrder(Page page,MerMemberNoClearOrderDto merOrderPageDto);
}
ruoyi-modules/ruoyi-order/src/main/resources/bootstrap.yml
@@ -3,7 +3,7 @@
  port: 10064
# Spring
spring:
spring:
  application:
    # 应用名称
    name: ruoyi-order
@@ -25,3 +25,13 @@
        # 共享配置
        shared-configs:
          - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
wx:
  pay:
    appId: #微信公众号或者小程序等的appid(平台)
    mchId: #微信支付商户号(平台)
    mchKey: #微信支付商户密钥(平台)
    platformTyMacId: # 平台特约商户号,用户平台收取服务费
    subAppId: #服务商模式下的子商户公众账号ID (这个可以不用配置)
    subMchId: #服务商模式下的子商户号 (二级商户号  也不用配置)
    keyPath: # (商户平台 下载的V3证书)p12证书的位置,可以指定绝对路径,也可以指定类路径(以classpath:开头)
ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/ConsumerGoodsMapper.xml
@@ -124,6 +124,8 @@
        tcg.shop_id shopId,
        tcg.goods_type goodsType,
        tcg.goods_name goodsName,
        tcg.goods_introduction goodsIntroduction,
        tcg.goods_tag goodsTag,
        tcg.goods_picture goodsPicture,
        tcg.goods_nurses goodsNurses,
        tcg.cycle_num_flag cycleNumFlag,
ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderGoodsMapper.xml
@@ -109,6 +109,7 @@
        tog.goods_id goodsId,
        tog.goods_name goodsName,
        tog.goods_type goodsType,
        tog.goods_tag goodsTag,
        tog.buy_num buyNum,
        tog.goods_price goodsPrice,
        tog.goods_picture goodsPicture,
ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml
@@ -82,7 +82,9 @@
        <result column="discountMoney" property="discountMoney"/>
        <result column="receivableMoney" property="receivableMoney"/>
        <result column="payMoney" property="payMoney"/>
        <result column="receiveMoney" property="receiveMoney"/>
        <result column="orderFrom" property="orderFrom" />
        <result column="orderFromDesc" property="orderFromDesc" />
        <result column="createTime" property="createTime" />
        <collection property="mgtOrderGoodsVoList" ofType="com.ruoyi.order.domain.vo.MgtOrderGoodsPageVo">
            <result column="goodsName" property="goodsName"/>
@@ -294,10 +296,12 @@
        toc.coupon_money couponDiscount,
        toc.receivable_money receivableMoney,
        toc.receivable_deposit receivableDeposit,
        toc.pay_money payMoney,
        toc.change_receivable_money receiveMoney,
        IFNULL(toc.offline_pay_money,0) payMoney,
        toc.change_receivable_money-IFNULL(toc.offline_pay_money,0) unPaidMoney,
        toc.create_time createTime
        FROM t_order toc
        WHERE toc.del_flag = 0 AND toc.user_id = #{userId} AND toc.order_status = 2 AND toc.close_flag = 0
        WHERE toc.del_flag = 0 AND toc.user_id = #{userId} AND toc.order_status &gt;= 2 AND toc.close_flag = 0
        ORDER BY toc.create_time DESC
    </select>
@@ -319,7 +323,8 @@
        tog.goods_type goodsType,
        tog.buy_num buyNum,
        toc.create_time createTime,
        toc.order_from orderFrom
        toc.order_from orderFrom,
        toc.activity_name activityName
        FROM t_order toc
        INNER JOIN t_order_goods tog ON tog.order_id = toc.order_id
        WHERE toc.del_flag = 0 AND toc.shop_id = #{param.shopId}
@@ -363,10 +368,16 @@
        toc.order_status orderStatus,
        toc.order_money orderGoodsMoney,
        toc.coupon_money couponDiscount,
        toc.receivable_money receivableMoney,
        toc.receivable_money-toc.online_pay_money receivableMoney,
        toc.receivable_deposit receivableDeposit,
        toc.pay_money payMoney
        FROM t_order toc
        toc.change_receivable_money payMoney,
        IFNULL(toc.offline_pay_money,0) receiveMoney,
        IFNULL(toc.receivable_money-IFNULL(CASE toc.pay_type WHEN 1 THEN toc.online_pay_money WHEN 2 THEN IFNULL(toc.offline_pay_money,0) END,0),0) unpaidMoney,
        tpr.pay_time receiveMoneyTime,
        tpr.pay_money thisReceiveMoney,
        CASE tpr.pay_type WHEN 1 THEN "微信" WHEN 2 THEN "现金" WHEN 3 THEN "支付宝" END thisReceiveType
        FROM t_pay_record tpr
        INNER JOIN t_order toc ON tpr.order_id = toc.order_id
        WHERE toc.del_flag = 0 AND toc.user_id = #{userId} AND (toc.order_status = 2 OR toc.order_status = 3)
        ORDER BY toc.create_time DESC
    </select>
@@ -377,9 +388,10 @@
        IFNULL(SUM(IFNULL(toc.order_money,0)),0) totalOrderMoney,
        IFNULL(SUM(IFNULL(toc.receivable_money,0)),0) totalReceivableMoney,
        IFNULL(SUM(IFNULL(toc.discount_money,0)),0) totalDiscountMoney,
        IFNULL(SUM(IFNULL(toc.pay_money,0)),0) totalPayMoney
        IFNULL(SUM(IFNULL(toc.pay_money,0)),0) totalPayMoney,
        IFNULL(SUM(IFNULL(toc.change_receivable_money,0)),0) totalReceiveMoney
        FROM t_order toc
        WHERE toc.del_flag = 0 AND toc.user_id = #{param.userId}
        WHERE toc.del_flag = 0 AND toc.user_id = #{param.memberUserId}
        <if test="param.orderStatus != null">
            AND toc.order_status = #{param.orderStatus}
        </if>
@@ -410,6 +422,7 @@
        toc.discount_money discountMoney,
        toc.receivable_money receivableMoney,
        toc.pay_money payMoney,
        toc.change_receivable_money receiveMoney,
        tog.goods_name goodsName,
        tog.buy_num buyNum,
        toc.create_time createTime,
@@ -438,7 +451,7 @@
            AND Date(toc.create_time) &lt;= #{param.endOrderDate}
        </if>
        <if test="param.keyword != null and param.keyword != ''">
            AND toc.order_no LIKE CONCAT('%',#{param.keyword},'%')
            AND (toc.order_no LIKE CONCAT('%',#{param.keyword},'%') OR tog.goods_name LIKE CONCAT('%',#{param.keyword},'%'))
        </if>
        ORDER BY toc.create_time DESC
    </select>
@@ -487,9 +500,35 @@
    <select id="totalOrderFirst" resultType="com.ruoyi.order.domain.vo.MgtOrderTotal">
        SELECT
            COUNT(order_id) orderTotal,
            IFNULL(SUM(order_money),0) orderMoneyTotal
        FROM t_order ORDER BY create_time DESC
        COUNT(temp.order_id) orderTotal,
        IFNULL(SUM(temp.order_money),0) orderMoneyTotal
        FROM
        (SELECT toc.order_id,toc.order_money,toc.pay_money
        FROM t_order toc
        INNER JOIN t_order_goods tog ON tog.order_id = toc.order_id
        WHERE toc.del_flag = 0 AND (toc.order_from = 1 OR toc.order_from = 3)
        <if test="param.orderStatus != null">
            AND toc.order_status = #{param.orderStatus}
        </if>
        <if test="param.goodsType != null and param.goodsType !=''">
            AND tog.goods_type = #{param.goodsType}
        </if>
        <if test="param.shopId != null and param.shopId != ''">
            AND toc.shop_id = #{param.shopId}
        </if>
        <if test="param.shopIds != null and param.shopIds != ''">
            AND FIND_IN_SET(toc.shop_id, #{param.shopIds}) &gt; 0
        </if>
        <if test="param.keyword != null and param.keyword != ''">
            AND (toc.order_no LIKE CONCAT('%',#{param.keyword},'%') OR toc.activity_name LIKE CONCAT('%',#{param.keyword},'%') OR FIND_IN_SET(toc.user_id, #{param.userIds}) &gt; 0)
        </if>
        <if test="param.verifyStartTime != null and param.verifyStartTime != ''">
            AND Date(toc.use_time) &gt;= #{param.verifyStartTime}
        </if>
        <if test="param.verifyEndTime != null and param.verifyEndTime != ''">
            AND Date(toc.use_time) &lt;= #{param.verifyEndTime}
        </if>
        GROUP BY toc.order_id) AS temp
    </select>
    <select id="totalOrderSecond" resultType="com.ruoyi.order.domain.vo.MgtOrderTotal">
@@ -647,6 +686,13 @@
            IFNULL(SUM(CASE WHEN order_from = 2 THEN 1 ELSE 0 END),0) activityOrderTotal
        FROM t_order
        WHERE del_flag = 0
    </select>
    <select id="activityUserTotal" resultType="java.lang.Integer">
        SELECT
            COUNT(DISTINCT user_id)
        FROM t_order
        WHERE del_flag = 0 AND order_from = 2
    </select>
    <select id="getTotalOrderTotalOrderFrom" resultType="com.ruoyi.order.domain.vo.MgtTotalOrderTotalVo">
@@ -1344,7 +1390,7 @@
        SELECT
            DATE(toc.create_time) AS mapKey,
            COUNT(DISTINCT tog.order_id) AS mapValueFirst,
            SUM(tog.order_money) AS mapValueSecond
            SUM(tog.goods_receivable_money) AS mapValueSecond
        FROM t_order toc
        INNER JOIN t_order_goods tog ON toc.order_id = tog.order_id
        WHERE toc.del_flag = 0 AND tog.del_flag = 0 AND tog.goods_type = #{param.goodsType}
@@ -1454,28 +1500,28 @@
        FROM t_order
        WHERE del_flag = 0 AND shop_id = #{param.shopId}
        <if test="param.memberUserId != null and param.memberUserId != ''">
            AND toc.user_id = #{param.memberUserId}
            AND user_id = #{param.memberUserId}
        </if>
        <if test="param.type != null and param.type ==1 ">
            AND (toc.order_status = 2 OR toc.order_status = 3)
            AND (order_status = 2 OR order_status = 3)
        </if>
        <if test="param.type != null and param.type ==2 ">
            AND toc.order_status = 2
            AND order_status = 2
        </if>
        <if test="param.type != null and param.type ==3 ">
            AND toc.order_status = 3
            AND order_status = 3
        </if>
        <if test="param.orderFrom != null and param.orderFrom != '' ">
            AND toc.order_from = #{param.orderFrom}
            AND order_from = #{param.orderFrom}
        </if>
        <if test="param.startOrderDate != null and param.startOrderDate != '' ">
            AND Date(toc.create_time) &gt;= #{param.startOrderDate}
            AND Date(create_time) &gt;= #{param.startOrderDate}
        </if>
        <if test="param.endOrderDate != null and param.endOrderDate != '' ">
            AND Date(toc.create_time) &lt;= #{param.endOrderDate}
            AND Date(create_time) &lt;= #{param.endOrderDate}
        </if>
        <if test="param.keyword != null and param.keyword != ''">
            AND (toc.order_no LIKE CONCAT('%',#{param.keyword},'%') OR tog.goods_name LIKE CONCAT('%',#{param.keyword},'%'))
            AND order_no LIKE CONCAT('%',#{param.keyword},'%')
        </if>
    </select>
@@ -1632,4 +1678,57 @@
        INNER JOIN t_order_goods tog ON tog.order_id = toc.order_id
        WHERE toc.del_flag = 0 AND toc.order_status &gt; 1 AND toc.user_id = #{userId} AND tog.goods_id = #{goodsId}
    </select>
    <select id="getMgtShopAllOrderTotal" resultType="com.ruoyi.order.domain.vo.MgtShopAllOrderTotal">
        SELECT
        COUNT(DISTINCT toc.order_id) orderTotal,
        IFNULL(SUM(toc.order_money),0) totalOrderMoney,
        IFNULL(SUM(toc.change_receivable_money),0) totalReceiveMoney
        FROM t_order toc
        WHERE toc.del_flag = 0 AND (toc.order_from = 1 OR toc.order_from = 3)
        <if test="param.orderFrom != null">
            AND toc.order_from = #{param.orderFrom}
        </if>
        <if test="param.orderStatus != null">
            AND toc.order_status = #{param.orderStatus}
        </if>
        <if test="param.orderNo != null and param.orderNo !=''">
            AND toc.order_no LIKE CONCAT('%',#{param.orderNo},'%')
        </if>
        <if test="param.shopId != null and param.shopId != ''">
            AND toc.shop_id = #{param.shopId}
        </if>
        <if test="param.startOrderDate != null and param.startOrderDate != '' ">
            AND Date(toc.create_time) &gt;= #{param.startOrderDate}
        </if>
        <if test="param.endOrderDate != null and param.endOrderDate != '' ">
            AND Date(toc.create_time) &lt;= #{param.endOrderDate}
        </if>
        ORDER BY toc.create_time DESC
    </select>
    <select id="pageMerMemberPayOrder" resultMap="merOrderResultMap">
        SELECT
        toc.user_id userId,
        toc.order_id orderId,
        toc.order_no orderNo,
        toc.pay_type payType,
        toc.order_status orderStatus,
        toc.order_money orderGoodsMoney,
        toc.coupon_money couponDiscount,
        toc.receivable_money-toc.online_pay_money receivableMoney,
        toc.receivable_deposit receivableDeposit,
        toc.change_receivable_money payMoney,
        IFNULL(toc.offline_pay_money,0) receiveMoney,
        toc.order_remark orderRemark,
        tog.goods_name goodsName,
        tog.goods_type goodsType,
        tog.buy_num buyNum,
        toc.create_time createTime,
        toc.order_from orderFrom
        FROM t_order toc
        INNER JOIN t_order_goods tog ON tog.order_id = toc.order_id
        WHERE toc.del_flag = 0 AND (toc.order_status = 2 OR toc.order_status = 3) AND toc.shop_id = #{param.shopId} AND toc.user_id = #{param.memberUserId}
        ORDER BY toc.create_time DESC
    </select>
</mapper>
ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/UserServiceRecordMapper.xml
@@ -123,7 +123,7 @@
    <select id="getMgtMemberServiceTotal" resultType="com.ruoyi.order.domain.vo.MgtMemberServiceTotalVo">
        SELECT
        COUNT(temp.consumerGoodsId),
        COUNT(temp.consumerGoodsId) cycleTotal,
        IFNULL(SUM(temp.cycleCount),0) cycleCount,
        IFNULL(SUM(temp.surpCycleCount),0) surpCycleCount
        FROM (SELECT
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/config/WxPayConfiguration.java
@@ -1,15 +1,9 @@
package com.ruoyi.shop.config;
import com.github.binarywang.wxpay.config.WxPayConfig;
import com.github.binarywang.wxpay.service.WxPayService;
import com.github.binarywang.wxpay.service.impl.WxPayServiceImpl;
import lombok.AllArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
@@ -22,7 +16,7 @@
public class WxPayConfiguration {
  private WxPayProperties properties;
  @Bean
  /*@Bean
  @ConditionalOnMissingBean
  public WxPayService wxService() {
    WxPayConfig payConfig = new WxPayConfig();
@@ -39,6 +33,6 @@
    WxPayService wxPayService = new WxPayServiceImpl();
    wxPayService.setConfig(payConfig);
    return wxPayService;
  }
  }*/
}
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/console/ShopController.java
@@ -2,6 +2,9 @@
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.common.core.utils.bean.BeanUtils;
import com.ruoyi.shop.domain.pojo.shop.ShopAuthentication;
import com.ruoyi.shop.domain.pojo.shop.ShopProportion;
import com.ruoyi.shop.domain.pojo.shop.ShopRelUser;
import com.ruoyi.shop.domain.pojo.shop.ShopStaff;
import com.ruoyi.shop.service.shop.*;
@@ -10,6 +13,7 @@
import com.ruoyi.system.api.constant.AppErrorConstant;
import com.ruoyi.system.api.domain.dto.*;
import com.ruoyi.system.api.domain.poji.shop.Shop;
import com.ruoyi.system.api.domain.poji.shop.ShopProportionVo;
import com.ruoyi.system.api.domain.poji.sys.SysUser;
import com.ruoyi.system.api.domain.vo.*;
import com.ruoyi.system.api.model.QwH5LoginVo;
@@ -59,6 +63,12 @@
    @Resource
    private MemberTaskService memberTaskService;
    @Resource
    private ShopAuthenticationService shopAuthenticationService;
    @Resource
    private ShopProportionService shopProportionService;
    /**
     * 企业微信H5登录
     * @param qwUserDetail
@@ -90,6 +100,30 @@
        return R.ok(shop);
    }
    @PostMapping("/getShopSubMchId")
    public R<String> getShopSubMchId(@RequestBody Long shopId){
        String subMchid = "";
        ShopAuthentication authentication = shopAuthenticationService.getByShopId(shopId);
        if(null != authentication){
            subMchid = authentication.getSubMchid();
        }
        return R.ok(subMchid, "");
    }
    /**
     * 获取商户分成
     * @param shopId
     * @return
     */
    @PostMapping("/getShopProportion")
    public R<ShopProportionVo> getShopProportion(@RequestBody Long shopId){
        ShopProportion shopProportion = shopProportionService.getByShopId(shopId);
        ShopProportionVo shopProportionVo = new ShopProportionVo();
        BeanUtils.copyBeanProp(shopProportionVo, shopProportion);
        return R.ok(shopProportionVo);
    }
    @PostMapping("/getShopByUserId")
    public R<ShopRelUserVo> getShopByUserId(@RequestBody Long userId)
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/management/MgtShopController.java
@@ -71,8 +71,10 @@
    @ApiOperation(value = "导出商户列表")
    public void exportPageMgtShop(MgtShopPageDto mgtShopPageDto, HttpServletResponse response) {
        Page<MgtShopPageVo> page = new Page<>();
        page.setSize(2000);
        page.setCurrent(1);
        if(page.getSize()>5000){
            page.setSize(5000);
            page.setCurrent(1);
        }
        List<MgtShopPageVo> mgtShopPageVoList = shopService.pageMgtShop(page,mgtShopPageDto);
        ExcelUtil<MgtShopPageVo> util = new ExcelUtil<MgtShopPageVo>(MgtShopPageVo.class);
        util.exportExcel(response, mgtShopPageVoList, "用户订单列表");
@@ -185,8 +187,10 @@
        Long userId = SecurityUtils.getUserId();
        mgtShopSuggestPageDto.setUserId(userId);
        Page<MgtShopSuggestPageVo> page = new Page<>();
        page.setSize(2000);
        page.setCurrent(1);
        if(page.getSize()>5000){
            page.setSize(5000);
            page.setCurrent(1);
        }
        List<MgtShopSuggestPageVo> mgtShopSuggestPageVoList = shopSuggestService.pageMgtShopSuggest(page,mgtShopSuggestPageDto);
        ExcelUtil<MgtShopSuggestPageVo> util = new ExcelUtil<MgtShopSuggestPageVo>(MgtShopSuggestPageVo.class);
        util.exportExcel(response, mgtShopSuggestPageVoList, "商户建议列表");
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/dto/MerFollowAgencyTaskDto.java
@@ -22,6 +22,9 @@
    @ApiModelProperty(value="跟踪类型1电话2手动")
    private Integer followType;
    @ApiModelProperty(value="自定义跟进类型")
    private String customeFollowType;
    @ApiModelProperty(value="拨打电话")
    private String callPhone;
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/dto/MerFollowMemberTaskDto.java
@@ -22,6 +22,10 @@
    @ApiModelProperty(value="跟踪类型1电话2手动")
    private Integer followType;
    @ApiModelProperty(value="自定义跟进类型")
    private String customeFollowType;
    @ApiModelProperty(value="拨打电话")
    private String callPhone;
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/dto/MgtFollowShopTaskDto.java
@@ -23,6 +23,7 @@
    @ApiModelProperty(value="跟进类型")
    private String followType;
    @ApiModelProperty(value="跟进内容")
    private String followContent;
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/dto/StaffFollowShopTaskDto.java
@@ -47,7 +47,7 @@
    private String nextTaskContent;
    @ApiModelProperty(value="跟踪类型")
    private String customFollowType;
    private String customeFollowType;
    @ApiModelProperty(value="紧急程度")
    private String emergencyState;
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/pojo/task/AgencyTaskRecord.java
@@ -1,20 +1,17 @@
package com.ruoyi.shop.domain.pojo.task;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import com.baomidou.mybatisplus.annotation.Version;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Date;
/**
 * <p>
@@ -76,6 +73,9 @@
    @TableField("create_time")
    private Date createTime;
    @TableField("custome_follow_type")
    private String customeFollowType;
    @Override
    protected Serializable pkVal() {
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/pojo/task/MemberTaskRecord.java
@@ -1,16 +1,16 @@
package com.ruoyi.shop.domain.pojo.task;
import com.baomidou.mybatisplus.annotation.IdType;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Date;
/**
 * <p>
@@ -73,6 +73,9 @@
    @TableField("create_time")
    private Date createTime;
    @TableField("custome_follow_type")
    private String customeFollowType;
    @Override
    protected Serializable pkVal() {
        return this.id;
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/pojo/task/ShopTaskRecord.java
@@ -72,8 +72,8 @@
    @TableField("create_time")
    private Date createTime;
    @TableField("custom_follow_type")
    private String customFollowType;
    @TableField("custome_follow_type")
    private String customeFollowType;
    @Override
    protected Serializable pkVal() {
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/vo/MerAgencyTaskPageVo.java
@@ -28,5 +28,6 @@
    @ApiModelProperty(value="紧急情况")
    private String emergencyState;;
    @ApiModelProperty(value = "跟进时间")
    private String followTime;
}
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/vo/MerAgencyTaskRecordPageVo.java
@@ -29,6 +29,9 @@
    @ApiModelProperty(value="跟踪类型1电话2手动")
    private Integer followType;
    @ApiModelProperty(value="自定义跟进类型")
    private String customeFollowType;
    @ApiModelProperty(value="电话时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date callTime;
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/vo/MerMemberTaskRecordPageVo.java
@@ -29,6 +29,9 @@
    @ApiModelProperty(value="跟踪类型1电话2手动")
    private Integer followType;
    @ApiModelProperty(value="自定义跟进类型")
    private String customeFollowType;
    @ApiModelProperty(value="电话时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date callTime;
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/vo/MgtAgencyTaskRecordPageVo.java
@@ -39,6 +39,9 @@
    @ApiModelProperty(value="跟踪类型1电话2手动")
    private Integer followType;
    @ApiModelProperty(value="跟进类型")
    private String customeFollowType;
    @ApiModelProperty(value="电话时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date callTime;
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/vo/MgtMemberFollowPageVo.java
@@ -38,6 +38,9 @@
    @ApiModelProperty(value="跟踪类型1电话2手动")
    private Integer followType;
    @ApiModelProperty(value="自定义跟进类型")
    private String customeFollowType;
    @ApiModelProperty(value="电话时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date callTime;
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/vo/MgtShopTaskRecordPageVo.java
@@ -39,6 +39,9 @@
    @ApiModelProperty(value="跟踪类型1电话2手动")
    private String followType;
    @ApiModelProperty(value="自定义跟踪类型")
    private String customeFollowType;
    @ApiModelProperty(value="电话时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date callTime;
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/vo/StaffAgencyTaskRecordPageVo.java
@@ -39,6 +39,9 @@
    @ApiModelProperty(value="跟踪类型1电话2手动")
    private Integer followType;
    @ApiModelProperty(value="自定义跟进类型")
    private String customeFollowType;
    @ApiModelProperty(value="电话时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date callTime;
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/vo/StaffMyShopTaskRecordPageVo.java
@@ -40,7 +40,7 @@
    private String followType;
    @ApiModelProperty(value="跟进类型")
    private String customFollowType;
    private String customeFollowType;
    @ApiModelProperty(value="电话时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/enums/WxApplyMentSignStateEnum.java
New file
@@ -0,0 +1,20 @@
package com.ruoyi.shop.enums;
import com.ruoyi.shop.enums.dict.IDict;
public enum WxApplyMentSignStateEnum implements IDict<Integer> {
    /**
     * 签约状态
         1、UNSIGNED:未签约。该状态下,电商平台可查询获取签约链接,引导二级商户的超级管理员完成签约;
         2、SIGNED :已签约。指二级商户的超级管理员已完成签约。注意:若申请单被驳回,商户修改了商户主体名称、法人名称、超级管理员信息、主体类型等信息,则需重新签约。
         3、NOT_SIGNABLE:不可签约。该状态下,暂不支持超级管理员签约。一般为申请单处于已驳回、已冻结、机器校验中状态,无法签约。
     */
    UNSIGNED(1, "UNSIGNED"),
    SIGNED(2, "SIGNED"),
    NOT_SIGNABLE(3, "NOT_SIGNABLE");
    WxApplyMentSignStateEnum(Integer code, String text){
        init(code, text);
    }
}
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/enums/WxApplyMentStateEnum.java
New file
@@ -0,0 +1,30 @@
package com.ruoyi.shop.enums;
import com.ruoyi.shop.enums.dict.IDict;
public enum WxApplyMentStateEnum implements IDict<Integer> {
    /**
     * 审核状态
        1:CHECKING:资料校验中
        2:ACCOUNT_NEED_VERIFY:待账户验证
        3:AUDITING:审核中
        4:REJECTED:已驳回
        5:NEED_SIGN:待签约
        6:FINISH:完成
        7:FROZEN:已冻结
        8:CANCELED:已作废
     */
    CHECKING(1, "CHECKING"),
    ACCOUNT_NEED_VERIFY(2, "ACCOUNT_NEED_VERIFY"),
    AUDITING(3, "AUDITING"),
    REJECTED(4, "REJECTED"),
    NEED_SIGN(5, "NEED_SIGN"),
    FINISH(6, "FINISH"),
    FROZEN(7, "FROZEN"),
    CANCELED(8, "CANCELED");
    WxApplyMentStateEnum(Integer code, String text){
        init(code, text);
    }
}
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/enums/dict/DictBean.java
New file
@@ -0,0 +1,15 @@
package com.ruoyi.shop.enums.dict;
import lombok.Data;
/**
 * 字典bean
 * 只有code和text,可用于展示下拉框
 *
 * @author luozhan
 */
@Data
public class DictBean<T> implements IDict<T> {
    private final T code;
    private final String text;
}
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/enums/dict/IDict.java
New file
@@ -0,0 +1,170 @@
package com.ruoyi.shop.enums.dict;
import java.lang.reflect.Field;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
 * 字典接口
 * <p>
 * 自定义的字典枚举类实现本接口后可省略属性code和text,以及对应的get方法
 * 在构造方法中只需调用init方法即可初始化
 *
 * @author luozhan
 * @date 2021-12
 */
public interface IDict<T> {
    /**
     * 通过code获取value
     *
     * @param clazz 枚举class
     * @param code  code
     * @return text
     */
    static <T> String getTextByCode(Class<? extends IDict<T>> clazz, T code) {
        return Stream.of(clazz.getEnumConstants())
                .filter((IDict<T> e) -> e.getCode().equals(code))
                .map(IDict::getText)
                .findAny().orElse("");
    }
    /**
     * 通过text获取code
     *
     * @param clazz 枚举class
     * @param text  text
     * @return code
     */
    static <T> T getCodeByText(Class<? extends IDict<T>> clazz, String text) {
        return Stream.of(clazz.getEnumConstants())
                .filter((IDict<T> e) -> e.getText().equals(text))
                .map(IDict::getCode)
                .findAny().orElse(null);
    }
    /**
     * 通过code获取字典枚举实例
     *
     * @param clazz 枚举class
     * @param code  code
     * @param <T>   字典code类型
     * @param <R>   枚举类型
     * @return 字典枚举实例
     */
    @SuppressWarnings("unchecked")
    static <T, R extends IDict<T>> R getByCode(Class<? extends IDict<T>> clazz, T code) {
        return Stream.of(clazz.getEnumConstants())
                .filter((IDict<T> e) -> (e.getCode().equals(code)))
                .map(v -> (R) v)
                .findAny()
                .orElse(null);
    }
    /**
     * 获取给定的字典枚举项(常用下拉框数据请求)
     *
     * @param enums 可指定需要哪些项
     * @return List
     */
    @SafeVarargs
    static <T, E extends IDict<T>> List<IDict<T>> getItems(E... enums) {
        return Stream.of(enums)
                .map(DictPool::getDict)
                .collect(Collectors.toList());
    }
    /**
     * 获取所有字典枚举项,除开指定的枚举
     *
     * @param exclude 指定排除的枚举
     * @return List
     */
    @SafeVarargs
    @SuppressWarnings("unchecked")
    static <T, E extends IDict<T>> List<IDict<T>> getItemsExclude(E... exclude) {
        Class<IDict<T>> clazz = (Class<IDict<T>>) exclude.getClass().getComponentType();
        IDict<T>[] allEnum = clazz.getEnumConstants();
        List<IDict<T>> excludeList = Arrays.asList(exclude);
        return Stream.of(allEnum)
                .filter(e -> !excludeList.contains(e))
                .map(DictPool::getDict)
                .collect(Collectors.toList());
    }
    /**
     * 获取所有字典枚举项(常用下拉框数据请求)
     * 枚举值上标记@Deprecated的不会返回
     *
     * @param clazz 字典枚举类
     * @return List
     */
    static <T> List<IDict<T>> getAll(Class<? extends IDict<T>> clazz) {
        Map<String, Field> fieldCache = Arrays.stream(clazz.getDeclaredFields()).
                filter(Field::isEnumConstant).
                collect(Collectors.toMap(Field::getName, Function.identity()));
        IDict<T>[] allEnum = clazz.getEnumConstants();
        return Stream.of(allEnum)
                .filter(e -> !fieldCache.get(((Enum<?>) e).name()).isAnnotationPresent(Deprecated.class))
                .map(DictPool::getDict)
                .collect(Collectors.toList());
    }
    /**
     * 初始化
     *
     * @param code 字典编码
     * @param text 字典文本
     */
    default void init(T code, String text) {
        DictPool.putDict(this, code, text);
    }
    /**
     * 获取编码
     *
     * @return 编码
     */
    default T getCode() {
        return DictPool.getDict(this).getCode();
    }
    /**
     * 获取文本
     *
     * @return 文本
     */
    default String getText() {
        return DictPool.getDict(this).getText();
    }
    @SuppressWarnings("all")
    class DictPool {
        private static final Map<IDict, DictBean> DICT_MAP = new ConcurrentHashMap<>();
        private static final Map<String, Class<? extends IDict>> DICT_NAME_CLASS_MAP = new ConcurrentHashMap<>();
        static <T> void putDict(IDict<T> dict, T code, String text) {
            DICT_NAME_CLASS_MAP.put(dict.getClass().getName(), dict.getClass());
            DICT_MAP.put(dict, new DictBean<>(code, text));
        }
        public static List<IDict<Object>> getDict(String dictName) {
            Class<? extends IDict> aClass = DICT_NAME_CLASS_MAP.get(dictName);
            return IDict.getAll((Class<? extends IDict<Object>>) aClass);
        }
        static <K extends IDict<T>, T> DictBean<T> getDict(K dict) {
            return DICT_MAP.get(dict);
        }
    }
}
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/fliter/ParamsAuthFilter.java
@@ -30,7 +30,14 @@
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        String requestUrl = request.getRequestURI();
        String requestUrlUpperCase = requestUrl.toUpperCase();
        if(requestUrlUpperCase.contains("EXPORT")
                ||requestUrlUpperCase.contains("IMPORTTEMPLATE")
        ){
            filterChain.doFilter(request, response);
            return;
        }
        RepeatedlyRequestWrapper wrapper = new RepeatedlyRequestWrapper(request, response);
        getRequestParams(wrapper);
@@ -39,7 +46,6 @@
        // 返回的结果
        String content = responseWrapper.getTextContent();
        String requestUrl = request.getRequestURI();
        log.info("-------------------- Response Data ----------------------");
        log.info(requestUrl + " -> " + content);
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/mapper/shop/ShopStaffMapper.java
@@ -19,4 +19,14 @@
     * @param shopId
     */
    void clearShopStaffRelation(@Param("shopId") Long shopId);
    /**
     * @description
     * @author  jqs
     * @date    2023/8/3 13:33
     * @param shopId
 * @param codeUrl
     * @return  void
     */
    void updateShopCodeUrl(@Param("shopId") Long shopId,@Param("codeUrl") String codeUrl);
}
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/scheduler/ShopScheduler.java
@@ -1,7 +1,12 @@
package com.ruoyi.shop.scheduler;
import com.ruoyi.common.core.utils.bean.BeanUtils;
import com.ruoyi.common.core.utils.uuid.IdUtils;
import com.ruoyi.shop.domain.pojo.shop.ShopAuthentication;
import com.ruoyi.shop.service.shop.ShopService;
import com.ruoyi.shop.service.task.ShopTaskService;
import com.ruoyi.system.api.domain.poji.shop.Shop;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
@@ -21,6 +26,9 @@
    @Resource
    private ShopTaskService shopTaskService;
    @Resource
    private ShopService shopService;
    /**
     * 定时检查跟进任务状态
@@ -33,4 +41,16 @@
        }
    }
    /**
     * 0 0/1 * * * ?
     * 定时检查 每分钟检查一次 微信二级商户进件状态
     */
    @Scheduled(cron="0 0/1 * * * ?")
    private void queryEcommerceApplyMentsStatus(){
        if(schedulerUtils.getSchedulerRun()) {
            log.info("--------------------定时检查微信二级商户进件状态任务开始执行--------------------");
            shopService.queryEcommerceApplyMentsStatus();
            log.info("--------------------定时检查微信二级商户进件状态任务结束执行--------------------");
        }
    }
}
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopAuthenticationServiceImpl.java
@@ -1,10 +1,23 @@
package com.ruoyi.shop.service.impl.shop;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.github.binarywang.wxpay.bean.ecommerce.ApplymentsStatusResult;
import com.google.common.base.Joiner;
import com.ruoyi.shop.domain.pojo.shop.ShopAuthentication;
import com.ruoyi.shop.enums.WxApplyMentSignStateEnum;
import com.ruoyi.shop.enums.WxApplyMentStateEnum;
import com.ruoyi.shop.enums.dict.IDict;
import com.ruoyi.shop.mapper.shop.ShopAuthenticationMapper;
import com.ruoyi.shop.service.shop.ShopAuthenticationService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/**
 * <p>
@@ -17,4 +30,72 @@
@Service
public class ShopAuthenticationServiceImpl extends ServiceImpl<ShopAuthenticationMapper, ShopAuthentication> implements ShopAuthenticationService {
    @Override
    public List<ShopAuthentication> getShopAuthNeedUpdateStatus() {
        List<Integer> auditStatusList = Arrays.asList(1, 2, 3, 5);
        LambdaQueryWrapper<ShopAuthentication> queryWrapper = Wrappers.lambdaQuery();
        queryWrapper.in(ShopAuthentication::getAuditStatus, auditStatusList);
        queryWrapper.isNotNull(ShopAuthentication::getApplymentId);
        return this.list(queryWrapper);
    }
    @Override
    public void updateAuditStatusByApplymentId(String applymentId, ApplymentsStatusResult result) {
        // WxApplyMentStateEnum
        String applymentState = result.getApplymentState();
        Integer auditStatus = IDict.getCodeByText(WxApplyMentStateEnum.class, applymentState);
        Integer signState = IDict.getCodeByText(WxApplyMentSignStateEnum.class, result.getSignState());
        LambdaUpdateWrapper<ShopAuthentication> updateWrapper = Wrappers.lambdaUpdate();
        updateWrapper.eq(ShopAuthentication::getApplymentId, applymentId)
                .set(ShopAuthentication::getAuditStatus, auditStatus)
                .set(ShopAuthentication::getSignState, signState);
        if(WxApplyMentStateEnum.ACCOUNT_NEED_VERIFY.getCode().equals(auditStatus)){
            // ACCOUNT_NEED_VERIFY 待账户验证
            updateWrapper.set(ShopAuthentication::getLegalValidationUrl, result.getLegalValidationUrl());
            ApplymentsStatusResult.AccountValidation accountValidation = result.getAccountValidation();
            if(null != accountValidation) {
                updateWrapper.set(ShopAuthentication::getAvAccountName, accountValidation.getAccountName())
                    .set(ShopAuthentication::getAvAccountNo, accountValidation.getAccountNo())
                    .set(ShopAuthentication::getAvPayAmount, accountValidation.getPayAmount())
                    .set(ShopAuthentication::getDaNumber, accountValidation.getDestinationAccountNumber())
                    .set(ShopAuthentication::getDaName, accountValidation.getDestinationAccountName())
                    .set(ShopAuthentication::getDaBank, accountValidation.getDestinationAccountBank())
                    .set(ShopAuthentication::getDaCity, accountValidation.getCity())
                    .set(ShopAuthentication::getDaRemark, accountValidation.getRemark())
                    .set(ShopAuthentication::getDaDeadline, accountValidation.getDeadline());
            }
        } else if(WxApplyMentStateEnum.NEED_SIGN.getCode().equals(auditStatus)){
            // NEED_SIGN 待签约
            updateWrapper.set(ShopAuthentication::getSignUrl, result.getSignUrl());
            updateWrapper.set(ShopAuthentication::getSubMchid, result.getSubMchid());
        } else if(WxApplyMentStateEnum.FINISH.getCode().equals(auditStatus)){
            // FINISH 完成
            updateWrapper.set(ShopAuthentication::getSubMchid, result.getSubMchid());
        } else if(WxApplyMentStateEnum.REJECTED.getCode().equals(auditStatus)
                || WxApplyMentStateEnum.FROZEN.getCode().equals(auditStatus)){
            List<ApplymentsStatusResult.AuditDetail> auditDetail = result.getAuditDetail();
            if(null != auditDetail && !auditDetail.isEmpty()){
                List<String> paramNameList = auditDetail.stream().map(ApplymentsStatusResult.AuditDetail::getParamName).collect(Collectors.toList());
                List<String> rejectReason = auditDetail.stream().map(ApplymentsStatusResult.AuditDetail::getRejectReason).collect(Collectors.toList());
                updateWrapper.set(ShopAuthentication::getAdParamName, Joiner.on(";").join(paramNameList))
                        .set(ShopAuthentication::getAdRejectReason, Joiner.on(";").join(rejectReason));
            }
        }
        this.update(updateWrapper);
    }
    @Override
    public ShopAuthentication getByShopId(Long shopId) {
        LambdaQueryWrapper<ShopAuthentication> queryWrapper = Wrappers.lambdaQuery();
        queryWrapper.eq(ShopAuthentication::getShopId, shopId)
                .last(" limit 1 ");
        return this.getOne(queryWrapper);
    }
}
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopProportionServiceImpl.java
@@ -1,7 +1,10 @@
package com.ruoyi.shop.service.impl.shop;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.shop.domain.dto.MgtShopProportionEditDto;
import com.ruoyi.shop.domain.pojo.shop.ShopAuthentication;
import com.ruoyi.shop.domain.pojo.shop.ShopProportion;
import com.ruoyi.shop.mapper.shop.ShopProportionMapper;
import com.ruoyi.shop.service.shop.ShopProportionService;
@@ -48,4 +51,13 @@
        shopProportionNew.setUpdateUserId(mgtShopProportionEditDto.getUserId());
        this.saveOrUpdate(shopProportionNew);
    }
    @Override
    public ShopProportion getByShopId(Long shopId) {
        LambdaQueryWrapper<ShopProportion> queryWrapper = Wrappers.lambdaQuery();
        queryWrapper.eq(ShopProportion::getShopId, shopId)
                .eq(ShopProportion::getDelFlag, 0)
                .last(" limit 1 ");
        return this.getOne(queryWrapper);
    }
}
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopServiceImpl.java
@@ -2,9 +2,12 @@
import com.alibaba.fastjson2.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.binarywang.wxpay.bean.ecommerce.ApplymentsResult;
import com.github.binarywang.wxpay.bean.ecommerce.ApplymentsStatusResult;
import com.github.binarywang.wxpay.exception.WxPayException;
import com.ruoyi.common.core.constant.CacheConstants;
import com.ruoyi.common.core.exception.ServiceException;
@@ -18,6 +21,7 @@
import com.ruoyi.shop.domain.pojo.shop.*;
import com.ruoyi.shop.domain.pojo.task.ShopFile;
import com.ruoyi.shop.domain.vo.*;
import com.ruoyi.shop.enums.WxApplyMentStateEnum;
import com.ruoyi.shop.mapper.shop.ShopMapper;
import com.ruoyi.shop.service.shop.*;
import com.ruoyi.shop.service.task.MemberTaskService;
@@ -35,7 +39,6 @@
import com.ruoyi.system.api.domain.vo.*;
import com.ruoyi.system.api.service.*;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
@@ -111,6 +114,9 @@
    private RemoteSysStaffService remoteSysStaffService;
    @Resource
    private RemoteFileService remoteFileService;
    @Resource
    private ShopTaskService shopTaskService;
    @Resource
@@ -121,6 +127,7 @@
    /**
     * 获取商户详情
     *
     * @param shopId
     * @return
     */
@@ -307,6 +314,13 @@
        if(newShop){
            //生成商户关联记录
            initNewShop(shop,mgtEditShopDto.getUserId());
            CodeGetDto codeGetDto = new CodeGetDto();
            String url = "https://wxapp.hhhrt.cn/mini/activity?activityId="+shop.getShopId();
            codeGetDto.setUrl(url);
            codeGetDto.setFileName("shop-"+shop.getShopId());
            String codeUrl = remoteFileService.getAppOrderTotal(codeGetDto).getData();
            shop.setShopCode(codeUrl);
            this.saveOrUpdate(shop);
        }
    }
@@ -797,6 +811,8 @@
        merHomeShopTotalVo.setShopTurnover(orderVo.getShopTurnover());
        merHomeShopTotalVo.setCycleSurp(shopTotal.getUseableCyclePerson());
        merHomeShopTotalVo.setExplorationSurp(shopTotal.getUseableExperiencePerson());
        merHomeShopTotalVo.setPlatformBirthdayFlag(shop.getPlatformBirthdayFlag());
        merHomeShopTotalVo.setPlatformCouponFlag(shop.getPlatformCouponFlag());
        return merHomeShopTotalVo;
    }
@@ -1328,4 +1344,44 @@
        shop.setUpdateTime(new Date());
        shopMapper.updateShop(shop);
    }
    @Override
    public void queryEcommerceApplyMentsStatus() {
        List<ShopAuthentication> list = shopAuthenticationService.getShopAuthNeedUpdateStatus();
        list.forEach(item -> queryApplyStatusByApplymentId(item.getApplymentId(), item.getShopId()));
    }
    /**
     * 调用微信接口查询申请审核状态
     * @param applymentId
     */
    private void queryApplyStatusByApplymentId(String applymentId, Long shopId) {
        try {
            if (StringUtils.isNotBlank(applymentId)) {
                ApplymentsStatusResult result = wechatPayUtils.queryApplyStatusByApplymentId(applymentId);
                shopAuthenticationService.updateAuditStatusByApplymentId(applymentId, result);
                String applymentState = result.getApplymentState();
                if(WxApplyMentStateEnum.FINISH.getText().equals(applymentState)){
                    applySuccessUpdateShopStatus(shopId);
                }
            }
        } catch (WxPayException e) {
            e.printStackTrace();
        }
    }
    /**
     * 商户进件审核完成,更新商户状态
     * @param shopId
     */
    private void applySuccessUpdateShopStatus(Long shopId){
        // 更新商户状态为正常
        Shop shop = this.getById(shopId);
        Integer shopStatus = handelShopStatus(shop.getFrozenFlag(), shop.getCooperativeFlag(), 1);
        LambdaUpdateWrapper<Shop> updateWrapper = Wrappers.lambdaUpdate();
        updateWrapper.eq(Shop::getShopId, shopId)
                .set(Shop::getShopStatus, shopStatus)
                .set(Shop::getAuthFlag, 1);
        this.update(updateWrapper);
    }
}
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopStaffServiceImpl.java
@@ -10,10 +10,12 @@
import com.ruoyi.shop.mapper.shop.ShopStaffMapper;
import com.ruoyi.shop.service.shop.ShopStaffService;
import com.ruoyi.system.api.domain.dto.AppEditUserDto;
import com.ruoyi.system.api.domain.dto.CodeGetDto;
import com.ruoyi.system.api.domain.dto.MerEditUserDto;
import com.ruoyi.system.api.domain.dto.MgtShopStaffEditDto;
import com.ruoyi.system.api.domain.poji.shop.Shop;
import com.ruoyi.system.api.domain.vo.MerStaffInfoVo;
import com.ruoyi.system.api.service.RemoteFileService;
import com.ruoyi.system.api.service.RemoteSysStaffService;
import com.ruoyi.system.api.service.RemoteUserService;
import org.springframework.stereotype.Service;
@@ -41,6 +43,8 @@
    @Resource
    private RemoteSysStaffService remoteSysStaffService;
    @Resource
    private RemoteFileService remoteFileService;
    /**
     *
     * @param userId
@@ -82,8 +86,17 @@
        merStaffInfoVo.setBusinessTime(shop.getBusinessStartTime()+"-"+shop.getBusinessEndTime());
        merStaffInfoVo.setShopType(shop.getShopType());
        merStaffInfoVo.setShopNumber(shop.getShopNumber());
        String shopCodeUrl = "https://wxapp.hhhrt.cn/mini/shop?shopId="+shop.getShopId();
        merStaffInfoVo.setShopCodeUrl(shopCodeUrl);
        if(StringUtils.isNotBlank(shop.getShopCode())){
            merStaffInfoVo.setShopCodeUrl(shop.getShopCode());
        }else{
            CodeGetDto codeGetDto = new CodeGetDto();
            String url = "https://wxapp.hhhrt.cn/mini/activity?activityId="+shop.getShopId();
            codeGetDto.setUrl(url);
            codeGetDto.setFileName("shop-"+shop.getShopId());
            String codeUrl = remoteFileService.getAppOrderTotal(codeGetDto).getData();
            merStaffInfoVo.setShopCodeUrl(codeUrl);
            shopStaffMapper.updateShopCodeUrl(shop.getShopId(),codeUrl);
        }
        return merStaffInfoVo;
    }
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/task/AgencyTaskServiceImpl.java
@@ -121,6 +121,7 @@
                    agencyTaskRecord.setDelFlag(0);
                    agencyTaskRecord.setUserId(merFollowAgencyTaskDto.getUserId());
                    agencyTaskRecord.setFollowType(merFollowAgencyTaskDto.getFollowType());
                    agencyTaskRecord.setCustomeFollowType(merFollowAgencyTaskDto.getCustomeFollowType());
                    agencyTaskRecord.setCallPhone(merFollowAgencyTaskDto.getCallPhone());
                    agencyTaskRecord.setCallTime(followPhoneDto.getCallTime());
                    agencyTaskRecord.setFollowContent(followPhoneDto.getFollowContent());
@@ -130,6 +131,13 @@
            }
        }else{
            agencyTaskRecord = new AgencyTaskRecord();
            agencyTaskRecord.setTaskId(merFollowAgencyTaskDto.getTaskId());
            agencyTaskRecord.setDelFlag(0);
            agencyTaskRecord.setUserId(merFollowAgencyTaskDto.getUserId());
            agencyTaskRecord.setFollowType(merFollowAgencyTaskDto.getFollowType());
            agencyTaskRecord.setCustomeFollowType(merFollowAgencyTaskDto.getCustomeFollowType());
            agencyTaskRecord.setFollowContent(merFollowAgencyTaskDto.getFollowContent());
            agencyTaskRecord.setCreateTime(new Date());
            //创建任务详情文件
            String picture = merFollowAgencyTaskDto.getPicture();
            String video = merFollowAgencyTaskDto.getVideo();
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/task/MemberTaskServiceImpl.java
@@ -17,6 +17,7 @@
import com.ruoyi.shop.service.task.MemberTaskService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.shop.service.task.TaskFileService;
import com.ruoyi.system.api.domain.dto.MemberTotalChangeDto;
import com.ruoyi.system.api.domain.vo.MemberTaskSimpleVo;
import com.ruoyi.system.api.service.RemoteMemberService;
import org.springframework.stereotype.Service;
@@ -57,19 +58,7 @@
     */
    @Override
    public List<MerMemberTaskPageVo> pageMerMemberTask(Page page, MerMemberTaskPageDto merMemberTaskPageDto){
        String today = DateUtils.parseDateToStr("YYYY-MM-DD",new Date());
        List<MerMemberTaskPageVo> merMemberTaskPageVoList = memberTaskMapper.pageMerMemberTask(page, merMemberTaskPageDto);
        if(merMemberTaskPageVoList!=null&&!merMemberTaskPageVoList.isEmpty()){
            String taskDate;
            for(MerMemberTaskPageVo merMemberTaskPageVo : merMemberTaskPageVoList){
                taskDate = merMemberTaskPageVo.getTaskDate();
                if(today.equals(taskDate)){
                    merMemberTaskPageVo.setTodayFlag(1);
                }else{
                    merMemberTaskPageVo.setTodayFlag(0);
                }
            }
        }
        return merMemberTaskPageVoList;
    }
@@ -100,6 +89,9 @@
        memberTask.setTaskContent(merCreateMemberTaskDto.getTaskContent());
        memberTask.setCreateTime(new Date());
        this.saveOrUpdate(memberTask);
        MemberTotalChangeDto memberTotalChangeDto = new MemberTotalChangeDto();
        memberTotalChangeDto.setNextTaskTime(merCreateMemberTaskDto.getTaskDate());
        remoteMemberService.changeMemberTotal(memberTotalChangeDto);
    }
    /**
@@ -131,6 +123,7 @@
                    memberTaskRecord.setDelFlag(0);
                    memberTaskRecord.setUserId(merFollowMemberTaskDto.getUserId());
                    memberTaskRecord.setFollowType(merFollowMemberTaskDto.getFollowType());
                    memberTaskRecord.setCustomeFollowType(merFollowMemberTaskDto.getCustomeFollowType());
                    memberTaskRecord.setCallPhone(merFollowMemberTaskDto.getCallPhone());
                    memberTaskRecord.setFollowContent(followPhoneDto.getFollowContent());
                    memberTaskRecord.setCallTime(followPhoneDto.getCallTime());
@@ -145,6 +138,7 @@
            memberTaskRecord.setDelFlag(0);
            memberTaskRecord.setUserId(merFollowMemberTaskDto.getUserId());
            memberTaskRecord.setFollowType(merFollowMemberTaskDto.getFollowType());
            memberTaskRecord.setCustomeFollowType(merFollowMemberTaskDto.getCustomeFollowType());
            memberTaskRecord.setFollowContent(merFollowMemberTaskDto.getFollowContent());
            memberTaskRecord.setCreateTime(new Date());
            // 保存或更新会员任务记录
@@ -217,6 +211,9 @@
            }
            memberTask.setCreateTime(new Date());
            this.saveOrUpdate(memberTask);
            MemberTotalChangeDto memberTotalChangeDto = new MemberTotalChangeDto();
            memberTotalChangeDto.setNextTaskTime(merFollowMemberTaskDto.getNextTaskDate());
            remoteMemberService.changeMemberTotal(memberTotalChangeDto);
        }
    }
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/task/ShopTaskServiceImpl.java
@@ -71,7 +71,7 @@
        shopTaskRecord.setTaskId(taskId);
        shopTaskRecord.setUserId(mgtFollowShopTaskDto.getUserId());
        shopTaskRecord.setFollowType(2);
        shopTaskRecord.setCustomFollowType(mgtFollowShopTaskDto.getFollowType());
        shopTaskRecord.setCustomeFollowType(mgtFollowShopTaskDto.getFollowType());
        shopTaskRecord.setFollowContent(mgtFollowShopTaskDto.getFollowContent());
        shopTaskRecord.setCreateTime(nowTime);
        shopTaskRecordService.saveOrUpdate(shopTaskRecord);
@@ -244,7 +244,7 @@
            shopTaskRecord.setUserId(staffFollowShopTaskDto.getUserId());
            shopTaskRecord.setFollowType(staffFollowShopTaskDto.getFollowType());
            shopTaskRecord.setFollowContent(staffFollowShopTaskDto.getFollowContent());
            shopTaskRecord.setCustomFollowType(staffFollowShopTaskDto.getCustomFollowType());
            shopTaskRecord.setCustomeFollowType(staffFollowShopTaskDto.getCustomeFollowType());
            shopTaskRecord.setCreateTime(new Date());
            // 保存或更新会员任务记录
            shopTaskRecordService.saveOrUpdate(shopTaskRecord);
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/shop/ShopAuthenticationService.java
@@ -1,7 +1,10 @@
package com.ruoyi.shop.service.shop;
import com.github.binarywang.wxpay.bean.ecommerce.ApplymentsStatusResult;
import com.ruoyi.shop.domain.pojo.shop.ShopAuthentication;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/**
 * <p>
@@ -13,4 +16,23 @@
 */
public interface ShopAuthenticationService extends IService<ShopAuthentication> {
    /**
     * 获取需要更新状态的 微信二级商户认证审核
     * @return
     */
    List<ShopAuthentication> getShopAuthNeedUpdateStatus();
    /**
     * 修改微信审核状态
     * @param applymentId
     * @param result
     */
    void updateAuditStatusByApplymentId(String applymentId, ApplymentsStatusResult result);
    /**
     * 获取商户认证信息
     * @param shopId
     * @return
     */
    ShopAuthentication getByShopId(Long shopId);
}
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/shop/ShopProportionService.java
@@ -22,4 +22,11 @@
     * @return  void
     */
    void editMgtShopProportion(MgtShopProportionEditDto mgtShopProportionEditDto);
    /**
     * 获取商户分成比例
     * @param shopId
     * @return
     */
    ShopProportion getByShopId(Long shopId);
}
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/shop/ShopService.java
@@ -327,4 +327,9 @@
     * @return  void
     */
    void editShopCustomStatus(StaffShopCCEditDto staffShopCCEditDto);
    /**
     * 微信二级商户进件状态 定时任务检测
     */
    void queryEcommerceApplyMentsStatus();
}
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/util/WechatPayUtils.java
@@ -20,12 +20,13 @@
@Component
@AllArgsConstructor
public class WechatPayUtils {
    private final WxPayService wxService;
    /**
     * 电商二级商户进件(提交申请单)
     */
    public void ecommerceApply(ShopAuthentication shopAuthentication, String applyNumber, Shop shop) throws WxPayException {
    public ApplymentsResult ecommerceApply(ShopAuthentication shopAuthentication, String applyNumber, Shop shop) throws WxPayException {
        EcommerceService ecommerceService = wxService.getEcommerceService();
        ApplymentsRequest request = new ApplymentsRequest();
        //生成提交类
@@ -105,18 +106,18 @@
        request.setBusinessAdditionPics(shopAuthentication.getBaPics());
        request.setBusinessAdditionDesc(shopAuthentication.getBaDesc());
        ApplymentsResult result = ecommerceService.createApply(request);
        return ecommerceService.createApply(request);
    }
    /**
     * 通过查询申请状态API查询二级商户入驻申请结果
     * @param applyNumber 业务申请编号
     * @param applymentId 微信支付申请单号
     * @return 申请状态
     * @throws WxPayException
     */
    public ApplymentsStatusResult queryApplyStatusByOutRequestNo(String applyNumber) throws WxPayException {
        return wxService.getEcommerceService().queryApplyStatusByOutRequestNo(applyNumber);
    public ApplymentsStatusResult queryApplyStatusByApplymentId(String applymentId) throws WxPayException {
        return wxService.getEcommerceService().queryApplyStatusByApplymentId(applymentId);
    }
}
ruoyi-modules/ruoyi-shop/src/main/resources/mapper/shop/ShopMapper.xml
@@ -406,8 +406,14 @@
        ts.cooperation_end_time cooperationEndTime
        FROM t_shop ts
        WHERE ts.del_flag = 0 AND ts.belong_shop_id = #{param.shopId}
        <if test="param.shopStatus!=null and param.shopStatus!=''">
            AND ts.shop_status = #{param.shopStatus}
        <if test="param.shopStatus!=null and param.shopStatus==1">
            AND ts.shop_status = 1
        </if>
        <if test="param.shopStatus!=null and param.shopStatus==2">
            AND ts.frozen_flag = 1
        </if>
        <if test="param.shopStatus!=null and param.shopStatus==3">
            AND ts.cooperative_flag = 0
        </if>
        <if test="param.keyword!=null and param.keyword!=''">
            AND (ts.shop_name LIKE CONCAT('%',#{param.keyword},'%') OR ts.shopowner_name LIKE CONCAT('%',#{param.keyword},'%')
@@ -423,14 +429,13 @@
    </select>
    <select id="getNearbyShop"  resultType="com.ruoyi.shop.domain.vo.AppNearShopVo">
        SELECT ts.shop_id shopId, ACOS(
        COS(RADIANS(#{param.longitude})) *
        COS(RADIANS(ts.shop_latitude)) *
        COS(RADIANS(ts.shop_longitude) - RADIANS(#{param.latitude})) +
        SIN(RADIANS(#{param.longitude})) *
        SIN(RADIANS(ts.shop_latitude))
        ) * 6378 as distance
        FROM t_shop ts WHERE ts.del_flag = 0 AND ts.shop_status = 1
        SELECT ts.shop_id shopId,
               6378.138 * 2 * ASIN(SQRT(POW(SIN((
               #{param.latitude} * PI() / 180 - ts.shop_latitude * PI() / 180) / 2), 2)
                + COS(#{param.latitude} * PI() / 180) * COS(ts.shop_latitude * PI() / 180) * POW(
               SIN((#{param.longitude} * PI() / 180 - ts.shop_longitude * PI() / 180) / 2), 2
               ))) AS distance
        FROM t_shop ts
        ORDER BY distance ASC LIMIT 1
    </select>
ruoyi-modules/ruoyi-shop/src/main/resources/mapper/shop/ShopStaffMapper.xml
@@ -8,4 +8,7 @@
        UPDATE t_shop_staff SET del_flag = 1 WHERE del_flag = 0 AND shop_id = #{shopId}
    </update>
    <update id="updateShopCodeUrl">
        UPDATE t_shop SET shop_code =  #{codeUrl} WHERE shop_id = #{shopId}
    </update>
</mapper>
ruoyi-modules/ruoyi-shop/src/main/resources/mapper/task/AgencyTaskMapper.xml
@@ -19,7 +19,8 @@
        tat.task_date taskDate,
        tat.task_content taskContent,
        tmtr.follow_content dealContent,
        tat.emergency_state emergencyState
        tat.emergency_state emergencyState,
        tmtr.create_time followTime
        FROM t_agency_task tat
        LEFT JOIN t_agency_task_record tmtr ON tat.task_id = tmtr.task_id
        WHERE tat.del_flag = 0 AND tat.shop_id = #{param.shopId} AND tat.agency_id = #{param.agencyId}
@@ -29,7 +30,7 @@
        ORDER BY tat.task_date DESC
    </select>
    <select id="pageMerAgencyTask" resultType="com.ruoyi.shop.domain.vo.MerAgencySimpleTaskRecordPageVo">
    <select id="pageMerAgencySimpleTaskRecord" resultType="com.ruoyi.shop.domain.vo.MerAgencySimpleTaskRecordPageVo">
        SELECT
        tmtr.create_time createTime,
        CASE tmtr.follow_type WHEN 1 THEN "电话跟进" WHEN 2 THEN "手动跟进" END followType,
ruoyi-modules/ruoyi-shop/src/main/resources/mapper/task/AgencyTaskRecordMapper.xml
@@ -20,6 +20,7 @@
        tmtr.task_id taskId,
        tmt.task_date taskDate,
        tmtr.follow_type followType,
        tmtr.custome_follow_type customeFollowType,
        tmtr.call_time callTime,
        tmtr.follow_content followContent,
        tmtr.call_phone callPhone
@@ -36,6 +37,7 @@
        tmtr.task_id taskId,
        tmt.create_time createTime,
        tmtr.follow_type followType,
        tmtr.custome_follow_type customeFollowType,
        tmtr.call_time callTime,
        tmtr.follow_content followContent,
        tmtr.call_phone callPhone
@@ -54,6 +56,7 @@
            tmtr.task_id taskId,
            tmt.create_time createTime,
            tmtr.follow_type followType,
            tmtr.custome_follow_type customeFollowType,
            tmtr.call_time callTime,
            tmtr.follow_content followContent,
            tmtr.call_phone callPhone
ruoyi-modules/ruoyi-shop/src/main/resources/mapper/task/MemberTaskMapper.xml
@@ -86,7 +86,7 @@
        tmt.task_content taskContent,
        tmtr.follow_content dealContent,
        tmt.emergency_state emergencyState,
        CASE WHEN task_date = #{param.today} THEN 1 ELSE 0 END todayFlag
        CASE tmt.task_status WHEN 1 THEN 1 WHEN 3 THEN 1 ELSE 0 END todayFlag
        FROM t_member_task tmt
        LEFT JOIN t_member_task_record tmtr ON tmt.task_id = tmtr.task_id
        WHERE tmt.del_flag = 0 AND tmt.shop_id = #{param.shopId} AND tmt.user_id = #{param.memberUserId}
ruoyi-modules/ruoyi-shop/src/main/resources/mapper/task/MemberTaskRecordMapper.xml
@@ -85,6 +85,7 @@
        tmtr.follow_type followType,
        tmtr.call_time callTime,
        tmtr.follow_content followContent,
        tmtr.custome_follow_type customeFollowType,
        tmtr.call_phone callPhone
        FROM t_member_task tmt
        INNER JOIN t_member_task_record tmtr ON tmtr.task_id = tmt.task_id
@@ -101,6 +102,7 @@
        tmtr.task_id taskId,
        tmt.task_date taskDate,
        tmtr.follow_type followType,
        tmtr.custome_follow_type customeFollowType,
        tmtr.call_time callTime,
        tmtr.follow_content followContent,
        tmtr.call_phone callPhone
ruoyi-modules/ruoyi-shop/src/main/resources/mapper/task/ShopTaskRecordMapper.xml
@@ -9,7 +9,7 @@
        tmtr.task_id taskId,
        tmtr.create_time createTime,
        CASE tmtr.follow_type WHEN 1 THEN "电话跟进" WHEN 2 THEN "手动跟进" END followType,
        tmtr.custom_follow_type customFollowType,
        tmtr.custome_follow_type customeFollowType,
        tmtr.follow_content followContent,
        tmtr.call_time callTime,
        tmtr.call_phone callPhone
@@ -26,7 +26,7 @@
            tmtr.task_id taskId,
            tmtr.create_time createTime,
            CASE tmtr.follow_type WHEN 1 THEN "电话跟进" WHEN 2 THEN "手动跟进" END followType,
            tmtr.custom_follow_type customFollowType,
            tmtr.custome_follow_type customeFollowType,
            tmtr.follow_content followContent,
            tmtr.call_time callTime,
            tmtr.call_phone callPhone
@@ -43,6 +43,7 @@
            tmtr.task_id taskId,
            tmtr.create_time createTime,
            CASE tmtr.follow_type WHEN 1 THEN "电话跟进" WHEN 2 THEN "手动跟进" END followType,
            tmtr.custome_follow_type customeFollowType,
            tmtr.follow_content followContent,
            tmtr.call_time callTime,
            tmtr.call_phone callPhone
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/management/MgtConfigController.java
@@ -387,8 +387,10 @@
        Long userId = SecurityUtils.getUserId();
        mgtOperLogPageDto.setUserId(userId);
        Page<MgtOperLogPageVo> page = new Page<>();
        page.setSize(2000);
        page.setCurrent(1);
        if(page.getSize()>5000){
            page.setSize(5000);
            page.setCurrent(1);
        }
        List<MgtOperLogPageVo> mgtOperLogPageVoList = customConfigService.pageOperLog(page, mgtOperLogPageDto);
        ExcelUtil<MgtOperLogPageVo> util = new ExcelUtil<MgtOperLogPageVo>(MgtOperLogPageVo.class);
        util.exportExcel(response, mgtOperLogPageVoList, "操作日志");
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/management/MgtStaffController.java
@@ -80,8 +80,10 @@
        Long userId = SecurityUtils.getUserId();
        mgtStaffSuggestPageDto.setUserId(userId);
        Page<MgtStaffSuggestPageVo> page = new Page<>();
        page.setSize(2000);
        page.setCurrent(1);
        if(page.getSize()>5000){
            page.setSize(5000);
            page.setCurrent(1);
        }
        List<MgtStaffSuggestPageVo> staffSuggestPageVoList = staffSuggestService.pageMgtStaffSuggest(page,mgtStaffSuggestPageDto);
        ExcelUtil<MgtStaffSuggestPageVo> util = new ExcelUtil<MgtStaffSuggestPageVo>(MgtStaffSuggestPageVo.class);
        util.exportExcel(response, staffSuggestPageVoList, "员工建议列表");
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/fliter/ParamsAuthFilter.java
@@ -30,7 +30,14 @@
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        String requestUrl = request.getRequestURI();
        String requestUrlUpperCase = requestUrl.toUpperCase();
        if(requestUrlUpperCase.contains("EXPORT")
                ||requestUrlUpperCase.contains("IMPORTTEMPLATE")
                ||requestUrlUpperCase.contains("GETAPPAGREEMENT")){
            filterChain.doFilter(request, response);
            return;
        }
        RepeatedlyRequestWrapper wrapper = new RepeatedlyRequestWrapper(request, response);
        getRequestParams(wrapper);
@@ -39,7 +46,6 @@
        // 返回的结果
        String content = responseWrapper.getTextContent();
        String requestUrl = request.getRequestURI();
        log.info("-------------------- Response Data ----------------------");
        log.info(requestUrl + " -> " + content);
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/config/CustomConfigMapper.java
@@ -5,7 +5,7 @@
import com.ruoyi.system.domain.pojo.config.CustomConfig;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.system.domain.vo.MgtOperLogPageVo;
import io.lettuce.core.dynamic.annotation.Param;
import org.apache.ibatis.annotations.Param;
import java.util.List;
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/config/CustomConfigServiceImpl.java
@@ -646,9 +646,9 @@
        mgtBulletinBoardVo.setSalesTotal(mgtBulletinBoardVoOrder.getSalesTotal());
        mgtBulletinBoardVo.setUnUseOrderTotal(mgtBulletinBoardVoOrder.getUnUseOrderTotal());
        mgtBulletinBoardVo.setActivityOrderTotal(mgtBulletinBoardVoOrder.getActivityOrderTotal());
        mgtBulletinBoardVo.setActivityUserTotal(mgtBulletinBoardVoOrder.getActivityUserTotal());
        // 获取活动信息
        MgtBulletinBoardVo mgtBulletinBoardVoActivity = remoteActivityService.boardActivityTotal().getData();
        mgtBulletinBoardVo.setActivityUserTotal(mgtBulletinBoardVoActivity.getActivityUserTotal());
        //MgtBulletinBoardVo mgtBulletinBoardVoActivity = remoteActivityService.boardActivityTotal().getData();
        //待回复建议数量
        Integer countA = remoteMemberService.getUnReplaySuggestVo().getData();
        Integer countB = remoteShopService.getUnReplaySuggestVo().getData();
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/sys/SysUserServiceImpl.java
@@ -608,10 +608,6 @@
        String editValue = appEditUserDto.getEditValue();
        switch (editType){
            case 1:
                sysUser.setNickName(editValue);
                sysUser.setUpdateTime(DateUtils.getNowDate());
                sysUser.setUpdateBy(String.valueOf(appEditUserDto.getUserId()));
                userMapper.updateUser(sysUser);
                break;
            case 2:
                sysUser.setAvatar(editValue);
@@ -627,6 +623,12 @@
                break;
            case 4:
                break;
            case 5:
                sysUser.setNickName(editValue);
                sysUser.setUpdateTime(DateUtils.getNowDate());
                sysUser.setUpdateBy(String.valueOf(appEditUserDto.getUserId()));
                userMapper.updateUser(sysUser);
                break;
            default:
                break;
        }
ruoyi-modules/ruoyi-system/src/main/resources/mapper/config/CustomConfigMapper.xml
@@ -20,10 +20,10 @@
        FROM sys_oper_log
        WHERE operator_type = 1 AND del_flag = 0
        <if test="param.operContent != null and param.operContent !=''">
            oper_content LIKE concat('%', #{param.operContent}, '%')
            AND oper_content LIKE concat('%', #{param.operContent}, '%')
        </if>
        <if test="param.operTitle != null and param.operTitle !=''">
            title = #{param.operTitle}
            AND title = #{param.operTitle}
        </if>
        <if test="param.operStartTime!=null and param.operStartTime!=''">
            AND Date(oper_time) &gt;= #{param.operStartTime}
ruoyi-modules/ruoyi-system/src/main/resources/mapper/staff/SysStaffMapper.xml
@@ -19,7 +19,7 @@
        su.nick_name nickName
        FROM sys_dept sd
        LEFT JOIN sys_user su ON sd.dept_id = su.dept_id
        WHERE sd.del_flag = 0 AND su.del_flag = 0
        WHERE sd.del_flag = "0" AND su.del_flag = "0" AND su.status = "0"
    </select>
    <select id="listMgtDeptStaffByDept" resultMap="deptStaffResultMap">
@@ -30,7 +30,7 @@
            su.nick_name nickName
        FROM sys_dept sd
                 LEFT JOIN sys_user su ON sd.dept_id = su.dept_id
        WHERE sd.del_flag = 0 AND su.del_flag = 0 AND sd.dept_id = #{deptId}
        WHERE sd.del_flag = "0" AND su.del_flag = "0" AND sd.dept_id = #{deptId}
        <if test="userId != null and userId != ''">
            AND su.user_id = #{userId}
        </if>