├── docs ├── nacos │ └── nacos_config.zip ├── docker │ ├── seata │ │ └── config │ │ │ ├── META-INF │ │ │ ├── services │ │ │ │ ├── io.seata.core.rpc.RegisterCheckAuthHandler │ │ │ │ ├── io.seata.core.store.DistributedLocker │ │ │ │ ├── io.seata.core.store.db.DataSourceProvider │ │ │ │ ├── io.seata.server.lock.LockManager │ │ │ │ ├── io.seata.server.coordinator.AbstractCore │ │ │ │ └── io.seata.server.session.SessionManager │ │ │ ├── spring.factories │ │ │ └── spring-configuration-metadata.json │ │ │ ├── docker │ │ │ └── seata-server-entrypoint.sh │ │ │ └── file.conf │ └── run.md └── sql │ └── mysql5 │ └── database.sql ├── youlai-auth ├── src │ └── main │ │ ├── resources │ │ ├── bootstrap.yml │ │ ├── bootstrap-dev.yml │ │ └── bootstrap-prod.yml │ │ └── java │ │ └── com │ │ └── youlai │ │ └── auth │ │ ├── model │ │ ├── LoginUserInfo.java │ │ └── CaptchaResult.java │ │ ├── enums │ │ ├── CaptchaCodeTypeEnum.java │ │ └── CaptchaTypeEnum.java │ │ ├── oauth2 │ │ ├── extension │ │ │ ├── captcha │ │ │ │ └── CaptchaParameterNames.java │ │ │ └── smscode │ │ │ │ └── SmsCodeParameterNames.java │ │ └── jackson │ │ │ ├── MemberMixin.java │ │ │ └── SysUserMixin.java │ │ └── AuthApplication.java └── Dockerfile ├── mall-oms ├── oms-boot │ ├── src │ │ └── main │ │ │ ├── resources │ │ │ ├── bootstrap.yml │ │ │ ├── bootstrap-dev.yml │ │ │ ├── bootstrap-prod.yml │ │ │ └── mapper │ │ │ │ └── OmsOrderItemMapper.xml │ │ │ └── java │ │ │ └── com │ │ │ └── youlai │ │ │ └── mall │ │ │ └── oms │ │ │ ├── model │ │ │ ├── vo │ │ │ │ ├── WxPayResponseVO.java │ │ │ │ └── OrderConfirmVO.java │ │ │ ├── dto │ │ │ │ ├── OrderDTO.java │ │ │ │ ├── CartItemDto.java │ │ │ │ ├── OrderItemDTO.java │ │ │ │ └── CartItemVo.java │ │ │ ├── form │ │ │ │ └── OrderPaymentForm.java │ │ │ └── entity │ │ │ │ ├── OmsOrderLog.java │ │ │ │ └── OmsOrderSetting.java │ │ │ ├── mapper │ │ │ ├── OrderItemMapper.java │ │ │ ├── OrderLogMapper.java │ │ │ ├── OrderPayMapper.java │ │ │ ├── OrderSettingMapper.java │ │ │ ├── OrderDeliveryMapper.java │ │ │ └── OrderMapper.java │ │ │ ├── service │ │ │ ├── app │ │ │ │ ├── OrderSettingService.java │ │ │ │ ├── OrderDeliveryService.java │ │ │ │ ├── OrderItemService.java │ │ │ │ ├── impl │ │ │ │ │ ├── OrderSettingServiceImpl.java │ │ │ │ │ ├── OrderDeliveryServiceImpl.java │ │ │ │ │ └── OrderItemServiceImpl.java │ │ │ │ ├── CartService.java │ │ │ │ └── OrderLogService.java │ │ │ └── admin │ │ │ │ └── OmsOrderService.java │ │ │ ├── constant │ │ │ └── OrderConstants.java │ │ │ ├── converter │ │ │ ├── CartConverter.java │ │ │ └── OrderItemConverter.java │ │ │ ├── enums │ │ │ ├── OrderSourceEnum.java │ │ │ ├── PaymentMethodEnum.java │ │ │ └── OrderStatusEnum.java │ │ │ └── OmsApplication.java │ └── Dockerfile └── pom.xml ├── mall-pms ├── pms-boot │ ├── src │ │ ├── main │ │ │ ├── resources │ │ │ │ ├── bootstrap.yml │ │ │ │ ├── bootstrap-prod.yml │ │ │ │ ├── bootstrap-dev.yml │ │ │ │ └── mapper │ │ │ │ │ └── PmsSkuMapper.xml │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── youlai │ │ │ │ └── mall │ │ │ │ └── pms │ │ │ │ ├── service │ │ │ │ ├── BrandService.java │ │ │ │ ├── SpuAttributeService.java │ │ │ │ ├── CategoryBrandService.java │ │ │ │ ├── impl │ │ │ │ │ ├── BrandServiceImpl.java │ │ │ │ │ ├── SpuAttributeServiceImpl.java │ │ │ │ │ └── CategoryBrandServiceImpl.java │ │ │ │ ├── AttributeService.java │ │ │ │ └── CategoryService.java │ │ │ │ ├── mapper │ │ │ │ ├── PmsBrandMapper.java │ │ │ │ ├── PmsCategoryMapper.java │ │ │ │ ├── PmsSpuAttributeMapper.java │ │ │ │ ├── PmsCategoryBrandMapper.java │ │ │ │ ├── PmsCategoryAttributeMapper.java │ │ │ │ ├── PmsSkuMapper.java │ │ │ │ └── PmsSpuMapper.java │ │ │ │ ├── model │ │ │ │ ├── form │ │ │ │ │ ├── PmsSpuAttributeForm.java │ │ │ │ │ ├── PmsSpuForm.java │ │ │ │ │ └── PmsCategoryAttributeForm.java │ │ │ │ ├── entity │ │ │ │ │ ├── PmsCategoryBrand.java │ │ │ │ │ ├── PmsBrand.java │ │ │ │ │ ├── PmsCategory.java │ │ │ │ │ ├── PmsCategoryAttribute.java │ │ │ │ │ ├── PmsSpuAttribute.java │ │ │ │ │ └── PmsSku.java │ │ │ │ ├── query │ │ │ │ │ ├── BrandPageQuery.java │ │ │ │ │ └── SpuPageQuery.java │ │ │ │ └── vo │ │ │ │ │ ├── SeckillingSpuVO.java │ │ │ │ │ ├── SpuPageVO.java │ │ │ │ │ ├── PmsSpuPageVO.java │ │ │ │ │ └── PmsSpuDetailVO.java │ │ │ │ ├── constant │ │ │ │ └── ProductConstants.java │ │ │ │ ├── converter │ │ │ │ ├── SkuConverter.java │ │ │ │ ├── SpuAttributeConverter.java │ │ │ │ └── SpuConverter.java │ │ │ │ ├── PmsApplication.java │ │ │ │ └── enums │ │ │ │ └── AttributeTypeEnum.java │ │ └── test │ │ │ └── java │ │ │ └── com │ │ │ └── youlai │ │ │ └── mall │ │ │ └── pms │ │ │ └── controller │ │ │ └── app │ │ │ └── SkuControllerTest.java │ └── Dockerfile ├── pms-api │ └── src │ │ └── main │ │ └── java │ │ └── com │ │ └── youlai │ │ └── mall │ │ └── pms │ │ └── model │ │ ├── vo │ │ ├── ProductHistoryVO.java │ │ └── CategoryVO.java │ │ └── dto │ │ ├── LockSkuDTO.java │ │ ├── SkuInfoDTO.java │ │ └── CheckPriceDTO.java └── pom.xml ├── mall-ums ├── ums-boot │ ├── src │ │ └── main │ │ │ ├── resources │ │ │ ├── bootstrap.yml │ │ │ ├── bootstrap-dev.yml │ │ │ └── bootstrap-prod.yml │ │ │ └── java │ │ │ └── com │ │ │ └── youlai │ │ │ └── mall │ │ │ └── ums │ │ │ ├── UmsApplication.java │ │ │ ├── convert │ │ │ ├── AddressConvert.java │ │ │ └── MemberConvert.java │ │ │ ├── mapper │ │ │ └── UmsAddressMapper.java │ │ │ ├── model │ │ │ └── vo │ │ │ │ └── MemberVO.java │ │ │ └── service │ │ │ └── UmsAddressService.java │ └── Dockerfile ├── ums-api │ └── src │ │ └── main │ │ └── java │ │ └── com │ │ └── youlai │ │ └── mall │ │ └── ums │ │ └── dto │ │ ├── MemberInfoDTO.java │ │ ├── ResultPayDTO.java │ │ ├── MemberAuthDTO.java │ │ ├── MemberAddressDTO.java │ │ ├── MemberRegisterDto.java │ │ └── RechargeDTO.java └── pom.xml ├── youlai-gateway ├── src │ └── main │ │ ├── resources │ │ ├── bootstrap.yml │ │ ├── bootstrap-dev.yml │ │ └── bootstrap-prod.yml │ │ └── java │ │ └── com │ │ └── youlai │ │ └── gateway │ │ └── GatewayApplication.java └── Dockerfile ├── mall-sms ├── sms-boot │ ├── src │ │ ├── main │ │ │ ├── resources │ │ │ │ ├── bootstrap.yml │ │ │ │ ├── mapper │ │ │ │ │ ├── SmsCouponSpuCategoryMapper.xml │ │ │ │ │ ├── SmsCouponMapper.xml │ │ │ │ │ ├── SmsAdvertMapper.xml │ │ │ │ │ └── SmsCouponSpuMapper.xml │ │ │ │ ├── bootstrap-prod.yml │ │ │ │ └── bootstrap-dev.yml │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── youlai │ │ │ │ └── mall │ │ │ │ └── sms │ │ │ │ ├── service │ │ │ │ ├── SmsCouponSpuService.java │ │ │ │ ├── SmsCouponHistoryService.java │ │ │ │ ├── SmsCouponSpuCategoryService.java │ │ │ │ ├── impl │ │ │ │ │ ├── SmsCouponSpuServiceImpl.java │ │ │ │ │ ├── SmsCouponHistoryServiceImpl.java │ │ │ │ │ └── SmsCouponSpuCategoryServiceImpl.java │ │ │ │ └── SmsAdvertService.java │ │ │ │ ├── mapper │ │ │ │ ├── SmsCouponHistoryMapper.java │ │ │ │ ├── SmsCouponSpuMapper.java │ │ │ │ ├── SmsCouponSpuCategoryMapper.java │ │ │ │ ├── SmsCouponMapper.java │ │ │ │ └── SmsAdvertMapper.java │ │ │ │ ├── model │ │ │ │ ├── vo │ │ │ │ │ ├── BannerVO.java │ │ │ │ │ ├── CouponPageVO.java │ │ │ │ │ └── AdvertPageVO.java │ │ │ │ ├── query │ │ │ │ │ ├── AdvertPageQuery.java │ │ │ │ │ └── CouponPageQuery.java │ │ │ │ └── entity │ │ │ │ │ ├── SmsCouponSpuCategory.java │ │ │ │ │ ├── SmsAdvert.java │ │ │ │ │ └── SmsCouponSpu.java │ │ │ │ ├── enums │ │ │ │ ├── PlatformEnum.java │ │ │ │ ├── CouponFaceValueTypeEnum.java │ │ │ │ ├── CouponTypeEnum.java │ │ │ │ ├── ValidityPeriodTypeEnum.java │ │ │ │ └── CouponApplicationScopeEnum.java │ │ │ │ ├── SmsApplication.java │ │ │ │ ├── converter │ │ │ │ └── AdvertConverter.java │ │ │ │ └── controller │ │ │ │ └── app │ │ │ │ └── AdvertController.java │ │ └── test │ │ │ └── java │ │ │ └── com │ │ │ └── youlai │ │ │ └── mall │ │ │ └── sms │ │ │ └── SmsApplicationTest.java │ └── Dockerfile ├── pom.xml └── sms-api │ └── src │ └── main │ └── java │ └── com │ └── youlai │ └── mall │ └── sms │ └── api │ └── app │ └── CouponRecordFeignClient.java ├── youlai-system ├── system-boot │ ├── src │ │ └── main │ │ │ ├── resources │ │ │ ├── bootstrap.yml │ │ │ ├── excel-templates │ │ │ │ └── 用户导入模板.xlsx │ │ │ ├── mapper │ │ │ │ ├── SysDeptMapper.xml │ │ │ │ ├── SysDictMapper.xml │ │ │ │ ├── SysRoleMapper.xml │ │ │ │ ├── SysUserRoleMapper.xml │ │ │ │ └── SysDictTypeMapper.xml │ │ │ ├── bootstrap-dev.yml │ │ │ └── bootstrap-prod.yml │ │ │ └── java │ │ │ └── com │ │ │ └── youlai │ │ │ └── system │ │ │ ├── mapper │ │ │ ├── SysDictMapper.java │ │ │ ├── SysDictTypeMapper.java │ │ │ ├── SysRoleMapper.java │ │ │ ├── SysMenuMapper.java │ │ │ ├── SysUserRoleMapper.java │ │ │ ├── SysDeptMapper.java │ │ │ └── SysRoleMenuMapper.java │ │ │ ├── model │ │ │ ├── vo │ │ │ │ ├── FileInfoVO.java │ │ │ │ ├── DictPageVO.java │ │ │ │ ├── DictTypePageVO.java │ │ │ │ ├── UserImportVO.java │ │ │ │ ├── UserInfoVO.java │ │ │ │ ├── RolePageVO.java │ │ │ │ ├── UserProfileVO.java │ │ │ │ ├── DeptVO.java │ │ │ │ └── UserExportVO.java │ │ │ ├── query │ │ │ │ ├── DictTypePageQuery.java │ │ │ │ ├── RolePageQuery.java │ │ │ │ ├── DictPageQuery.java │ │ │ │ ├── DeptQuery.java │ │ │ │ ├── MenuQuery.java │ │ │ │ ├── PermPageQuery.java │ │ │ │ └── UserPageQuery.java │ │ │ ├── bo │ │ │ │ ├── RolePermsBO.java │ │ │ │ ├── UserFormBO.java │ │ │ │ └── UserProfileBO.java │ │ │ ├── entity │ │ │ │ ├── SysRoleMenu.java │ │ │ │ ├── SysUserRole.java │ │ │ │ ├── SysDictType.java │ │ │ │ ├── SysDept.java │ │ │ │ └── SysRole.java │ │ │ └── form │ │ │ │ ├── DictTypeForm.java │ │ │ │ ├── DeptForm.java │ │ │ │ ├── DictForm.java │ │ │ │ ├── RoleForm.java │ │ │ │ └── UserRegisterForm.java │ │ │ ├── listener │ │ │ ├── excel │ │ │ │ └── MyAnalysisEventListener.java │ │ │ └── rabbitmq │ │ │ │ └── CanalListener.java │ │ │ ├── SystemApplication.java │ │ │ ├── converter │ │ │ ├── DeptConverter.java │ │ │ ├── MenuConverter.java │ │ │ ├── DictTypeConverter.java │ │ │ ├── DictConverter.java │ │ │ └── RoleConverter.java │ │ │ ├── service │ │ │ ├── OssService.java │ │ │ ├── SysUserRoleService.java │ │ │ └── SysRoleMenuService.java │ │ │ ├── config │ │ │ └── PasswordEncoderConfig.java │ │ │ ├── enums │ │ │ └── MenuTypeEnum.java │ │ │ └── handler │ │ │ └── UserBlockHandler.java │ └── Dockerfile ├── system-api │ └── src │ │ └── main │ │ ├── resources │ │ └── META-INF │ │ │ └── spring.factories │ │ └── java │ │ └── com │ │ └── youlai │ │ └── system │ │ └── api │ │ ├── fallback │ │ └── UserFeignFallbackClient.java │ │ └── UserFeignClient.java └── pom.xml ├── youlai-common ├── common-apidoc │ ├── src │ │ └── main │ │ │ └── resources │ │ │ └── META-INF │ │ │ └── spring │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ └── pom.xml ├── common-rabbitmq │ ├── src │ │ └── main │ │ │ ├── resources │ │ │ └── META-INF │ │ │ │ └── spring │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ └── java │ │ │ └── com │ │ │ └── youlai │ │ │ └── common │ │ │ └── rabbitmq │ │ │ └── config │ │ │ └── RabbitConfig.java │ └── pom.xml ├── common-mybatis │ └── src │ │ └── main │ │ ├── resources │ │ └── META-INF │ │ │ └── spring │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── java │ │ └── com │ │ └── youlai │ │ └── common │ │ └── mybatis │ │ ├── enums │ │ └── DataScopeEnum.java │ │ ├── handler │ │ ├── StringArrayJsonTypeHandler.java │ │ ├── LongArrayJsonTypeHandler.java │ │ └── IntegerArrayJsonTypeHandler.java │ │ └── annotation │ │ └── DataPermission.java ├── common-sms │ └── src │ │ └── main │ │ ├── resources │ │ └── META-INF │ │ │ └── spring │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── java │ │ └── com │ │ └── youlai │ │ └── common │ │ └── sms │ │ ├── service │ │ └── SmsService.java │ │ └── property │ │ └── AliyunSmsProperties.java ├── common-redis │ └── src │ │ └── main │ │ └── resources │ │ └── META-INF │ │ └── spring │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports ├── common-web │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── youlai │ │ │ └── common │ │ │ └── web │ │ │ ├── constraint │ │ │ ├── CityType.java │ │ │ ├── CityEntity.java │ │ │ └── CheckCityValid.java │ │ │ ├── annotation │ │ │ └── PreventDuplicateResubmit.java │ │ │ ├── exception │ │ │ └── BizException.java │ │ │ ├── config │ │ │ ├── FeignDecoderConfig.java │ │ │ └── RestTemplateConfig.java │ │ │ └── model │ │ │ └── Option.java │ │ └── resources │ │ ├── META-INF │ │ └── spring │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── ValidationMessages.properties ├── common-core │ ├── src │ │ └── main │ │ │ └── java │ │ │ └── com │ │ │ └── youlai │ │ │ └── common │ │ │ ├── result │ │ │ ├── IResultCode.java │ │ │ └── PageResult.java │ │ │ ├── constant │ │ │ ├── MemberConstants.java │ │ │ ├── GlobalConstants.java │ │ │ ├── SystemConstants.java │ │ │ ├── ProductConstants.java │ │ │ ├── OrderConstants.java │ │ │ ├── JwtClaimConstants.java │ │ │ └── RedisConstants.java │ │ │ ├── base │ │ │ ├── BaseVO.java │ │ │ ├── BasePageQuery.java │ │ │ └── BaseEntity.java │ │ │ └── enums │ │ │ ├── StatusEnum.java │ │ │ └── GenderEnum.java │ └── pom.xml ├── common-security │ └── src │ │ └── main │ │ └── resources │ │ └── META-INF │ │ └── spring │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports └── pom.xml ├── .gitee ├── PULL_REQUEST_TEMPLATE.zh-CN.md └── ISSUE_TEMPLATE.zh-CN.md └── .gitignore /docs/nacos/nacos_config.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youlaitech/youlai-mall/HEAD/docs/nacos/nacos_config.zip -------------------------------------------------------------------------------- /docs/docker/seata/config/META-INF/services/io.seata.core.rpc.RegisterCheckAuthHandler: -------------------------------------------------------------------------------- 1 | io.seata.server.auth.DefaultCheckAuthHandler -------------------------------------------------------------------------------- /youlai-auth/src/main/resources/bootstrap.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | application: 3 | name: youlai-auth 4 | profiles: 5 | active: dev 6 | -------------------------------------------------------------------------------- /mall-oms/oms-boot/src/main/resources/bootstrap.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | application: 3 | name: mall-oms 4 | profiles: 5 | active: dev 6 | -------------------------------------------------------------------------------- /mall-pms/pms-boot/src/main/resources/bootstrap.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | application: 3 | name: mall-pms 4 | profiles: 5 | active: dev 6 | -------------------------------------------------------------------------------- /mall-ums/ums-boot/src/main/resources/bootstrap.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | application: 3 | name: mall-ums 4 | profiles: 5 | active: dev 6 | -------------------------------------------------------------------------------- /youlai-gateway/src/main/resources/bootstrap.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | application: 3 | name: youlai-gateway 4 | profiles: 5 | active: dev 6 | -------------------------------------------------------------------------------- /mall-sms/sms-boot/src/main/resources/bootstrap.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | application: 3 | name: mall-sms 4 | profiles: 5 | active: dev 6 | 7 | -------------------------------------------------------------------------------- /youlai-system/system-boot/src/main/resources/bootstrap.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | application: 3 | name: youlai-system 4 | profiles: 5 | active: dev 6 | -------------------------------------------------------------------------------- /youlai-common/common-apidoc/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports: -------------------------------------------------------------------------------- 1 | com.youlai.common.apidoc.OpenApiConfig 2 | -------------------------------------------------------------------------------- /.gitee/PULL_REQUEST_TEMPLATE.zh-CN.md: -------------------------------------------------------------------------------- 1 | ### 相关的Issue 2 | 3 | 4 | ### 原因(目的、解决的问题等) 5 | 6 | 7 | ### 描述(做了什么,变更了什么) 8 | 9 | 10 | ### 测试用例(新增、改动、可能影响的功能) 11 | 12 | -------------------------------------------------------------------------------- /youlai-common/common-rabbitmq/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports: -------------------------------------------------------------------------------- 1 | com.youlai.common.rabbitmq.config.RabbitConfig -------------------------------------------------------------------------------- /docs/docker/seata/config/META-INF/services/io.seata.core.store.DistributedLocker: -------------------------------------------------------------------------------- 1 | io.seata.server.storage.redis.lock.RedisDistributedLocker 2 | io.seata.server.storage.db.lock.DataBaseDistributedLocker -------------------------------------------------------------------------------- /youlai-system/system-api/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 2 | com.youlai.system.api.fallback.UserFeignFallbackClient 3 | -------------------------------------------------------------------------------- /youlai-system/system-boot/src/main/resources/excel-templates/用户导入模板.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youlaitech/youlai-mall/HEAD/youlai-system/system-boot/src/main/resources/excel-templates/用户导入模板.xlsx -------------------------------------------------------------------------------- /docs/docker/seata/config/META-INF/services/io.seata.core.store.db.DataSourceProvider: -------------------------------------------------------------------------------- 1 | io.seata.server.store.DbcpDataSourceProvider 2 | io.seata.server.store.DruidDataSourceProvider 3 | io.seata.server.store.HikariDataSourceProvider -------------------------------------------------------------------------------- /docs/docker/seata/config/META-INF/services/io.seata.server.lock.LockManager: -------------------------------------------------------------------------------- 1 | io.seata.server.storage.db.lock.DataBaseLockManager 2 | io.seata.server.storage.file.lock.FileLockManager 3 | io.seata.server.storage.redis.lock.RedisLockManager -------------------------------------------------------------------------------- /youlai-common/common-mybatis/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports: -------------------------------------------------------------------------------- 1 | com.youlai.common.mybatis.config.MybatisPlusConfig 2 | com.youlai.common.mybatis.handler.MyMetaObjectHandler -------------------------------------------------------------------------------- /youlai-common/common-sms/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports: -------------------------------------------------------------------------------- 1 | com.youlai.common.sms.property.AliyunSmsProperties 2 | com.youlai.common.sms.service.impl.AliyunSmsService 3 | -------------------------------------------------------------------------------- /docs/docker/run.md: -------------------------------------------------------------------------------- 1 | 2 | # MySQL 3 | 4 | ## 安装 5 | 6 | ```bash 7 | docker-compose -f docker-compose.yml -p youlai-mall up -d 8 | ``` 9 | ## 卸载 10 | ```bash 11 | docker-compose -f docker-compose.yml -p youlai-mall down 12 | ``` 13 | 14 | -------------------------------------------------------------------------------- /docs/docker/seata/config/META-INF/services/io.seata.server.coordinator.AbstractCore: -------------------------------------------------------------------------------- 1 | io.seata.server.transaction.at.ATCore 2 | io.seata.server.transaction.tcc.TccCore 3 | io.seata.server.transaction.saga.SagaCore 4 | io.seata.server.transaction.xa.XACore -------------------------------------------------------------------------------- /youlai-common/common-redis/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports: -------------------------------------------------------------------------------- 1 | com.youlai.common.redis.RedisCacheConfig 2 | com.youlai.common.redis.RedisConfig 3 | com.youlai.common.redis.BusinessSnGenerator -------------------------------------------------------------------------------- /docs/docker/seata/config/META-INF/services/io.seata.server.session.SessionManager: -------------------------------------------------------------------------------- 1 | io.seata.server.storage.file.session.FileSessionManager 2 | io.seata.server.storage.db.session.DataBaseSessionManager 3 | io.seata.server.storage.redis.session.RedisSessionManager -------------------------------------------------------------------------------- /youlai-common/common-web/src/main/java/com/youlai/common/web/constraint/CityType.java: -------------------------------------------------------------------------------- 1 | package com.youlai.common.web.constraint; 2 | 3 | /** 4 | * @author Gadfly 5 | * @since 2021-08-06 16:02 6 | */ 7 | public enum CityType { 8 | PROVINCE,CITY,AREA 9 | } 10 | -------------------------------------------------------------------------------- /docs/docker/seata/config/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | org.springframework.context.ApplicationListener=\ 2 | io.seata.server.spring.listener.ServerApplicationListener 3 | org.springframework.context.ApplicationContextInitializer=\ 4 | io.seata.server.spring.listener.SeataPropertiesLoader -------------------------------------------------------------------------------- /youlai-common/common-core/src/main/java/com/youlai/common/result/IResultCode.java: -------------------------------------------------------------------------------- 1 | package com.youlai.common.result; 2 | 3 | /** 4 | * @author haoxr 5 | **/ 6 | public interface IResultCode { 7 | 8 | String getCode(); 9 | 10 | String getMsg(); 11 | 12 | } 13 | -------------------------------------------------------------------------------- /youlai-auth/src/main/java/com/youlai/auth/model/LoginUserInfo.java: -------------------------------------------------------------------------------- 1 | package com.youlai.auth.model; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * @author haoxr 7 | * @since 2024/1/30 8 | */ 9 | @Data 10 | public class LoginUserInfo { 11 | 12 | private Long id; 13 | 14 | } 15 | -------------------------------------------------------------------------------- /mall-pms/pms-boot/src/main/java/com/youlai/mall/pms/service/BrandService.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.pms.service; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.youlai.mall.pms.model.entity.PmsBrand; 5 | 6 | public interface BrandService extends IService { 7 | 8 | } 9 | -------------------------------------------------------------------------------- /youlai-common/common-core/src/main/java/com/youlai/common/constant/MemberConstants.java: -------------------------------------------------------------------------------- 1 | package com.youlai.common.constant; 2 | 3 | /** 4 | * @author Gadfly 5 | * @since 2021-08-10 12:12 6 | */ 7 | public interface MemberConstants { 8 | String USER_PRODUCT_HISTORY = "user:product:history:"; 9 | } 10 | -------------------------------------------------------------------------------- /youlai-system/system-boot/src/main/resources/mapper/SysDeptMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /youlai-system/system-boot/src/main/resources/mapper/SysDictMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /youlai-common/common-web/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports: -------------------------------------------------------------------------------- 1 | com.youlai.common.web.config.WebMvcConfig 2 | com.youlai.common.web.config.FeignConfig 3 | com.youlai.common.web.exception.GlobalExceptionHandler 4 | com.youlai.common.web.aspect.DuplicateSubmitAspect 5 | -------------------------------------------------------------------------------- /mall-sms/sms-boot/src/main/resources/mapper/SmsCouponSpuCategoryMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /youlai-common/common-core/src/main/java/com/youlai/common/constant/GlobalConstants.java: -------------------------------------------------------------------------------- 1 | package com.youlai.common.constant; 2 | 3 | /** 4 | * 全局常量 5 | * 6 | * @author haoxr 7 | * @since 2021/10/30 9:32 8 | */ 9 | public interface GlobalConstants { 10 | 11 | /** 12 | * 全局状态-是 13 | */ 14 | Integer STATUS_YES = 1; 15 | } 16 | -------------------------------------------------------------------------------- /youlai-auth/src/main/java/com/youlai/auth/enums/CaptchaCodeTypeEnum.java: -------------------------------------------------------------------------------- 1 | package com.youlai.auth.enums; 2 | 3 | import com.youlai.common.base.IBaseEnum; 4 | import lombok.Getter; 5 | 6 | /** 7 | * 验证码字符类型枚举 8 | * 9 | * @author haoxr 10 | * @since 3.1.0 11 | */ 12 | public enum CaptchaCodeTypeEnum { 13 | 14 | MATH, 15 | RANDOM; 16 | } 17 | -------------------------------------------------------------------------------- /mall-pms/pms-boot/src/main/java/com/youlai/mall/pms/service/SpuAttributeService.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.pms.service; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.youlai.mall.pms.model.entity.PmsSpuAttribute; 5 | 6 | 7 | public interface SpuAttributeService extends IService { 8 | 9 | 10 | } 11 | -------------------------------------------------------------------------------- /youlai-common/common-security/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports: -------------------------------------------------------------------------------- 1 | com.youlai.common.security.service.PermissionService 2 | com.youlai.common.security.config.ResourceServerConfig 3 | com.youlai.common.security.exception.MyAccessDeniedHandler 4 | com.youlai.common.security.exception.MyAuthenticationEntryPoint -------------------------------------------------------------------------------- /mall-sms/sms-boot/src/main/java/com/youlai/mall/sms/service/SmsCouponSpuService.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.sms.service; 2 | 3 | import com.youlai.mall.sms.model.entity.SmsCouponSpu; 4 | import com.baomidou.mybatisplus.extension.service.IService; 5 | 6 | /** 7 | * 8 | */ 9 | public interface SmsCouponSpuService extends IService { 10 | 11 | } 12 | -------------------------------------------------------------------------------- /youlai-common/common-web/src/main/java/com/youlai/common/web/constraint/CityEntity.java: -------------------------------------------------------------------------------- 1 | package com.youlai.common.web.constraint; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * @author Gadfly 7 | * @since 2021-08-06 16:46 8 | */ 9 | @Data 10 | public class CityEntity { 11 | private String value; 12 | private String name; 13 | private String parent; 14 | } 15 | -------------------------------------------------------------------------------- /mall-pms/pms-boot/src/main/java/com/youlai/mall/pms/mapper/PmsBrandMapper.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.pms.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.youlai.mall.pms.model.entity.PmsBrand; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | @Mapper 8 | public interface PmsBrandMapper extends BaseMapper { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /mall-sms/sms-boot/src/main/java/com/youlai/mall/sms/service/SmsCouponHistoryService.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.sms.service; 2 | 3 | import com.youlai.mall.sms.model.entity.SmsCouponHistory; 4 | import com.baomidou.mybatisplus.extension.service.IService; 5 | 6 | /** 7 | * 8 | */ 9 | public interface SmsCouponHistoryService extends IService { 10 | 11 | } 12 | -------------------------------------------------------------------------------- /mall-pms/pms-boot/src/main/java/com/youlai/mall/pms/mapper/PmsCategoryMapper.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.pms.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.youlai.mall.pms.model.entity.PmsCategory; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | @Mapper 8 | public interface PmsCategoryMapper extends BaseMapper { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /mall-sms/sms-boot/src/main/java/com/youlai/mall/sms/service/SmsCouponSpuCategoryService.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.sms.service; 2 | 3 | import com.youlai.mall.sms.model.entity.SmsCouponSpuCategory; 4 | import com.baomidou.mybatisplus.extension.service.IService; 5 | 6 | /** 7 | * 8 | */ 9 | public interface SmsCouponSpuCategoryService extends IService { 10 | 11 | } 12 | -------------------------------------------------------------------------------- /youlai-system/system-boot/src/main/java/com/youlai/system/mapper/SysDictMapper.java: -------------------------------------------------------------------------------- 1 | package com.youlai.system.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.youlai.system.model.entity.SysDict; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | @Mapper 8 | public interface SysDictMapper extends BaseMapper { 9 | 10 | } 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /mall-pms/pms-boot/src/main/java/com/youlai/mall/pms/mapper/PmsSpuAttributeMapper.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.pms.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.youlai.mall.pms.model.entity.PmsSpuAttribute; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | @Mapper 8 | public interface PmsSpuAttributeMapper extends BaseMapper { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /mall-pms/pms-boot/src/main/java/com/youlai/mall/pms/model/form/PmsSpuAttributeForm.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.pms.model.form; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class PmsSpuAttributeForm { 7 | 8 | private String id; 9 | 10 | private Long attributeId; 11 | 12 | private String name; 13 | 14 | private String value; 15 | 16 | private String picUrl; 17 | 18 | } 19 | -------------------------------------------------------------------------------- /mall-ums/ums-api/src/main/java/com/youlai/mall/ums/dto/MemberInfoDTO.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.ums.dto; 2 | 3 | import lombok.Data; 4 | 5 | 6 | /** 7 | * 会员传输层对象 8 | * 9 | * @author haoxr 10 | * @since 2022/2/12 11 | */ 12 | @Data 13 | public class MemberInfoDTO { 14 | 15 | private String nickName; 16 | 17 | private String avatarUrl; 18 | 19 | private Long balance; 20 | 21 | } 22 | -------------------------------------------------------------------------------- /mall-pms/pms-boot/src/main/java/com/youlai/mall/pms/mapper/PmsCategoryBrandMapper.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.pms.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.youlai.mall.pms.model.entity.PmsCategoryBrand; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | @Mapper 8 | public interface PmsCategoryBrandMapper extends BaseMapper { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/model/vo/WxPayResponseVO.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.oms.model.vo; 2 | 3 | import lombok.Data; 4 | import lombok.experimental.Accessors; 5 | 6 | /** 7 | * @author Gadfly 8 | * @since 2021-06-04 15:18 9 | */ 10 | @Data 11 | @Accessors(chain = true) 12 | public class WxPayResponseVO { 13 | private String code; 14 | 15 | private String message; 16 | } 17 | -------------------------------------------------------------------------------- /youlai-system/system-boot/src/main/java/com/youlai/system/mapper/SysDictTypeMapper.java: -------------------------------------------------------------------------------- 1 | package com.youlai.system.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.youlai.system.model.entity.SysDictType; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | @Mapper 8 | public interface SysDictTypeMapper extends BaseMapper { 9 | 10 | } 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /.gitee/ISSUE_TEMPLATE.zh-CN.md: -------------------------------------------------------------------------------- 1 | 2 | ### ISSUE 提交前,请确认以下事项 3 | 4 | - [x] 已在 [issue](https://gitee.com/youlaitech/youlai-mall/issues) 中搜索过,没有发现相同问题 5 | 6 | ### 版本号 (必填) 7 | 8 | youlai-mall 版本号: v3.0.0 9 | 10 | 🚨 请务必填写版本号,否则我们无法定位问题所在版本,有涉及前端的请填写 mall-admin 版本号,有涉及移动端请填写 mall-app 版本号 。 11 | 12 | mall-admin 版本号: 13 | 14 | mall-app 版本号: 15 | 16 | ### 问题描述 (必填) 17 | 18 | 19 | ### 报错截图 (可选) 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /mall-pms/pms-boot/src/main/java/com/youlai/mall/pms/mapper/PmsCategoryAttributeMapper.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.pms.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.youlai.mall.pms.model.entity.PmsCategoryAttribute; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | @Mapper 8 | public interface PmsCategoryAttributeMapper extends BaseMapper { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /mall-pms/pms-boot/src/main/java/com/youlai/mall/pms/service/CategoryBrandService.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.pms.service; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.youlai.mall.pms.model.entity.PmsCategoryBrand; 5 | 6 | 7 | /** 8 | * @author haoxr 9 | */ 10 | public interface CategoryBrandService extends IService { 11 | 12 | } 13 | -------------------------------------------------------------------------------- /mall-sms/sms-boot/src/main/java/com/youlai/mall/sms/mapper/SmsCouponHistoryMapper.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.sms.mapper; 2 | 3 | import com.youlai.mall.sms.model.entity.SmsCouponHistory; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | 8 | @Mapper 9 | public interface SmsCouponHistoryMapper extends BaseMapper { 10 | 11 | } 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /mall-sms/sms-boot/src/test/java/com/youlai/mall/sms/SmsApplicationTest.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.sms; 2 | 3 | import org.junit.jupiter.api.Test; 4 | import org.springframework.boot.test.context.SpringBootTest; 5 | 6 | /** 7 | * @author xinyi 8 | * @desc: 营销系统测试 9 | * @since 2021/7/3 10 | */ 11 | @SpringBootTest 12 | public class SmsApplicationTest { 13 | 14 | @Test 15 | public void contestLoad(){ 16 | 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /youlai-system/system-boot/src/main/java/com/youlai/system/model/vo/FileInfoVO.java: -------------------------------------------------------------------------------- 1 | package com.youlai.system.model.vo; 2 | 3 | import io.swagger.v3.oas.annotations.media.Schema; 4 | import lombok.Data; 5 | 6 | @Schema(description = "文件对象") 7 | @Data 8 | public class FileInfoVO { 9 | 10 | @Schema(description = "文件名称") 11 | private String name; 12 | 13 | @Schema(description = "文件URL") 14 | private String url; 15 | 16 | } 17 | -------------------------------------------------------------------------------- /mall-pms/pms-boot/src/test/java/com/youlai/mall/pms/controller/app/SkuControllerTest.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.pms.controller.app; 2 | 3 | import org.junit.jupiter.api.Test; 4 | 5 | import static org.junit.jupiter.api.Assertions.*; 6 | 7 | class SkuControllerTest { 8 | 9 | @Test 10 | void lockStock() { 11 | } 12 | 13 | @Test 14 | void unlockStock() { 15 | } 16 | 17 | @Test 18 | void deductStock() { 19 | } 20 | } -------------------------------------------------------------------------------- /youlai-common/common-core/src/main/java/com/youlai/common/base/BaseVO.java: -------------------------------------------------------------------------------- 1 | package com.youlai.common.base; 2 | 3 | import lombok.Data; 4 | import lombok.ToString; 5 | 6 | import java.io.Serializable; 7 | 8 | /** 9 | * @author huawei 10 | * @desc VO 基类 11 | * @email huawei_code@163.com 12 | * @since 2021/1/11 13 | */ 14 | @Data 15 | @ToString 16 | public class BaseVO implements Serializable { 17 | 18 | private static final long serialVersionUID = 1L; 19 | } 20 | -------------------------------------------------------------------------------- /youlai-system/system-boot/src/main/java/com/youlai/system/listener/excel/MyAnalysisEventListener.java: -------------------------------------------------------------------------------- 1 | package com.youlai.system.listener.excel; 2 | 3 | import com.alibaba.excel.event.AnalysisEventListener; 4 | 5 | /** 6 | * 自定义解析结果监听器 7 | * 8 | * @author: haoxr 9 | * @date: 2023/03/01 10 | */ 11 | public abstract class MyAnalysisEventListener extends AnalysisEventListener { 12 | 13 | private String msg; 14 | public abstract String getMsg(); 15 | } 16 | -------------------------------------------------------------------------------- /mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/mapper/OrderItemMapper.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.oms.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.youlai.mall.oms.model.entity.OmsOrderItem; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | /** 8 | * 订单商品明细表 9 | * 10 | * @author huawei 11 | * @since 2020-12-30 12 | */ 13 | @Mapper 14 | public interface OrderItemMapper extends BaseMapper { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/app/OrderSettingService.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.oms.service.app; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.youlai.mall.oms.model.entity.OmsOrderSetting; 5 | 6 | /** 7 | * 订单配置信息 8 | * 9 | * @author huawei 10 | * @email huawei_code@163.com 11 | * @date 2020-12-30 22:31:10 12 | */ 13 | public interface OrderSettingService extends IService { 14 | } 15 | 16 | -------------------------------------------------------------------------------- /youlai-gateway/src/main/resources/bootstrap-dev.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 9999 3 | 4 | spring: 5 | main: 6 | allow-bean-definition-overriding: true 7 | cloud: 8 | nacos: 9 | # 注册中心 10 | discovery: 11 | server-addr: http://localhost:8848 12 | # 配置中心 13 | config: 14 | server-addr: http://localhost:8848 15 | file-extension: yaml 16 | shared-configs[0]: 17 | data-id: youlai-common.yaml 18 | refresh: true -------------------------------------------------------------------------------- /youlai-system/system-boot/src/main/java/com/youlai/system/model/query/DictTypePageQuery.java: -------------------------------------------------------------------------------- 1 | package com.youlai.system.model.query; 2 | 3 | 4 | import com.youlai.common.base.BasePageQuery; 5 | import io.swagger.v3.oas.annotations.media.Schema; 6 | import lombok.Data; 7 | 8 | @Schema(description ="字典类型分页查询对象") 9 | @Data 10 | public class DictTypePageQuery extends BasePageQuery { 11 | 12 | @Schema(description="关键字(类型名称/类型编码)") 13 | private String keywords; 14 | 15 | } 16 | -------------------------------------------------------------------------------- /mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/app/OrderDeliveryService.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.oms.service.app; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.youlai.mall.oms.model.entity.OmsOrderDelivery; 5 | 6 | /** 7 | * 订单物流记录表 8 | * 9 | * @author huawei 10 | * @email huawei_code@163.com 11 | * @date 2020-12-30 22:31:10 12 | */ 13 | public interface OrderDeliveryService extends IService { 14 | } 15 | 16 | -------------------------------------------------------------------------------- /youlai-auth/src/main/java/com/youlai/auth/enums/CaptchaTypeEnum.java: -------------------------------------------------------------------------------- 1 | package com.youlai.auth.enums; 2 | 3 | /** 4 | * EasyCaptcha 验证码类型枚举 5 | * 6 | * @author haoxr 7 | * @since 2.5.1 8 | */ 9 | public enum CaptchaTypeEnum { 10 | 11 | /** 12 | * 圆圈干扰验证码 13 | */ 14 | CIRCLE, 15 | /** 16 | * GIF验证码 17 | */ 18 | GIF, 19 | /** 20 | * 干扰线验证码 21 | */ 22 | LINE, 23 | /** 24 | * 扭曲干扰验证码 25 | */ 26 | SHEAR 27 | } 28 | -------------------------------------------------------------------------------- /mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/app/OrderItemService.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.oms.service.app; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.youlai.mall.oms.model.entity.OmsOrderItem; 5 | 6 | 7 | /** 8 | * 订单商品信息表 9 | * 10 | * @author huawei 11 | * @email huawei_code@163.com 12 | * @date 2020-12-30 22:31:10 13 | */ 14 | public interface OrderItemService extends IService { 15 | 16 | 17 | } 18 | 19 | -------------------------------------------------------------------------------- /youlai-system/system-boot/src/main/java/com/youlai/system/model/bo/RolePermsBO.java: -------------------------------------------------------------------------------- 1 | package com.youlai.system.model.bo; 2 | 3 | import lombok.Data; 4 | 5 | import java.util.Set; 6 | 7 | /** 8 | * 角色权限业务对象 9 | * 10 | * @author haoxr 11 | * @since 2023/11/29 12 | */ 13 | @Data 14 | public class RolePermsBO { 15 | 16 | /** 17 | * 角色编码 18 | */ 19 | private String roleCode; 20 | 21 | /** 22 | * 权限标识集合 23 | */ 24 | private Set perms; 25 | 26 | } 27 | -------------------------------------------------------------------------------- /mall-pms/pms-api/src/main/java/com/youlai/mall/pms/model/vo/ProductHistoryVO.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.pms.model.vo; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | 7 | /** 8 | * @author Gadfly 9 | * @since 2021-08-10 15:44 10 | */ 11 | @Data 12 | public class ProductHistoryVO implements Serializable { 13 | private static final long serialVersionUID = 1L; 14 | 15 | private Long id; 16 | 17 | private String name; 18 | 19 | private String picUrl; 20 | } 21 | -------------------------------------------------------------------------------- /youlai-auth/src/main/resources/bootstrap-dev.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 9000 3 | 4 | spring: 5 | mvc: 6 | path-match: 7 | matching-strategy: ant_path_matcher 8 | cloud: 9 | nacos: 10 | # 注册中心 11 | discovery: 12 | server-addr: http://localhost:8848 13 | # 配置中心 14 | config: 15 | server-addr: http://localhost:8848 16 | file-extension: yaml 17 | shared-configs[0]: 18 | data-id: youlai-common.yaml 19 | refresh: true -------------------------------------------------------------------------------- /mall-ums/ums-boot/src/main/resources/bootstrap-dev.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 8801 3 | 4 | spring: 5 | mvc: 6 | path-match: 7 | matching-strategy: ant_path_matcher 8 | cloud: 9 | nacos: 10 | # 注册中心 11 | discovery: 12 | server-addr: http://localhost:8848 13 | # 配置中心 14 | config: 15 | server-addr: http://localhost:8848 16 | file-extension: yaml 17 | shared-configs[0]: 18 | data-id: youlai-common.yaml 19 | refresh: true -------------------------------------------------------------------------------- /mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/model/dto/OrderDTO.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.oms.model.dto; 2 | 3 | import com.youlai.mall.oms.model.entity.OmsOrder; 4 | import com.youlai.mall.oms.model.entity.OmsOrderItem; 5 | import lombok.Data; 6 | import lombok.experimental.Accessors; 7 | 8 | import java.util.List; 9 | 10 | @Data 11 | @Accessors(chain = true) 12 | public class OrderDTO { 13 | 14 | private OmsOrder order; 15 | 16 | private List orderItems; 17 | 18 | } 19 | -------------------------------------------------------------------------------- /mall-sms/sms-boot/src/main/java/com/youlai/mall/sms/mapper/SmsCouponSpuMapper.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.sms.mapper; 2 | 3 | import com.youlai.mall.sms.model.entity.SmsCouponSpu; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | /** 8 | * 优惠券商品关联持久层 9 | * 10 | * @author haoxr 11 | * @since 2022/6/30 12 | */ 13 | @Mapper 14 | public interface SmsCouponSpuMapper extends BaseMapper { 15 | 16 | } 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/mapper/OrderLogMapper.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.oms.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.youlai.mall.oms.model.entity.OmsOrderLog; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | /** 8 | * 订单操作历史记录 9 | * 10 | * @author huawei 11 | * @email huawei_code@163.com 12 | * @date 2020-12-30 22:31:10 13 | */ 14 | @Mapper 15 | public interface OrderLogMapper extends BaseMapper { 16 | 17 | } 18 | -------------------------------------------------------------------------------- /mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/mapper/OrderPayMapper.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.oms.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.youlai.mall.oms.model.entity.OmsOrderPay; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | /** 8 | * 支付信息表 9 | * 10 | * @author huawei 11 | * @email huawei_code@163.com 12 | * @date 2020-12-30 22:31:10 13 | */ 14 | @Mapper 15 | public interface OrderPayMapper extends BaseMapper { 16 | 17 | } 18 | -------------------------------------------------------------------------------- /youlai-auth/src/main/java/com/youlai/auth/model/CaptchaResult.java: -------------------------------------------------------------------------------- 1 | package com.youlai.auth.model; 2 | 3 | import lombok.Builder; 4 | import lombok.Data; 5 | 6 | /** 7 | * 验证码响应对象 8 | * 9 | * @author haoxr 10 | * @since 3.1.0 11 | */ 12 | 13 | @Builder 14 | @Data 15 | public class CaptchaResult { 16 | 17 | /** 18 | * 验证码唯一标识(用于从Redis获取验证码Code) 19 | */ 20 | private String captchaId; 21 | 22 | /** 23 | * 验证码图片Base64字符串 24 | */ 25 | private String captchaBase64; 26 | } 27 | -------------------------------------------------------------------------------- /mall-sms/sms-boot/src/main/java/com/youlai/mall/sms/model/vo/BannerVO.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.sms.model.vo; 2 | 3 | import io.swagger.v3.oas.annotations.media.Schema; 4 | import lombok.Data; 5 | 6 | @Schema(description = "横幅视图对象") 7 | @Data 8 | public class BannerVO { 9 | 10 | @Schema(description="广告标题") 11 | private String title; 12 | 13 | @Schema(description="横幅图片URL") 14 | private String imageUrl; 15 | 16 | @Schema(description="跳转URL") 17 | private String redirectUrl; 18 | 19 | } 20 | -------------------------------------------------------------------------------- /mall-ums/ums-api/src/main/java/com/youlai/mall/ums/dto/ResultPayDTO.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.ums.dto; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class ResultPayDTO { 7 | 8 | private String code; 9 | private String msg; 10 | private String otherinfo; 11 | private String orderId; 12 | private String price; 13 | private String name; 14 | private String thirduid; 15 | private String paytype; 16 | private String remarks; 17 | private String originalprice; 18 | 19 | } 20 | -------------------------------------------------------------------------------- /youlai-system/system-boot/src/main/java/com/youlai/system/model/query/RolePageQuery.java: -------------------------------------------------------------------------------- 1 | package com.youlai.system.model.query; 2 | 3 | import com.youlai.common.base.BasePageQuery; 4 | import io.swagger.v3.oas.annotations.media.Schema; 5 | import lombok.Data; 6 | 7 | /** 8 | * 角色分页查询实体 9 | * 10 | * @author haoxr 11 | * @since 2022/6/3 12 | * 13 | */ 14 | @Data 15 | public class RolePageQuery extends BasePageQuery { 16 | 17 | @Schema(description="关键字(角色名称/角色编码)") 18 | private String keywords; 19 | } 20 | -------------------------------------------------------------------------------- /mall-pms/pms-boot/src/main/java/com/youlai/mall/pms/model/entity/PmsCategoryBrand.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.pms.model.entity; 2 | 3 | import com.youlai.common.base.BaseEntity; 4 | import lombok.Data; 5 | 6 | /** 7 | * 分类品牌 8 | * 9 | * @author haoxr 10 | * @since 2022/7/2 11 | */ 12 | @Data 13 | public class PmsCategoryBrand extends BaseEntity { 14 | /** 15 | * 分类ID 16 | */ 17 | private Long categoryId; 18 | 19 | /** 20 | * 品牌ID 21 | */ 22 | private Long brandId; 23 | 24 | } 25 | -------------------------------------------------------------------------------- /mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/mapper/OrderSettingMapper.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.oms.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.youlai.mall.oms.model.entity.OmsOrderSetting; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | /** 8 | * 订单配置信息 9 | * 10 | * @author huawei 11 | * @email huawei_code@163.com 12 | * @date 2020-12-30 22:31:10 13 | */ 14 | @Mapper 15 | public interface OrderSettingMapper extends BaseMapper { 16 | 17 | } 18 | -------------------------------------------------------------------------------- /mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/mapper/OrderDeliveryMapper.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.oms.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.youlai.mall.oms.model.entity.OmsOrderDelivery; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | /** 8 | * 订单物流记录表 9 | * 10 | * @author huawei 11 | * @email huawei_code@163.com 12 | * @date 2020-12-30 22:31:10 13 | */ 14 | @Mapper 15 | public interface OrderDeliveryMapper extends BaseMapper { 16 | 17 | } 18 | -------------------------------------------------------------------------------- /youlai-common/common-core/src/main/java/com/youlai/common/constant/SystemConstants.java: -------------------------------------------------------------------------------- 1 | package com.youlai.common.constant; 2 | 3 | /** 4 | * 系统常量 5 | * 6 | * @author haoxr 7 | * @since 2021/10/30 8 | */ 9 | public interface SystemConstants { 10 | 11 | /** 12 | * 根部门ID 13 | */ 14 | Long ROOT_NODE_ID = 0L; 15 | 16 | 17 | /** 18 | * 系统默认密码 19 | */ 20 | String DEFAULT_PASSWORD = "123456"; 21 | 22 | /** 23 | * 超级管理员角色编码 24 | */ 25 | String ROOT_ROLE_CODE = "ROOT"; 26 | } 27 | -------------------------------------------------------------------------------- /mall-sms/sms-boot/src/main/java/com/youlai/mall/sms/mapper/SmsCouponSpuCategoryMapper.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.sms.mapper; 2 | 3 | import com.youlai.mall.sms.model.entity.SmsCouponSpuCategory; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | /** 8 | * 优惠券商品分类关联持久层 9 | * 10 | * @author haoxr 11 | * @since 2022/6/30 12 | */ 13 | @Mapper 14 | public interface SmsCouponSpuCategoryMapper extends BaseMapper { 15 | 16 | } 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /youlai-gateway/src/main/java/com/youlai/gateway/GatewayApplication.java: -------------------------------------------------------------------------------- 1 | package com.youlai.gateway; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 6 | 7 | @SpringBootApplication 8 | @EnableDiscoveryClient 9 | public class GatewayApplication { 10 | public static void main(String[] args) { 11 | SpringApplication.run(GatewayApplication.class, args); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /mall-pms/pms-boot/src/main/java/com/youlai/mall/pms/model/query/BrandPageQuery.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.pms.model.query; 2 | 3 | import com.youlai.common.base.BasePageQuery; 4 | import io.swagger.v3.oas.annotations.media.Schema; 5 | import lombok.Data; 6 | 7 | /** 8 | * 品牌分页列表查询对象 9 | * 10 | * @author haoxr 11 | * @since 2021/7/11 12 | */ 13 | @Schema(description = "品牌分页查询对象") 14 | @Data 15 | public class BrandPageQuery extends BasePageQuery { 16 | 17 | @Schema(description="关键字") 18 | private String keywords; 19 | 20 | } 21 | -------------------------------------------------------------------------------- /mall-pms/pms-boot/src/main/java/com/youlai/mall/pms/service/impl/BrandServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.pms.service.impl; 2 | 3 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 4 | import com.youlai.mall.pms.mapper.PmsBrandMapper; 5 | import com.youlai.mall.pms.model.entity.PmsBrand; 6 | import com.youlai.mall.pms.service.BrandService; 7 | import org.springframework.stereotype.Service; 8 | 9 | @Service 10 | public class BrandServiceImpl extends ServiceImpl implements BrandService { 11 | } 12 | -------------------------------------------------------------------------------- /mall-sms/sms-boot/src/main/java/com/youlai/mall/sms/model/query/AdvertPageQuery.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.sms.model.query; 2 | 3 | import com.youlai.common.base.BasePageQuery; 4 | import io.swagger.v3.oas.annotations.media.Schema; 5 | import lombok.Data; 6 | 7 | /** 8 | * 广告分页列表查询对象 9 | * 10 | * @author haoxr 11 | * @since 2021/7/11 12 | */ 13 | @Schema(description = "广告分页查询对象") 14 | @Data 15 | public class AdvertPageQuery extends BasePageQuery { 16 | 17 | @Schema(description="关键字") 18 | private String keywords; 19 | 20 | } 21 | -------------------------------------------------------------------------------- /mall-sms/sms-boot/src/main/resources/mapper/SmsCouponMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 14 | 15 | -------------------------------------------------------------------------------- /youlai-system/system-boot/src/main/java/com/youlai/system/SystemApplication.java: -------------------------------------------------------------------------------- 1 | package com.youlai.system; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 6 | 7 | @SpringBootApplication 8 | @EnableDiscoveryClient 9 | public class SystemApplication { 10 | public static void main(String[] args) { 11 | SpringApplication.run(SystemApplication.class, args); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /youlai-system/system-boot/src/main/java/com/youlai/system/model/query/DictPageQuery.java: -------------------------------------------------------------------------------- 1 | package com.youlai.system.model.query; 2 | 3 | 4 | import com.youlai.common.base.BasePageQuery; 5 | import io.swagger.v3.oas.annotations.media.Schema; 6 | import lombok.Data; 7 | 8 | @Schema(description ="字典数据项分页查询对象") 9 | @Data 10 | public class DictPageQuery extends BasePageQuery { 11 | 12 | @Schema(description="关键字(字典项名称)") 13 | private String keywords; 14 | 15 | @Schema(description="字典类型编码") 16 | private String typeCode; 17 | } 18 | -------------------------------------------------------------------------------- /mall-oms/oms-boot/src/main/resources/bootstrap-dev.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 8803 3 | 4 | spring: 5 | main: 6 | allow-circular-references: true 7 | mvc: 8 | pathmatch: 9 | matching-strategy: ant_path_matcher 10 | cloud: 11 | nacos: 12 | # 注册中心 13 | discovery: 14 | server-addr: http://localhost:8848 15 | # 配置中心 16 | config: 17 | server-addr: http://localhost:8848 18 | file-extension: yaml 19 | shared-configs[0]: 20 | data-id: youlai-common.yaml 21 | refresh: true -------------------------------------------------------------------------------- /youlai-system/system-boot/src/main/java/com/youlai/system/model/query/DeptQuery.java: -------------------------------------------------------------------------------- 1 | package com.youlai.system.model.query; 2 | 3 | import io.swagger.v3.oas.annotations.media.Schema; 4 | import lombok.Data; 5 | 6 | /** 7 | * 部门查询对象 8 | * 9 | * @author haoxr 10 | * @since 2022/6/11 11 | */ 12 | @Schema(description ="部门分页查询对象") 13 | @Data 14 | public class DeptQuery { 15 | 16 | @Schema(description="关键字(部门名称)") 17 | private String keywords; 18 | 19 | @Schema(description="状态(1->正常;0->禁用)") 20 | private Integer status; 21 | 22 | } 23 | -------------------------------------------------------------------------------- /youlai-system/system-boot/src/main/java/com/youlai/system/model/query/MenuQuery.java: -------------------------------------------------------------------------------- 1 | package com.youlai.system.model.query; 2 | 3 | import io.swagger.v3.oas.annotations.media.Schema; 4 | import lombok.Data; 5 | 6 | /** 7 | * 菜单查询对象 8 | * 9 | * @author haoxr 10 | * @since 2022/10/28 11 | */ 12 | @Schema(description ="部门分页查询对象") 13 | @Data 14 | public class MenuQuery { 15 | 16 | @Schema(description="关键字(菜单名称)") 17 | private String keywords; 18 | 19 | @Schema(description="状态(1->显示;0->隐藏)") 20 | private Integer status; 21 | 22 | } 23 | -------------------------------------------------------------------------------- /mall-pms/pms-boot/src/main/java/com/youlai/mall/pms/mapper/PmsSkuMapper.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.pms.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.youlai.mall.pms.model.dto.SkuInfoDTO; 5 | import com.youlai.mall.pms.model.entity.PmsSku; 6 | import org.apache.ibatis.annotations.Mapper; 7 | 8 | @Mapper 9 | public interface PmsSkuMapper extends BaseMapper { 10 | 11 | /** 12 | * 获取商品库存单元信息 13 | * 14 | * @param skuId 15 | * @return 16 | */ 17 | SkuInfoDTO getSkuInfo(Long skuId); 18 | } 19 | -------------------------------------------------------------------------------- /youlai-common/common-web/src/main/java/com/youlai/common/web/annotation/PreventDuplicateResubmit.java: -------------------------------------------------------------------------------- 1 | package com.youlai.common.web.annotation; 2 | 3 | 4 | import java.lang.annotation.*; 5 | 6 | /** 7 | * 防重提交注解 8 | * 9 | * @author haoxr 10 | * @since 2023/5/9 11 | */ 12 | @Target(ElementType.METHOD) 13 | @Retention(RetentionPolicy.RUNTIME) 14 | @Documented 15 | @Inherited 16 | public @interface PreventDuplicateResubmit { 17 | 18 | /** 19 | * 防重提交锁过期时间(秒) 20 | *

21 | * 默认5秒内不允许重复提交 22 | */ 23 | int expire() default 5; 24 | 25 | } 26 | -------------------------------------------------------------------------------- /mall-pms/pms-boot/src/main/java/com/youlai/mall/pms/constant/ProductConstants.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.pms.constant; 2 | 3 | /** 4 | * 商品常量 5 | * 6 | * @author haoxr 7 | * @since 2.0.0 8 | */ 9 | public interface ProductConstants { 10 | 11 | /** 12 | * 锁定的商品列表缓存键前缀 13 | */ 14 | String LOCKED_SKUS_PREFIX = "product:locked_skus:"; 15 | 16 | /** 17 | * 商品分布式锁缓存键前缀 18 | */ 19 | String SKU_LOCK_PREFIX = "product:sku_lock:"; 20 | 21 | /** 22 | * 临时规格ID前缀 23 | */ 24 | String SPEC_TEMP_ID_PREFIX = "tid_"; 25 | 26 | } 27 | -------------------------------------------------------------------------------- /youlai-system/system-boot/src/main/java/com/youlai/system/mapper/SysRoleMapper.java: -------------------------------------------------------------------------------- 1 | package com.youlai.system.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.youlai.system.model.entity.SysRole; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | import java.util.Set; 8 | 9 | @Mapper 10 | public interface SysRoleMapper extends BaseMapper { 11 | 12 | 13 | /** 14 | * 获取最大范围的数据权限 15 | * 16 | * @param roles 17 | * @return 18 | */ 19 | Integer getMaxDataRangeDataScope(Set roles); 20 | } 21 | -------------------------------------------------------------------------------- /youlai-system/system-boot/src/main/resources/bootstrap-dev.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 8800 3 | 4 | spring: 5 | main: 6 | allow-circular-references: true 7 | mvc: 8 | path-match: 9 | matching-strategy: ant_path_matcher 10 | cloud: 11 | nacos: 12 | # 注册中心 13 | discovery: 14 | server-addr: http://localhost:8848 15 | # 配置中心 16 | config: 17 | server-addr: http://localhost:8848 18 | file-extension: yaml 19 | shared-configs[0]: 20 | data-id: youlai-common.yaml 21 | refresh: true 22 | 23 | -------------------------------------------------------------------------------- /mall-pms/pms-api/src/main/java/com/youlai/mall/pms/model/dto/LockSkuDTO.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.pms.model.dto; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | 7 | 8 | /** 9 | * 锁定库存传输对象 10 | * 11 | * @author haoxr 12 | * @since 2.0.0 13 | */ 14 | @Data 15 | @NoArgsConstructor 16 | @AllArgsConstructor 17 | public class LockSkuDTO { 18 | 19 | /** 20 | * 商品ID 21 | */ 22 | private Long skuId; 23 | 24 | /** 25 | * 商品数量 26 | */ 27 | private Integer quantity; 28 | 29 | 30 | } 31 | -------------------------------------------------------------------------------- /mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/model/dto/CartItemDto.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.oms.model.dto; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | /** 7 | * 购物车商品项 8 | * 9 | * @author Ray Hao 10 | * @since 0.0.1 11 | */ 12 | @Data 13 | public class CartItemDto implements Serializable { 14 | 15 | /** 16 | * 商品库存ID 17 | */ 18 | private Long skuId; 19 | 20 | /** 21 | * 商品数量 22 | */ 23 | private Integer count; 24 | 25 | /** 26 | * 是否选中 27 | */ 28 | private Boolean checked; 29 | 30 | } 31 | -------------------------------------------------------------------------------- /mall-pms/pms-api/src/main/java/com/youlai/mall/pms/model/vo/CategoryVO.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.pms.model.vo; 2 | 3 | import lombok.Data; 4 | 5 | import java.util.ArrayList; 6 | import java.util.List; 7 | 8 | @Data 9 | public class CategoryVO { 10 | 11 | private Long id; 12 | 13 | private String name; 14 | 15 | private Long parentId; 16 | 17 | private Integer level; 18 | 19 | private String iconUrl; 20 | 21 | private Integer sort; 22 | 23 | private Integer visible; 24 | 25 | private List children = new ArrayList<>(); 26 | 27 | } 28 | -------------------------------------------------------------------------------- /mall-pms/pms-boot/src/main/java/com/youlai/mall/pms/service/AttributeService.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.pms.service; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.youlai.mall.pms.model.entity.PmsCategoryAttribute; 5 | import com.youlai.mall.pms.model.form.PmsCategoryAttributeForm; 6 | 7 | public interface AttributeService extends IService { 8 | 9 | /** 10 | * 批量保存商品属性 11 | * 12 | * @param formData 属性表单数据 13 | * @return 14 | */ 15 | boolean saveBatch(PmsCategoryAttributeForm formData); 16 | } 17 | -------------------------------------------------------------------------------- /youlai-common/common-core/src/main/java/com/youlai/common/constant/ProductConstants.java: -------------------------------------------------------------------------------- 1 | package com.youlai.common.constant; 2 | 3 | /** 4 | * 商品模块常量 5 | * 6 | * @author haoxr 7 | * @since 2021/02/28 8 | */ 9 | public interface ProductConstants { 10 | 11 | /** 12 | * 订单锁定的商品列表key前缀 13 | */ 14 | String ORDER_LOCKED_SKUS_PREFIX = "order:locked:skus:"; 15 | 16 | /** 17 | * 商品分布式锁key前缀 18 | */ 19 | String SKU_LOCK_PREFIX = "product:sku:lock:"; 20 | 21 | /** 22 | * 临时规格ID前缀 23 | */ 24 | String SPEC_TEMP_ID_PREFIX = "tid_"; 25 | 26 | } 27 | -------------------------------------------------------------------------------- /youlai-system/system-boot/src/main/java/com/youlai/system/model/query/PermPageQuery.java: -------------------------------------------------------------------------------- 1 | package com.youlai.system.model.query; 2 | 3 | import com.youlai.common.base.BasePageQuery; 4 | import io.swagger.v3.oas.annotations.media.Schema; 5 | import lombok.Data; 6 | 7 | /** 8 | * 权限分页查询对象 9 | * 10 | * @author haoxr 11 | * @since 2022/1/14 22:22 12 | */ 13 | @Data 14 | @Schema 15 | public class PermPageQuery extends BasePageQuery { 16 | 17 | @Schema(description="权限名称") 18 | private String name; 19 | 20 | @Schema(description="菜单ID") 21 | private Long menuId; 22 | 23 | } 24 | -------------------------------------------------------------------------------- /mall-pms/pms-boot/src/main/java/com/youlai/mall/pms/converter/SkuConverter.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.pms.converter; 2 | 3 | import com.youlai.mall.pms.model.dto.SkuInfoDTO; 4 | import com.youlai.mall.pms.model.entity.PmsSku; 5 | import org.mapstruct.Mapper; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * 商品对象转换器 11 | * 12 | * @author haoxr 13 | * @since 2022/6/11 14 | */ 15 | @Mapper(componentModel = "spring") 16 | public interface SkuConverter { 17 | 18 | SkuInfoDTO entity2SkuInfoDto(PmsSku entity); 19 | 20 | List entity2SkuInfoDto(List list); 21 | } 22 | -------------------------------------------------------------------------------- /youlai-system/system-boot/src/main/java/com/youlai/system/model/vo/DictPageVO.java: -------------------------------------------------------------------------------- 1 | package com.youlai.system.model.vo; 2 | 3 | 4 | import io.swagger.v3.oas.annotations.media.Schema; 5 | import lombok.Data; 6 | 7 | @Schema(description ="字典分页对象") 8 | @Data 9 | public class DictPageVO { 10 | 11 | @Schema(description="字典ID") 12 | private Long id; 13 | 14 | @Schema(description="字典名称") 15 | private String name; 16 | 17 | @Schema(description="字典值") 18 | private String value; 19 | 20 | @Schema(description="状态(1:启用;0:禁用)") 21 | private Integer status; 22 | 23 | } 24 | -------------------------------------------------------------------------------- /youlai-auth/src/main/resources/bootstrap-prod.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 9000 3 | 4 | spring: 5 | mvc: 6 | pathmatch: 7 | matching-strategy: ant_path_matcher 8 | cloud: 9 | nacos: 10 | # 注册中心 11 | discovery: 12 | server-addr: http://f.youlai.tech:8848 13 | namespace: youlai-mall-prod 14 | # 配置中心 15 | config: 16 | server-addr: ${spring.cloud.nacos.discovery.server-addr} 17 | file-extension: yaml 18 | namespace: youlai-mall-prod 19 | shared-configs[0]: 20 | data-id: youlai-common.yaml 21 | refresh: true -------------------------------------------------------------------------------- /youlai-common/common-core/src/main/java/com/youlai/common/base/BasePageQuery.java: -------------------------------------------------------------------------------- 1 | package com.youlai.common.base; 2 | 3 | import io.swagger.v3.oas.annotations.media.Schema; 4 | import lombok.Data; 5 | 6 | import java.io.Serializable; 7 | 8 | /** 9 | * 基础分页请求对象 10 | * 11 | * @author huawei 12 | * @since 2021/2/28 13 | */ 14 | @Data 15 | @Schema 16 | public class BasePageQuery implements Serializable { 17 | 18 | @Schema(description = "页码", example = "1") 19 | private int pageNum = 1; 20 | 21 | @Schema(description = "每页记录数", example = "10") 22 | private int pageSize = 10; 23 | } 24 | -------------------------------------------------------------------------------- /mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/constant/OrderConstants.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.oms.constant; 2 | 3 | /** 4 | * 订单相关常量 5 | * 6 | *

该接口定义了与订单相关的常量。

7 | * 8 | * @author haoxr 9 | * @since 2.0.0 10 | */ 11 | public interface OrderConstants { 12 | 13 | /** 14 | * 会员购物车缓存键前缀 15 | */ 16 | String MEMBER_CART_PREFIX = "order:cart:"; 17 | 18 | /** 19 | * 订单防重提交令牌缓存键前缀 20 | */ 21 | String ORDER_TOKEN_PREFIX = "order:token:"; 22 | 23 | /** 24 | * 订单锁缓存键前缀 25 | */ 26 | String ORDER_LOCK_PREFIX = "order:lock"; 27 | 28 | } 29 | -------------------------------------------------------------------------------- /youlai-auth/src/main/java/com/youlai/auth/oauth2/extension/captcha/CaptchaParameterNames.java: -------------------------------------------------------------------------------- 1 | package com.youlai.auth.oauth2.extension.captcha; 2 | 3 | /** 4 | * 验证码模式请求参数名 5 | * 6 | * @author Ray Hao 7 | * @since 3.0.0 8 | */ 9 | 10 | public class CaptchaParameterNames { 11 | 12 | /** 13 | * 验证码ID 14 | */ 15 | public static final String CAPTCHA_ID = "captchaId"; 16 | 17 | 18 | /** 19 | * 验证码 Code 20 | */ 21 | public static final String CAPTCHA_CODE = "captchaCode"; 22 | 23 | 24 | 25 | 26 | private CaptchaParameterNames() { 27 | } 28 | 29 | 30 | } 31 | -------------------------------------------------------------------------------- /youlai-common/common-core/src/main/java/com/youlai/common/constant/OrderConstants.java: -------------------------------------------------------------------------------- 1 | package com.youlai.common.constant; 2 | 3 | /** 4 | * 订单常量 5 | * 6 | * @author haoxr 7 | * @since 2021/03/16 8 | */ 9 | public interface OrderConstants { 10 | 11 | /** 12 | * 会员购物车缓存KEY前缀 13 | */ 14 | String MEMBER_CART_PREFIX = "MEMBER:CART:"; 15 | 16 | /** 17 | * 订单防重提交锁KEY前缀 18 | */ 19 | String ORDER_RESUBMIT_LOCK_PREFIX = "ORDER:RESUBMIT_LOCK:"; 20 | 21 | 22 | /** 23 | * 订单锁前缀 24 | * 25 | */ 26 | String ORDER_LOCK_PREFIX = "ORDER:LOCK:"; 27 | 28 | } 29 | -------------------------------------------------------------------------------- /youlai-gateway/src/main/resources/bootstrap-prod.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 9999 3 | 4 | spring: 5 | main: 6 | allow-bean-definition-overriding: true 7 | application: 8 | name: youlai-gateway 9 | cloud: 10 | nacos: 11 | discovery: 12 | server-addr: http://f.youlai.tech:8848 13 | namespace: youlai-mall-prod 14 | config: 15 | server-addr: ${spring.cloud.nacos.discovery.server-addr} 16 | file-extension: yaml 17 | namespace: youlai-mall-prod 18 | shared-configs[0]: 19 | data-id: youlai-common.yaml 20 | refresh: true 21 | -------------------------------------------------------------------------------- /youlai-system/system-boot/src/main/java/com/youlai/system/model/vo/DictTypePageVO.java: -------------------------------------------------------------------------------- 1 | package com.youlai.system.model.vo; 2 | 3 | 4 | import io.swagger.v3.oas.annotations.media.Schema; 5 | import lombok.Data; 6 | 7 | @Schema(description ="字典类型分页对象") 8 | @Data 9 | public class DictTypePageVO { 10 | 11 | @Schema(description="字典类型ID") 12 | private Long id; 13 | 14 | @Schema(description="类型名称") 15 | private String name; 16 | 17 | @Schema(description="类型编码") 18 | private String code; 19 | 20 | @Schema(description="状态:1:启用;0:禁用") 21 | private Integer status; 22 | 23 | } 24 | -------------------------------------------------------------------------------- /mall-pms/pms-boot/src/main/java/com/youlai/mall/pms/service/impl/SpuAttributeServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.pms.service.impl; 2 | 3 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 4 | import com.youlai.mall.pms.mapper.PmsSpuAttributeMapper; 5 | import com.youlai.mall.pms.model.entity.PmsSpuAttribute; 6 | import com.youlai.mall.pms.service.SpuAttributeService; 7 | import org.springframework.stereotype.Service; 8 | 9 | @Service 10 | public class SpuAttributeServiceImpl extends ServiceImpl implements SpuAttributeService { 11 | 12 | 13 | } 14 | -------------------------------------------------------------------------------- /youlai-common/common-sms/src/main/java/com/youlai/common/sms/service/SmsService.java: -------------------------------------------------------------------------------- 1 | package com.youlai.common.sms.service; 2 | 3 | 4 | /** 5 | * 短信服务接口层 6 | * 7 | * @author haoxr 8 | * @since 3.0.0 9 | */ 10 | public interface SmsService { 11 | 12 | /** 13 | * 发送短信验证码 14 | * 15 | * @param mobile 手机号 13388886666 16 | * @param templateCode 短信模板 SMS_194640010 17 | * @param templateParam 模板参数 "[{"code":"123456"}]" 18 | * 19 | * @return boolean 是否发送成功 20 | */ 21 | boolean sendSms(String mobile, String templateCode, String templateParam); 22 | 23 | 24 | } 25 | -------------------------------------------------------------------------------- /youlai-system/system-boot/src/main/java/com/youlai/system/mapper/SysMenuMapper.java: -------------------------------------------------------------------------------- 1 | package com.youlai.system.mapper; 2 | 3 | /** 4 | * 菜单持久接口层 5 | * 6 | * @author haoxr 7 | * @since 2022/1/24 8 | */ 9 | 10 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 11 | import com.youlai.system.model.bo.RouteBO; 12 | import com.youlai.system.model.entity.SysMenu; 13 | import org.apache.ibatis.annotations.Mapper; 14 | 15 | import java.util.List; 16 | import java.util.Set; 17 | 18 | @Mapper 19 | public interface SysMenuMapper extends BaseMapper { 20 | 21 | List listRoutes(); 22 | } 23 | -------------------------------------------------------------------------------- /youlai-system/system-boot/src/main/java/com/youlai/system/mapper/SysUserRoleMapper.java: -------------------------------------------------------------------------------- 1 | package com.youlai.system.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.youlai.system.model.entity.SysUserRole; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | /** 8 | * 用户角色访问层 9 | * 10 | * @author haoxr 11 | * @since 2022/1/15 12 | */ 13 | @Mapper 14 | public interface SysUserRoleMapper extends BaseMapper { 15 | 16 | /** 17 | * 获取角色绑定的用户数 18 | * 19 | * @param roleId 角色ID 20 | */ 21 | int countUsersForRole(Long roleId); 22 | } 23 | -------------------------------------------------------------------------------- /mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/app/impl/OrderSettingServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.oms.service.app.impl; 2 | 3 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 4 | import com.youlai.mall.oms.mapper.OrderSettingMapper; 5 | import com.youlai.mall.oms.model.entity.OmsOrderSetting; 6 | import com.youlai.mall.oms.service.app.OrderSettingService; 7 | import org.springframework.stereotype.Service; 8 | 9 | 10 | @Service 11 | public class OrderSettingServiceImpl extends ServiceImpl implements OrderSettingService { 12 | 13 | } 14 | -------------------------------------------------------------------------------- /mall-ums/ums-boot/src/main/java/com/youlai/mall/ums/UmsApplication.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.ums; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; 6 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 7 | 8 | @SpringBootApplication 9 | @EnableDiscoveryClient 10 | public class UmsApplication { 11 | public static void main(String[] args) { 12 | SpringApplication.run(UmsApplication.class, args); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /mall-ums/ums-boot/src/main/java/com/youlai/mall/ums/convert/AddressConvert.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.ums.convert; 2 | 3 | import com.youlai.mall.ums.dto.MemberAddressDTO; 4 | import com.youlai.mall.ums.model.entity.UmsAddress; 5 | import org.mapstruct.Mapper; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * 会员地址对象转换器 11 | * 12 | * @author haoxr 13 | * @since 2022/6/21 23:52 14 | */ 15 | @Mapper(componentModel = "spring") 16 | public interface AddressConvert { 17 | 18 | MemberAddressDTO entity2Dto(UmsAddress entity); 19 | 20 | List entity2Dto(List entities); 21 | } 22 | -------------------------------------------------------------------------------- /mall-ums/ums-boot/src/main/resources/bootstrap-prod.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 8801 3 | 4 | spring: 5 | main: 6 | allow-circular-references: true 7 | mvc: 8 | pathmatch: 9 | matching-strategy: ant_path_matcher 10 | cloud: 11 | nacos: 12 | discovery: 13 | server-addr: http://f.youlai.tech:8848 14 | namespace: youlai-mall-prod 15 | config: 16 | server-addr: ${spring.cloud.nacos.discovery.server-addr} 17 | file-extension: yaml 18 | namespace: youlai-mall-prod 19 | shared-configs[0]: 20 | data-id: youlai-common.yaml 21 | refresh: true 22 | -------------------------------------------------------------------------------- /youlai-system/system-boot/src/main/java/com/youlai/system/converter/DeptConverter.java: -------------------------------------------------------------------------------- 1 | package com.youlai.system.converter; 2 | 3 | import com.youlai.system.model.entity.SysDept; 4 | import com.youlai.system.model.form.DeptForm; 5 | import com.youlai.system.model.vo.DeptVO; 6 | import org.mapstruct.Mapper; 7 | 8 | /** 9 | * 部门对象转换器 10 | * 11 | * @author haoxr 12 | * @since 2022/7/29 13 | */ 14 | @Mapper(componentModel = "spring") 15 | public interface DeptConverter { 16 | 17 | DeptForm entity2Form(SysDept entity); 18 | DeptVO entity2Vo(SysDept entity); 19 | 20 | SysDept form2Entity(DeptForm deptForm); 21 | 22 | } -------------------------------------------------------------------------------- /mall-pms/pms-boot/src/main/java/com/youlai/mall/pms/model/entity/PmsBrand.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.pms.model.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableId; 5 | import com.youlai.common.base.BaseEntity; 6 | import lombok.Data; 7 | 8 | import jakarta.validation.constraints.NotBlank; 9 | 10 | 11 | @Data 12 | public class PmsBrand extends BaseEntity { 13 | 14 | @TableId(type= IdType.AUTO) 15 | private Long id; 16 | 17 | @NotBlank 18 | private String name; 19 | 20 | private String logoUrl; 21 | 22 | private Integer sort; 23 | } 24 | -------------------------------------------------------------------------------- /mall-pms/pms-boot/src/main/java/com/youlai/mall/pms/service/impl/CategoryBrandServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.pms.service.impl; 2 | 3 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 4 | import com.youlai.mall.pms.mapper.PmsCategoryBrandMapper; 5 | import com.youlai.mall.pms.model.entity.PmsCategoryBrand; 6 | import com.youlai.mall.pms.service.CategoryBrandService; 7 | import org.springframework.stereotype.Service; 8 | 9 | @Service 10 | public class CategoryBrandServiceImpl extends ServiceImpl implements CategoryBrandService { 11 | 12 | 13 | 14 | 15 | 16 | } 17 | -------------------------------------------------------------------------------- /mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/app/impl/OrderDeliveryServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.oms.service.app.impl; 2 | 3 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 4 | import com.youlai.mall.oms.mapper.OrderDeliveryMapper; 5 | import com.youlai.mall.oms.model.entity.OmsOrderDelivery; 6 | import com.youlai.mall.oms.service.app.OrderDeliveryService; 7 | import org.springframework.stereotype.Service; 8 | 9 | @Service("orderDeliveryService") 10 | public class OrderDeliveryServiceImpl extends ServiceImpl implements OrderDeliveryService { 11 | 12 | } 13 | -------------------------------------------------------------------------------- /youlai-common/common-core/src/main/java/com/youlai/common/enums/StatusEnum.java: -------------------------------------------------------------------------------- 1 | package com.youlai.common.enums; 2 | 3 | import com.youlai.common.base.IBaseEnum; 4 | import lombok.Getter; 5 | 6 | /** 7 | * 状态枚举 8 | * 9 | * @author haoxr 10 | * @since 2022/10/14 11 | */ 12 | public enum StatusEnum implements IBaseEnum { 13 | 14 | ENABLE(1, "启用"), 15 | DISABLE (0, "禁用"); 16 | 17 | @Getter 18 | private Integer value; 19 | 20 | @Getter 21 | private String label; 22 | 23 | StatusEnum(Integer value, String label) { 24 | this.value = value; 25 | this.label = label; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /youlai-system/system-boot/src/main/java/com/youlai/system/converter/MenuConverter.java: -------------------------------------------------------------------------------- 1 | package com.youlai.system.converter; 2 | 3 | import com.youlai.system.model.entity.SysMenu; 4 | import com.youlai.system.model.form.MenuForm; 5 | import com.youlai.system.model.vo.MenuVO; 6 | import org.mapstruct.Mapper; 7 | 8 | /** 9 | * 菜单对象转换器 10 | * 11 | * @author haoxr 12 | * @since 2022/7/29 13 | */ 14 | @Mapper(componentModel = "spring") 15 | public interface MenuConverter { 16 | 17 | MenuVO entity2Vo(SysMenu entity); 18 | 19 | 20 | MenuForm entity2Form(SysMenu entity); 21 | 22 | SysMenu form2Entity(MenuForm menuForm); 23 | 24 | } -------------------------------------------------------------------------------- /mall-oms/oms-boot/src/main/resources/bootstrap-prod.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 8803 3 | 4 | spring: 5 | main: 6 | allow-circular-references: true 7 | mvc: 8 | pathmatch: 9 | matching-strategy: ant_path_matcher 10 | cloud: 11 | nacos: 12 | discovery: 13 | server-addr: http://f.youlai.tech:8848 14 | namespace: youlai-mall-prod 15 | config: 16 | server-addr: ${spring.cloud.nacos.discovery.server-addr} 17 | file-extension: yaml 18 | namespace: youlai-mall-prod 19 | shared-configs[0]: 20 | data-id: youlai-common.yaml 21 | refresh: true 22 | 23 | 24 | -------------------------------------------------------------------------------- /mall-sms/sms-boot/src/main/java/com/youlai/mall/sms/service/impl/SmsCouponSpuServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.sms.service.impl; 2 | 3 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 4 | import com.youlai.mall.sms.model.entity.SmsCouponSpu; 5 | import com.youlai.mall.sms.service.SmsCouponSpuService; 6 | import com.youlai.mall.sms.mapper.SmsCouponSpuMapper; 7 | import org.springframework.stereotype.Service; 8 | 9 | /** 10 | * 11 | */ 12 | @Service 13 | public class SmsCouponSpuServiceImpl extends ServiceImpl 14 | implements SmsCouponSpuService{ 15 | 16 | } 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /youlai-system/system-boot/src/main/resources/bootstrap-prod.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 8800 3 | 4 | spring: 5 | main: 6 | allow-circular-references: true 7 | mvc: 8 | pathmatch: 9 | matching-strategy: ant_path_matcher 10 | cloud: 11 | nacos: 12 | discovery: 13 | server-addr: http://f.youlai.tech:8848 14 | namespace: youlai-mall-prod 15 | config: 16 | server-addr: ${spring.cloud.nacos.discovery.server-addr} 17 | file-extension: yaml 18 | namespace: youlai-mall-prod 19 | shared-configs[0]: 20 | data-id: youlai-common.yaml 21 | refresh: true 22 | 23 | -------------------------------------------------------------------------------- /mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/app/impl/OrderItemServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.oms.service.app.impl; 2 | 3 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 4 | import com.youlai.mall.oms.mapper.OrderItemMapper; 5 | import com.youlai.mall.oms.model.entity.OmsOrderItem; 6 | import com.youlai.mall.oms.service.app.OrderItemService; 7 | import lombok.extern.slf4j.Slf4j; 8 | import org.springframework.stereotype.Service; 9 | 10 | 11 | @Slf4j 12 | @Service 13 | public class OrderItemServiceImpl extends ServiceImpl implements OrderItemService { 14 | 15 | 16 | } 17 | -------------------------------------------------------------------------------- /mall-pms/pms-boot/src/main/resources/bootstrap-prod.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 8802 3 | 4 | spring: 5 | main: 6 | allow-circular-references: true 7 | mvc: 8 | pathmatch: 9 | matching-strategy: ant_path_matcher 10 | cloud: 11 | nacos: 12 | discovery: 13 | server-addr: http://f.youlai.tech:8848 14 | namespace: youlai-mall-prod 15 | config: 16 | server-addr: ${spring.cloud.nacos.discovery.server-addr} 17 | file-extension: yaml 18 | namespace: youlai-mall-prod 19 | # 公共配置 20 | shared-configs[0]: 21 | data-id: youlai-common.yaml 22 | refresh: true 23 | -------------------------------------------------------------------------------- /docs/docker/seata/config/META-INF/spring-configuration-metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "groups": [], 3 | "properties": [ 4 | { 5 | "name": "logging.extend.kafka-appender.bootstrap-servers", 6 | "type": "java.lang.String", 7 | "defaultValue": "localhost:9092" 8 | }, 9 | { 10 | "name": "logging.extend.kafka-appender.topic", 11 | "type": "java.lang.String", 12 | "defaultValue": "logback_to_logstash" 13 | }, 14 | { 15 | "name": "logging.extend.logstash-appender.destination", 16 | "type": "java.lang.String", 17 | "defaultValue": "localhost:4560" 18 | } 19 | ], 20 | "hints": [ 21 | ] 22 | } -------------------------------------------------------------------------------- /mall-ums/ums-api/src/main/java/com/youlai/mall/ums/dto/MemberAuthDTO.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.ums.dto; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | 7 | /** 8 | * 会员信息 9 | * 10 | * @author haoxr 11 | * @since 2022/2/12 12 | */ 13 | @Data 14 | @AllArgsConstructor 15 | @NoArgsConstructor 16 | public class MemberAuthDTO { 17 | 18 | /** 19 | * 会员ID 20 | */ 21 | private Long id; 22 | 23 | /** 24 | * 会员名(openId、mobile) 25 | */ 26 | private String username; 27 | 28 | /** 29 | * 状态(1:正常;0:禁用) 30 | */ 31 | private Integer status; 32 | } 33 | -------------------------------------------------------------------------------- /mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/converter/CartConverter.java: -------------------------------------------------------------------------------- 1 | 2 | package com.youlai.mall.oms.converter; 3 | 4 | import com.youlai.mall.oms.model.dto.CartItemDto; 5 | import com.youlai.mall.pms.model.dto.SkuInfoDTO; 6 | import org.mapstruct.Mapper; 7 | import org.mapstruct.Mapping; 8 | import org.mapstruct.Mappings; 9 | 10 | /** 11 | * 购物车对象转化器 12 | * 13 | * @author haoxr 14 | * @since 2.0.0 15 | */ 16 | @Mapper(componentModel = "spring") 17 | public interface CartConverter { 18 | 19 | @Mappings({ 20 | @Mapping(target = "skuId", source = "id"), 21 | }) 22 | CartItemDto sku2CartItem(SkuInfoDTO skuInfo); 23 | 24 | } -------------------------------------------------------------------------------- /mall-sms/sms-boot/src/main/resources/bootstrap-prod.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 8804 3 | 4 | spring: 5 | main: 6 | allow-circular-references: true 7 | mvc: 8 | pathmatch: 9 | matching-strategy: ant_path_matcher 10 | cloud: 11 | nacos: 12 | # 注册中心 13 | discovery: 14 | server-addr: http://f.youlai.tech:8848 15 | namespace: youlai-mall-prod 16 | # 配置中心 17 | config: 18 | server-addr: ${spring.cloud.nacos.discovery.server-addr} 19 | file-extension: yaml 20 | namespace: youlai-mall-prod 21 | shared-configs[0]: 22 | data-id: youlai-common.yaml 23 | refresh: true -------------------------------------------------------------------------------- /mall-ums/ums-boot/src/main/java/com/youlai/mall/ums/mapper/UmsAddressMapper.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.ums.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.youlai.mall.ums.model.entity.UmsAddress; 5 | import org.apache.ibatis.annotations.Select; 6 | import org.apache.ibatis.annotations.Mapper; 7 | 8 | import java.util.List; 9 | 10 | @Mapper 11 | public interface UmsAddressMapper extends BaseMapper { 12 | 13 | @Select("") 16 | List listByUserId(Long userId); 17 | 18 | } 19 | -------------------------------------------------------------------------------- /mall-sms/sms-boot/src/main/resources/bootstrap-dev.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 8804 3 | 4 | spring: 5 | main: 6 | allow-circular-references: true 7 | mvc: 8 | pathmatch: 9 | matching-strategy: ant_path_matcher 10 | cloud: 11 | nacos: 12 | # 注册中心 13 | discovery: 14 | server-addr: http://localhost:8848 15 | # 配置中心 16 | config: 17 | # 本地启动 18 | ## server-addr: ${spring.cloud.nacos.discovery.server-addr} 19 | # 极速启动 20 | server-addr: http://localhost:8848 21 | file-extension: yaml 22 | shared-configs[0]: 23 | data-id: youlai-common.yaml 24 | refresh: true -------------------------------------------------------------------------------- /mall-ums/ums-api/src/main/java/com/youlai/mall/ums/dto/MemberAddressDTO.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.ums.dto; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * 会员地址传输层对象 7 | * 8 | * @author haoxr 9 | * @since 2022/2/12 15:57 10 | */ 11 | @Data 12 | public class MemberAddressDTO { 13 | 14 | private Long id; 15 | 16 | private Long memberId; 17 | 18 | private String consigneeName; 19 | 20 | private String consigneeMobile; 21 | 22 | private String province; 23 | 24 | private String city; 25 | 26 | private String area; 27 | 28 | private String detailAddress; 29 | 30 | private Integer defaulted; 31 | 32 | } 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /youlai-system/system-boot/src/main/java/com/youlai/system/model/entity/SysRoleMenu.java: -------------------------------------------------------------------------------- 1 | package com.youlai.system.model.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.TableField; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | 9 | /** 10 | * 角色和菜单关联表 11 | */ 12 | @Data 13 | @AllArgsConstructor 14 | @NoArgsConstructor 15 | public class SysRoleMenu { 16 | /** 17 | * 角色ID 18 | */ 19 | private Long roleId; 20 | 21 | /** 22 | * 菜单ID 23 | */ 24 | private Long menuId; 25 | 26 | @TableField(exist = false) 27 | private static final long serialVersionUID = 1L; 28 | } -------------------------------------------------------------------------------- /youlai-system/system-boot/src/main/java/com/youlai/system/model/query/UserPageQuery.java: -------------------------------------------------------------------------------- 1 | package com.youlai.system.model.query; 2 | 3 | import com.youlai.common.base.BasePageQuery; 4 | import io.swagger.v3.oas.annotations.media.Schema; 5 | import lombok.Data; 6 | 7 | /** 8 | * 用户分页查询对象 9 | * 10 | * @author haoxr 11 | * @since 2022/1/14 12 | */ 13 | @Schema 14 | @Data 15 | public class UserPageQuery extends BasePageQuery { 16 | 17 | @Schema(description="关键字(用户名/昵称/手机号)") 18 | private String keywords; 19 | 20 | @Schema(description="用户状态") 21 | private Integer status; 22 | 23 | @Schema(description="部门ID") 24 | private Long deptId; 25 | 26 | } 27 | -------------------------------------------------------------------------------- /mall-sms/sms-boot/src/main/java/com/youlai/mall/sms/service/impl/SmsCouponHistoryServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.sms.service.impl; 2 | 3 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 4 | import com.youlai.mall.sms.model.entity.SmsCouponHistory; 5 | import com.youlai.mall.sms.service.SmsCouponHistoryService; 6 | import com.youlai.mall.sms.mapper.SmsCouponHistoryMapper; 7 | import org.springframework.stereotype.Service; 8 | 9 | /** 10 | * 11 | */ 12 | @Service 13 | public class SmsCouponHistoryServiceImpl extends ServiceImpl 14 | implements SmsCouponHistoryService{ 15 | 16 | } 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /youlai-system/system-boot/src/main/java/com/youlai/system/model/form/DictTypeForm.java: -------------------------------------------------------------------------------- 1 | package com.youlai.system.model.form; 2 | 3 | 4 | import io.swagger.v3.oas.annotations.media.Schema; 5 | import lombok.Data; 6 | 7 | @Schema(description = "字典类型") 8 | @Data 9 | public class DictTypeForm { 10 | 11 | @Schema(description="字典类型ID") 12 | private Long id; 13 | 14 | @Schema(description="类型名称") 15 | private String name; 16 | 17 | @Schema(description="类型编码") 18 | private String code; 19 | 20 | @Schema(description="类型状态(1:启用;0:禁用)") 21 | private Integer status; 22 | 23 | @Schema(description = "备注") 24 | private String remark; 25 | 26 | } 27 | -------------------------------------------------------------------------------- /mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/enums/OrderSourceEnum.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.oms.enums; 2 | 3 | import com.youlai.common.base.IBaseEnum; 4 | import lombok.Getter; 5 | 6 | /** 7 | * 订单来源枚举 8 | * 9 | * @author huawei 10 | * @since 2021/1/16 11 | */ 12 | 13 | public enum OrderSourceEnum implements IBaseEnum { 14 | 15 | APP(1, "APP"), // APP订单 16 | WEB(2, "WEB"), // 网页 17 | ; 18 | 19 | OrderSourceEnum(Integer value, String label) { 20 | this.value = value; 21 | this.label = label; 22 | } 23 | 24 | 25 | @Getter 26 | private Integer value; 27 | 28 | @Getter 29 | private String label; 30 | } 31 | -------------------------------------------------------------------------------- /mall-pms/pms-boot/src/main/resources/bootstrap-dev.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 8802 3 | 4 | spring: 5 | main: 6 | allow-circular-references: true 7 | mvc: 8 | pathmatch: 9 | matching-strategy: ant_path_matcher 10 | cloud: 11 | nacos: 12 | # 注册中心 13 | discovery: 14 | server-addr: http://localhost:8848 15 | # 配置中心 16 | config: 17 | # 本地启动 18 | ## server-addr: ${spring.cloud.nacos.discovery.server-addr} 19 | # 极速启动 20 | server-addr: http://localhost:8848 21 | file-extension: yaml 22 | shared-configs[0]: 23 | data-id: youlai-common.yaml 24 | refresh: true 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /youlai-system/system-boot/src/main/java/com/youlai/system/service/OssService.java: -------------------------------------------------------------------------------- 1 | package com.youlai.system.service; 2 | 3 | import com.youlai.system.model.vo.FileInfoVO; 4 | import org.springframework.web.multipart.MultipartFile; 5 | 6 | /** 7 | * 对象存储服务接口层 8 | * 9 | * @author haoxr 10 | * @since 3.0.0 11 | */ 12 | public interface OssService { 13 | 14 | /** 15 | * 上传文件 16 | * @param file 表单文件对象 17 | * @return 文件信息 18 | */ 19 | FileInfoVO uploadFile(MultipartFile file); 20 | 21 | /** 22 | * 删除文件 23 | * 24 | * @param filePath 文件完整URL 25 | * @return 删除结果 26 | */ 27 | boolean deleteFile(String filePath); 28 | 29 | 30 | } 31 | -------------------------------------------------------------------------------- /mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/app/CartService.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.oms.service.app; 2 | 3 | import com.youlai.mall.oms.model.dto.CartItemDto; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * 购物车业务接口 9 | * 10 | * @author haoxr 11 | * @date 2022/11/13 12 | */ 13 | public interface CartService { 14 | 15 | List listCartItems(Long memberId); 16 | 17 | boolean deleteCart(); 18 | 19 | boolean addCartItem(Long skuId); 20 | 21 | boolean updateCartItem(CartItemDto cartItem); 22 | 23 | boolean removeCartItem(Long skuId); 24 | 25 | boolean removeCheckedItem(); 26 | 27 | boolean checkAll(boolean checked); 28 | 29 | } 30 | -------------------------------------------------------------------------------- /mall-pms/pms-boot/src/main/java/com/youlai/mall/pms/converter/SpuAttributeConverter.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.pms.converter; 2 | 3 | import com.youlai.mall.pms.model.entity.PmsSpuAttribute; 4 | import com.youlai.mall.pms.model.form.PmsSpuAttributeForm; 5 | import org.mapstruct.Mapper; 6 | import org.mapstruct.Mapping; 7 | import org.mapstruct.Mappings; 8 | 9 | /** 10 | * 商品属性对象转换器 11 | * 12 | * @author haoxr 13 | * @date 2022/6/11 14 | */ 15 | @Mapper(componentModel = "spring") 16 | public interface SpuAttributeConverter { 17 | 18 | @Mappings({ 19 | @Mapping(target = "id",ignore = true) 20 | }) 21 | PmsSpuAttribute form2Entity(PmsSpuAttributeForm form); 22 | 23 | } 24 | -------------------------------------------------------------------------------- /youlai-system/system-boot/src/main/java/com/youlai/system/config/PasswordEncoderConfig.java: -------------------------------------------------------------------------------- 1 | package com.youlai.system.config; 2 | 3 | import org.springframework.context.annotation.Bean; 4 | import org.springframework.context.annotation.Configuration; 5 | import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; 6 | import org.springframework.security.crypto.password.PasswordEncoder; 7 | 8 | /** 9 | * 密码编码器(修改、重置密码使用) 10 | * 11 | * @author haoxr 12 | * @since 0.0.1 13 | */ 14 | @Configuration 15 | public class PasswordEncoderConfig { 16 | 17 | @Bean 18 | public PasswordEncoder passwordEncoder() { 19 | return new BCryptPasswordEncoder(); 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /youlai-common/common-core/src/main/java/com/youlai/common/constant/JwtClaimConstants.java: -------------------------------------------------------------------------------- 1 | package com.youlai.common.constant; 2 | 3 | public interface JwtClaimConstants { 4 | 5 | /** 6 | * 用户ID 7 | */ 8 | String USER_ID = "userId"; 9 | 10 | /** 11 | * 用户名 12 | */ 13 | String USERNAME = "username"; 14 | 15 | /** 16 | * 部门ID 17 | */ 18 | String DEPT_ID = "deptId"; 19 | 20 | /** 21 | * 数据权限 22 | */ 23 | String DATA_SCOPE = "dataScope"; 24 | 25 | /** 26 | * 权限(角色Code)集合 27 | */ 28 | String AUTHORITIES = "authorities"; 29 | 30 | /** 31 | * 会员ID 32 | */ 33 | String MEMBER_ID = "memberId"; 34 | } 35 | -------------------------------------------------------------------------------- /mall-sms/sms-boot/src/main/java/com/youlai/mall/sms/service/impl/SmsCouponSpuCategoryServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.sms.service.impl; 2 | 3 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 4 | import com.youlai.mall.sms.model.entity.SmsCouponSpuCategory; 5 | import com.youlai.mall.sms.service.SmsCouponSpuCategoryService; 6 | import com.youlai.mall.sms.mapper.SmsCouponSpuCategoryMapper; 7 | import org.springframework.stereotype.Service; 8 | 9 | /** 10 | * 11 | */ 12 | @Service 13 | public class SmsCouponSpuCategoryServiceImpl extends ServiceImpl 14 | implements SmsCouponSpuCategoryService{ 15 | 16 | } 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /mall-pms/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | youlai-mall 7 | com.youlai 8 | 3.2.1 9 | 10 | 4.0.0 11 | 12 | mall-pms 13 | pom 14 | 15 | 16 | pms-api 17 | pms-boot 18 | 19 | 20 | -------------------------------------------------------------------------------- /mall-ums/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | youlai-mall 7 | com.youlai 8 | 3.2.1 9 | 10 | 4.0.0 11 | 12 | mall-ums 13 | 14 | pom 15 | 16 | ums-api 17 | ums-boot 18 | 19 | 20 | -------------------------------------------------------------------------------- /mall-oms/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | youlai-mall 7 | com.youlai 8 | 3.2.1 9 | 10 | 4.0.0 11 | 12 | mall-oms 13 | 14 | pom 15 | 16 | oms-api 17 | oms-boot 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /mall-sms/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | youlai-mall 7 | com.youlai 8 | 3.2.1 9 | 10 | 4.0.0 11 | 12 | mall-sms 13 | 14 | pom 15 | 16 | sms-api 17 | sms-boot 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /mall-sms/sms-boot/src/main/java/com/youlai/mall/sms/mapper/SmsCouponMapper.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.sms.mapper; 2 | 3 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 4 | import com.youlai.mall.sms.model.entity.SmsCoupon; 5 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 6 | import com.youlai.mall.sms.model.query.CouponPageQuery; 7 | import com.youlai.mall.sms.model.vo.CouponPageVO; 8 | import org.apache.ibatis.annotations.Mapper; 9 | 10 | import java.util.List; 11 | 12 | 13 | @Mapper 14 | public interface SmsCouponMapper extends BaseMapper { 15 | 16 | List getCouponPage(Page page, CouponPageQuery queryParams); 17 | } 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /mall-pms/pms-boot/src/main/java/com/youlai/mall/pms/model/vo/SeckillingSpuVO.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.pms.model.vo; 2 | 3 | import io.swagger.v3.oas.annotations.media.Schema; 4 | import lombok.Data; 5 | 6 | /** 7 | * 【应用端】秒杀商品视图对象 8 | * 9 | * @author haoxr 10 | * @since 2021/8/8 11 | */ 12 | @Schema(description = "商品分页对象") 13 | @Data 14 | public class SeckillingSpuVO { 15 | 16 | @Schema(description="商品ID") 17 | private Long id; 18 | 19 | @Schema(description="商品名称") 20 | private String name; 21 | 22 | @Schema(description="商品价格(单位:分)") 23 | private Long price; 24 | 25 | @Schema(description="图片地址") 26 | private String picUrl; 27 | 28 | } 29 | -------------------------------------------------------------------------------- /youlai-system/system-api/src/main/java/com/youlai/system/api/fallback/UserFeignFallbackClient.java: -------------------------------------------------------------------------------- 1 | package com.youlai.system.api.fallback; 2 | 3 | import com.youlai.system.api.UserFeignClient; 4 | import com.youlai.system.dto.UserAuthInfo; 5 | import lombok.extern.slf4j.Slf4j; 6 | import org.springframework.stereotype.Component; 7 | 8 | /** 9 | * 系统用户服务远程调用异常后的降级处理类 10 | * 11 | * @author haoxr 12 | * @since 2021/4/24 13 | */ 14 | @Component 15 | @Slf4j 16 | public class UserFeignFallbackClient implements UserFeignClient { 17 | 18 | @Override 19 | public UserAuthInfo getUserAuthInfo(String username) { 20 | log.error("feign远程调用系统用户服务异常后的降级方法"); 21 | return new UserAuthInfo(); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/enums/PaymentMethodEnum.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.oms.enums; 2 | 3 | 4 | import com.youlai.common.base.IBaseEnum; 5 | import lombok.Getter; 6 | 7 | /** 8 | * 订单支付方式枚举 9 | * 10 | * @author huawei 11 | * @since 2.0.0 12 | */ 13 | public enum PaymentMethodEnum implements IBaseEnum { 14 | 15 | WX_JSAPI(1, "微信JSAPI支付"), 16 | ALIPAY(2, "支付宝支付"), 17 | BALANCE(3, "会员余额支付"), 18 | WX_APP(4, "微信APP支付"); 19 | 20 | PaymentMethodEnum(int value, String label) { 21 | this.value = value; 22 | this.label = label; 23 | } 24 | 25 | @Getter 26 | private Integer value; 27 | 28 | @Getter 29 | private String label; 30 | } 31 | -------------------------------------------------------------------------------- /mall-sms/sms-boot/src/main/java/com/youlai/mall/sms/mapper/SmsAdvertMapper.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.sms.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 5 | import com.youlai.mall.sms.model.entity.SmsAdvert; 6 | import com.youlai.mall.sms.model.query.AdvertPageQuery; 7 | import org.apache.ibatis.annotations.Mapper; 8 | 9 | @Mapper 10 | public interface SmsAdvertMapper extends BaseMapper { 11 | 12 | /** 13 | * 广告分页列表 14 | * 15 | * @param page 16 | * @param queryParams 17 | * @return 18 | */ 19 | Page getAdvertPage(Page page, AdvertPageQuery queryParams); 20 | } 21 | -------------------------------------------------------------------------------- /mall-sms/sms-boot/src/main/java/com/youlai/mall/sms/model/query/CouponPageQuery.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.sms.model.query; 2 | 3 | import com.youlai.common.base.BasePageQuery; 4 | import io.swagger.v3.oas.annotations.media.Schema; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Data; 7 | import lombok.NoArgsConstructor; 8 | 9 | /** 10 | * @author xinyi 11 | * @desc: 优惠券分页查询对象 12 | * @since 2021/7/11 13 | */ 14 | @Schema(description = "优惠券分页查询对象") 15 | @Data 16 | @NoArgsConstructor 17 | @AllArgsConstructor 18 | public class CouponPageQuery extends BasePageQuery { 19 | 20 | @Schema(description="状态") 21 | private Integer status; 22 | 23 | @Schema(description="优惠券码") 24 | private String code; 25 | } 26 | -------------------------------------------------------------------------------- /youlai-system/system-boot/src/main/java/com/youlai/system/model/entity/SysUserRole.java: -------------------------------------------------------------------------------- 1 | package com.youlai.system.model.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.TableField; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | 9 | /** 10 | * 用户和角色关联表 11 | * 12 | * @author haoxr 13 | * @since 2022/12/17 14 | */ 15 | @Data 16 | @AllArgsConstructor 17 | @NoArgsConstructor 18 | public class SysUserRole { 19 | /** 20 | * 用户ID 21 | */ 22 | private Long userId; 23 | 24 | /** 25 | * 角色ID 26 | */ 27 | private Long roleId; 28 | 29 | @TableField(exist = false) 30 | private static final long serialVersionUID = 1L; 31 | } -------------------------------------------------------------------------------- /youlai-common/common-core/src/main/java/com/youlai/common/base/BaseEntity.java: -------------------------------------------------------------------------------- 1 | package com.youlai.common.base; 2 | import com.baomidou.mybatisplus.annotation.FieldFill; 3 | import com.baomidou.mybatisplus.annotation.TableField; 4 | import lombok.Data; 5 | 6 | import java.io.Serial; 7 | import java.io.Serializable; 8 | import java.time.LocalDateTime; 9 | 10 | /** 11 | * 基础实体类 12 | */ 13 | @Data 14 | public class BaseEntity implements Serializable { 15 | 16 | @Serial 17 | private static final long serialVersionUID = 1L; 18 | 19 | @TableField(fill = FieldFill.INSERT) 20 | private LocalDateTime createTime; 21 | 22 | @TableField(fill = FieldFill.INSERT_UPDATE) 23 | private LocalDateTime updateTime; 24 | } 25 | -------------------------------------------------------------------------------- /youlai-system/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | youlai-mall 7 | com.youlai 8 | 3.2.1 9 | 10 | 4.0.0 11 | 12 | youlai-system 13 | pom 14 | 15 | 16 | system-api 17 | system-boot 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/model/form/OrderPaymentForm.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.oms.model.form; 2 | 3 | import com.youlai.mall.oms.enums.PaymentMethodEnum; 4 | import io.swagger.v3.oas.annotations.media.Schema; 5 | import io.swagger.v3.oas.annotations.media.Schema; 6 | import lombok.Data; 7 | 8 | /** 9 | * 订单支付表单对象 10 | * 11 | * @author haoxr 12 | * @since 2.3.0 13 | */ 14 | @Data 15 | @Schema(description ="订单支付表单对象") 16 | public class OrderPaymentForm { 17 | 18 | @Schema(description="订单编号") 19 | private String orderSn; 20 | 21 | @Schema(description="小程序 AppId") 22 | String appId; 23 | 24 | @Schema(description="支付方式") 25 | private PaymentMethodEnum paymentMethod; 26 | 27 | } 28 | -------------------------------------------------------------------------------- /mall-ums/ums-api/src/main/java/com/youlai/mall/ums/dto/MemberRegisterDto.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.ums.dto; 2 | 3 | import lombok.Data; 4 | 5 | import java.time.LocalDate; 6 | 7 | /** 8 | * 会员传输层对象 9 | * 10 | * @author haoxr 11 | * @since 2022/2/12 12 | */ 13 | @Data 14 | public class MemberRegisterDto { 15 | 16 | private Integer gender; 17 | 18 | private String nickName; 19 | 20 | private String mobile; 21 | 22 | private LocalDate birthday; 23 | 24 | private String avatarUrl; 25 | 26 | private String openid; 27 | 28 | private String sessionKey; 29 | 30 | private String city; 31 | 32 | private String country; 33 | 34 | private String language; 35 | 36 | private String province; 37 | 38 | } 39 | -------------------------------------------------------------------------------- /youlai-common/common-core/src/main/java/com/youlai/common/enums/GenderEnum.java: -------------------------------------------------------------------------------- 1 | package com.youlai.common.enums; 2 | 3 | import com.youlai.common.base.IBaseEnum; 4 | import lombok.Getter; 5 | 6 | /** 7 | * 性别枚举 8 | * 9 | * @author haoxr 10 | * @since 2022/4/10 11 | */ 12 | public enum GenderEnum implements IBaseEnum { 13 | 14 | MALE(1, "男"), 15 | FEMALE(2, "女"), 16 | UNKNOWN(0, "未知"); 17 | 18 | @Getter 19 | // @EnumValue // Mybatis-Plus 提供注解表示插入数据库时插入该值 20 | private Integer value; 21 | 22 | @Getter 23 | // @JsonValue // 表示对枚举序列化时返回此字段 24 | private String label; 25 | 26 | GenderEnum(Integer value, String label) { 27 | this.value = value; 28 | this.label = label; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /youlai-system/system-boot/src/main/java/com/youlai/system/model/form/DeptForm.java: -------------------------------------------------------------------------------- 1 | package com.youlai.system.model.form; 2 | 3 | import io.swagger.v3.oas.annotations.media.Schema; 4 | import jakarta.validation.constraints.NotNull; 5 | import lombok.Data; 6 | 7 | @Schema(description = "部门表单对象") 8 | @Data 9 | public class DeptForm { 10 | 11 | @Schema(description="部门ID") 12 | private Long id; 13 | 14 | @Schema(description="部门名称") 15 | private String name; 16 | 17 | @Schema(description="父部门ID") 18 | @NotNull(message = "父部门ID不能为空") 19 | private Long parentId; 20 | 21 | @Schema(description="状态(1:启用;0:禁用)") 22 | private Integer status; 23 | 24 | @Schema(description="排序(数字越小排名越靠前)") 25 | private Integer sort; 26 | 27 | } 28 | -------------------------------------------------------------------------------- /youlai-system/system-boot/src/main/java/com/youlai/system/converter/DictTypeConverter.java: -------------------------------------------------------------------------------- 1 | package com.youlai.system.converter; 2 | 3 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 4 | import com.youlai.system.model.entity.SysDictType; 5 | import com.youlai.system.model.form.DictTypeForm; 6 | import com.youlai.system.model.vo.DictTypePageVO; 7 | import org.mapstruct.Mapper; 8 | 9 | /** 10 | * 字典类型对象转换器 11 | * 12 | * @author haoxr 13 | * @since 2022/6/8 14 | */ 15 | @Mapper(componentModel = "spring") 16 | public interface DictTypeConverter { 17 | 18 | Page entity2Page(Page page); 19 | 20 | DictTypeForm entity2Form(SysDictType entity); 21 | 22 | SysDictType form2Entity(DictTypeForm entity); 23 | } 24 | -------------------------------------------------------------------------------- /mall-pms/pms-boot/src/main/java/com/youlai/mall/pms/model/vo/SpuPageVO.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.pms.model.vo; 2 | 3 | import io.swagger.v3.oas.annotations.media.Schema; 4 | import lombok.Data; 5 | 6 | /** 7 | * 【应用端】商品分页视图对象 8 | * 9 | * @author haoxr 10 | * @since 2021/8/8 11 | */ 12 | @Schema(description = "商品分页对象") 13 | @Data 14 | public class SpuPageVO { 15 | 16 | @Schema(description="商品ID") 17 | private Long id; 18 | 19 | @Schema(description="商品名称") 20 | private String name; 21 | 22 | @Schema(description="商品价格(单位:分)") 23 | private Long price; 24 | 25 | @Schema(description="销量") 26 | private Integer sales; 27 | 28 | @Schema(description="图片地址") 29 | private String picUrl; 30 | 31 | } 32 | -------------------------------------------------------------------------------- /youlai-common/common-mybatis/src/main/java/com/youlai/common/mybatis/enums/DataScopeEnum.java: -------------------------------------------------------------------------------- 1 | package com.youlai.common.mybatis.enums; 2 | 3 | import com.youlai.common.base.IBaseEnum; 4 | import lombok.Getter; 5 | 6 | /** 7 | * 数据权限枚举 8 | * 9 | * @author haoxr 10 | * @since 2022/10/14 11 | */ 12 | public enum DataScopeEnum implements IBaseEnum { 13 | 14 | /** 15 | * value 越小,数据权限范围越大 16 | */ 17 | ALL(0, "所有数据"), 18 | DEPT_AND_SUB(1, "部门及子部门数据"), 19 | DEPT(2, "本部门数据"), 20 | SELF(3, "本人数据"); 21 | 22 | @Getter 23 | private Integer value; 24 | 25 | @Getter 26 | private String label; 27 | 28 | DataScopeEnum(Integer value, String label) { 29 | this.value = value; 30 | this.label = label; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /youlai-auth/src/main/java/com/youlai/auth/AuthApplication.java: -------------------------------------------------------------------------------- 1 | package com.youlai.auth; 2 | 3 | import com.youlai.system.api.UserFeignClient; 4 | import com.youlai.mall.ums.api.MemberFeignClient; 5 | import org.springframework.boot.SpringApplication; 6 | import org.springframework.boot.autoconfigure.SpringBootApplication; 7 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 8 | import org.springframework.cloud.openfeign.EnableFeignClients; 9 | 10 | @EnableFeignClients(basePackageClasses = {UserFeignClient.class, MemberFeignClient.class}) 11 | @SpringBootApplication 12 | @EnableDiscoveryClient 13 | public class AuthApplication { 14 | 15 | public static void main(String[] args) { 16 | SpringApplication.run(AuthApplication.class, args); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /mall-sms/sms-boot/src/main/java/com/youlai/mall/sms/enums/PlatformEnum.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.sms.enums; 2 | 3 | import com.baomidou.mybatisplus.annotation.EnumValue; 4 | import com.fasterxml.jackson.annotation.JsonValue; 5 | import com.youlai.common.base.IBaseEnum; 6 | import lombok.Getter; 7 | 8 | @Getter 9 | public enum PlatformEnum implements IBaseEnum { 10 | 11 | ALL(0, "全平台"), 12 | APP(1, "APP"), 13 | PC(2, "PC"), 14 | ; 15 | 16 | @Getter 17 | @EnumValue // Mybatis-Plus 提供注解表示插入数据库时插入该值 18 | private Integer value; 19 | 20 | @Getter 21 | @JsonValue // 表示对枚举序列化时返回此字段 22 | private String label; 23 | 24 | PlatformEnum(Integer value, String label) { 25 | this.value = value; 26 | this.label = label; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /mall-ums/ums-boot/src/main/java/com/youlai/mall/ums/model/vo/MemberVO.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.ums.model.vo; 2 | 3 | import io.swagger.v3.oas.annotations.media.Schema; 4 | import lombok.Data; 5 | 6 | /** 7 | * 会员视图层对象 8 | * 9 | * @author haoxr 10 | * @since 2022/2/12 21:13 11 | */ 12 | @Schema(description = "会员视图层对象") 13 | @Data 14 | public class MemberVO { 15 | 16 | @Schema(description="会员ID") 17 | private Long id; 18 | 19 | @Schema(description="会员昵称") 20 | private String nickName; 21 | 22 | @Schema(description="会员头像地址") 23 | private String avatarUrl; 24 | 25 | @Schema(description="会员手机号") 26 | private String mobile; 27 | 28 | @Schema(description="会员余额(单位:分)") 29 | private Long balance; 30 | 31 | } 32 | -------------------------------------------------------------------------------- /youlai-system/system-boot/src/main/java/com/youlai/system/model/vo/UserImportVO.java: -------------------------------------------------------------------------------- 1 | package com.youlai.system.model.vo; 2 | 3 | import com.alibaba.excel.annotation.ExcelProperty; 4 | import lombok.Data; 5 | 6 | /** 7 | * 用户导入对象 8 | * 9 | * @author haoxr 10 | * @since 2022/4/10 11 | */ 12 | @Data 13 | public class UserImportVO { 14 | 15 | @ExcelProperty(value = "用户名") 16 | private String username; 17 | 18 | @ExcelProperty(value = "昵称") 19 | private String nickname; 20 | 21 | @ExcelProperty(value = "性别") 22 | private String gender; 23 | 24 | @ExcelProperty(value = "手机号码") 25 | private String mobile; 26 | 27 | @ExcelProperty(value = "邮箱") 28 | private String email; 29 | 30 | @ExcelProperty("角色") 31 | private String roleCodes; 32 | 33 | } 34 | -------------------------------------------------------------------------------- /mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/admin/OmsOrderService.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.oms.service.admin; 2 | 3 | import com.baomidou.mybatisplus.core.metadata.IPage; 4 | import com.baomidou.mybatisplus.extension.service.IService; 5 | import com.youlai.mall.oms.model.entity.OmsOrder; 6 | import com.youlai.mall.oms.model.query.OrderPageQuery; 7 | import com.youlai.mall.oms.model.vo.OmsOrderPageVO; 8 | 9 | /** 10 | * Admin-订单业务接口 11 | * 12 | * @author haoxr 13 | * @since 2.3.0 14 | */ 15 | public interface OmsOrderService extends IService { 16 | /** 17 | * 订单分页列表 18 | * 19 | * @param queryParams {@link OrderPageQuery} 20 | * @return 21 | */ 22 | IPage getOrderPage(OrderPageQuery queryParams); 23 | 24 | 25 | } 26 | 27 | -------------------------------------------------------------------------------- /youlai-gateway/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM openjdk:17-jdk-alpine 2 | MAINTAINER youlai youlaitech@163.com 3 | 4 | # 设置国内镜像源(中国科技大学镜像源),修改容器时区(alpine镜像需安装tzdata来设置时区) 5 | RUN echo "https://mirrors.ustc.edu.cn/alpine/v3.7/main/" > /etc/apk/repositories && \ 6 | apk --no-cache add tzdata && \ 7 | cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \ 8 | echo "Asia/Shanghai" > /etc/timezone 9 | 10 | # /tmp 目录作为容器数据卷目录,SpringBoot内嵌Tomcat容器默认使用/tmp作为工作目录,任何向 /tmp 中写入的信息不会记录进容器存储层,从而保证容器存储层的无状态化 11 | # 在宿主机的/var/lib/docker目录下创建一个临时文件并把它链接到容器中的/tmp目录 12 | VOLUME /tmp 13 | 14 | # 复制jar至镜像 15 | ADD target/youlai-gateway.jar app.jar 16 | 17 | CMD java \ 18 | -Xms128m \ 19 | -Xmx128m \ 20 | -Djava.security.egd=file:/dev/./urandom \ 21 | -jar /app.jar 22 | 23 | EXPOSE 9999 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /youlai-system/system-boot/src/main/java/com/youlai/system/mapper/SysDeptMapper.java: -------------------------------------------------------------------------------- 1 | package com.youlai.system.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.conditions.Wrapper; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | import com.baomidou.mybatisplus.core.toolkit.Constants; 6 | import com.youlai.common.mybatis.annotation.DataPermission; 7 | import com.youlai.system.model.entity.SysDept; 8 | import org.apache.ibatis.annotations.Mapper; 9 | import org.apache.ibatis.annotations.Param; 10 | 11 | import java.util.List; 12 | 13 | 14 | @Mapper 15 | public interface SysDeptMapper extends BaseMapper { 16 | 17 | @DataPermission(deptIdColumnName = "id") 18 | @Override 19 | List selectList(@Param(Constants.WRAPPER) Wrapper queryWrapper); 20 | } 21 | -------------------------------------------------------------------------------- /youlai-system/system-boot/src/main/java/com/youlai/system/model/vo/UserInfoVO.java: -------------------------------------------------------------------------------- 1 | package com.youlai.system.model.vo; 2 | 3 | import io.swagger.v3.oas.annotations.media.Schema; 4 | import lombok.Data; 5 | 6 | import java.util.Set; 7 | 8 | /** 9 | * 用户登录视图对象 10 | * 11 | * @author haoxr 12 | * @since 2022/1/14 13 | */ 14 | @Schema(description ="当前登录用户视图对象") 15 | @Data 16 | public class UserInfoVO { 17 | 18 | @Schema(description="用户ID") 19 | private Long userId; 20 | 21 | @Schema(description="用户昵称") 22 | private String nickname; 23 | 24 | @Schema(description="头像地址") 25 | private String avatar; 26 | 27 | @Schema(description="用户角色编码集合") 28 | private Set roles; 29 | 30 | @Schema(description="用户权限标识集合") 31 | private Set perms; 32 | 33 | } 34 | -------------------------------------------------------------------------------- /mall-sms/sms-boot/src/main/java/com/youlai/mall/sms/enums/CouponFaceValueTypeEnum.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.sms.enums; 2 | 3 | import com.baomidou.mybatisplus.annotation.EnumValue; 4 | import com.fasterxml.jackson.annotation.JsonValue; 5 | import com.youlai.common.base.IBaseEnum; 6 | import lombok.Getter; 7 | 8 | @Getter 9 | public enum CouponFaceValueTypeEnum implements IBaseEnum { 10 | 11 | CASH(1, "现金"), 12 | DISCOUNT(2, "折扣"), 13 | ; 14 | 15 | @Getter 16 | @EnumValue // Mybatis-Plus 提供注解表示插入数据库时插入该值 17 | private Integer value; 18 | 19 | @Getter 20 | @JsonValue // 表示对枚举序列化时返回此字段 21 | private String label; 22 | 23 | CouponFaceValueTypeEnum(Integer value, String label) { 24 | this.value = value; 25 | this.label = label; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Created by .ignore support plugin (hsz.mobi) 2 | ### Example SysUserDetails template template 3 | ### Example SysUserDetails template 4 | 5 | # IntelliJ project files 6 | .idea 7 | *.iml 8 | out 9 | gen 10 | target 11 | *.log 12 | logs 13 | data 14 | 15 | docs/docker/minio/config 16 | 17 | # Nacos 18 | !**/nacos/target 19 | **/nacos/bin/work 20 | **/nacos/data 21 | 22 | **/nacos/LICENSE 23 | **/nacos/NOTICE 24 | 25 | # Canal 26 | h2.mv.db 27 | **/meta.dat 28 | 29 | # https://raw.githubusercontent.com/redhat-developer/vscode-java/master/.gitignore 30 | # vscode 31 | server 32 | node_modules 33 | *.vsix 34 | .DS_Store 35 | .vscode-test 36 | undefined 37 | dist 38 | jre 39 | .settings 40 | .classpath 41 | .project 42 | test/resources/projects/**/.vscode 43 | test/resources/projects/maven/salut/testGradle -------------------------------------------------------------------------------- /mall-sms/sms-boot/src/main/java/com/youlai/mall/sms/service/SmsAdvertService.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.sms.service; 2 | 3 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 4 | import com.baomidou.mybatisplus.extension.service.IService; 5 | import com.youlai.mall.sms.model.entity.SmsAdvert; 6 | import com.youlai.mall.sms.model.query.AdvertPageQuery; 7 | import com.youlai.mall.sms.model.vo.BannerVO; 8 | import com.youlai.mall.sms.model.vo.AdvertPageVO; 9 | 10 | import java.util.List; 11 | 12 | public interface SmsAdvertService extends IService { 13 | 14 | /** 15 | * 广告分页列表 16 | * 17 | * @param queryParams 18 | * @return 19 | */ 20 | Page getAdvertPage(AdvertPageQuery queryParams); 21 | 22 | List getBannerList(); 23 | } 24 | -------------------------------------------------------------------------------- /youlai-common/common-mybatis/src/main/java/com/youlai/common/mybatis/handler/StringArrayJsonTypeHandler.java: -------------------------------------------------------------------------------- 1 | package com.youlai.common.mybatis.handler; 2 | 3 | import lombok.extern.slf4j.Slf4j; 4 | import org.apache.ibatis.type.JdbcType; 5 | import org.apache.ibatis.type.MappedJdbcTypes; 6 | import org.apache.ibatis.type.MappedTypes; 7 | import org.springframework.stereotype.Component; 8 | 9 | /** 10 | * String 数组类型转换 json 11 | * 12 | * @author Gadfly 13 | * @since 1.0.0 14 | */ 15 | @Slf4j 16 | @Component 17 | @MappedTypes(value = {String[].class}) 18 | @MappedJdbcTypes(value = {JdbcType.OTHER}, includeNullJdbcType = true) 19 | public class StringArrayJsonTypeHandler extends ArrayObjectJsonTypeHandler { 20 | public StringArrayJsonTypeHandler() { 21 | super(String[].class); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /youlai-system/system-boot/src/main/java/com/youlai/system/listener/rabbitmq/CanalListener.java: -------------------------------------------------------------------------------- 1 | package com.youlai.system.listener.rabbitmq; 2 | 3 | import com.youlai.system.service.SysMenuService; 4 | import lombok.RequiredArgsConstructor; 5 | import lombok.extern.slf4j.Slf4j; 6 | import org.springframework.messaging.handler.annotation.Payload; 7 | import org.springframework.stereotype.Component; 8 | 9 | import java.util.Arrays; 10 | 11 | /** 12 | * Canal + RabbitMQ 监听数据库数据变化 13 | * 14 | * @author haoxr 15 | * @since 2021/11/4 23:14 16 | */ 17 | @Component 18 | @Slf4j 19 | @RequiredArgsConstructor 20 | public class CanalListener { 21 | 22 | private final SysMenuService menuService; 23 | 24 | //@RabbitListener(queues = "canal.queue") 25 | public void handleDataChange() { 26 | 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /youlai-system/system-boot/src/main/java/com/youlai/system/model/form/DictForm.java: -------------------------------------------------------------------------------- 1 | package com.youlai.system.model.form; 2 | 3 | 4 | import io.swagger.v3.oas.annotations.media.Schema; 5 | import lombok.Data; 6 | 7 | @Schema(description = "字典表单对象") 8 | @Data 9 | public class DictForm { 10 | 11 | @Schema(description="字典ID") 12 | private Long id; 13 | 14 | @Schema(description="类型编码") 15 | private String typeCode; 16 | 17 | @Schema(description="字典名称") 18 | private String name; 19 | 20 | @Schema(description="字典值") 21 | private String value; 22 | 23 | @Schema(description="状态(1:启用;0:禁用)") 24 | private Integer status; 25 | 26 | @Schema(description="排序") 27 | private Integer sort; 28 | 29 | @Schema(description = "字典备注") 30 | private String remark; 31 | 32 | } 33 | -------------------------------------------------------------------------------- /mall-sms/sms-boot/src/main/resources/mapper/SmsAdvertMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 21 | 22 | -------------------------------------------------------------------------------- /youlai-common/common-rabbitmq/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | youlai-common 7 | com.youlai 8 | 3.2.1 9 | 10 | 4.0.0 11 | 12 | common-rabbitmq 13 | 14 | 15 | 16 | org.springframework.boot 17 | spring-boot-starter-amqp 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /mall-oms/oms-boot/Dockerfile: -------------------------------------------------------------------------------- 1 | # 基础镜像 2 | FROM openjdk:17-jdk-alpine 3 | 4 | # 维护者信息 5 | MAINTAINER youlai 6 | 7 | RUN echo "https://mirrors.ustc.edu.cn/alpine/v3.7/main/" > /etc/apk/repositories && \ 8 | apk --no-cache add tzdata && \ 9 | cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \ 10 | echo "Asia/Shanghai" > /etc/timezone 11 | 12 | # /tmp 目录作为容器数据卷目录,SpringBoot内嵌Tomcat容器默认使用/tmp作为工作目录,任何向 /tmp 中写入的信息不会记录进容器存储层 13 | # 在宿主机的/var/lib/docker目录下创建一个临时文件并把它链接到容器中的/tmp目录 14 | VOLUME /tmp 15 | 16 | # 复制主机文件至镜像内,复制的目录需放置在 Dockerfile 文件同级目录下 17 | ADD target/oms-boot.jar app.jar 18 | 19 | # 容器启动执行命令 20 | CMD java \ 21 | -Xms128m \ 22 | -Xmx128m \ 23 | -Djava.security.egd=file:/dev/./urandom \ 24 | -jar /app.jar 25 | 26 | # 声明容器提供服务端口 27 | EXPOSE 8803 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /mall-pms/pms-boot/Dockerfile: -------------------------------------------------------------------------------- 1 | # 基础镜像 2 | FROM openjdk:17-jdk-alpine 3 | 4 | # 维护者信息 5 | MAINTAINER youlai 6 | 7 | RUN echo "https://mirrors.ustc.edu.cn/alpine/v3.7/main/" > /etc/apk/repositories && \ 8 | apk --no-cache add tzdata && \ 9 | cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \ 10 | echo "Asia/Shanghai" > /etc/timezone 11 | 12 | # /tmp 目录作为容器数据卷目录,SpringBoot内嵌Tomcat容器默认使用/tmp作为工作目录,任何向 /tmp 中写入的信息不会记录进容器存储层 13 | # 在宿主机的/var/lib/docker目录下创建一个临时文件并把它链接到容器中的/tmp目录 14 | VOLUME /tmp 15 | 16 | # 复制主机文件至镜像内,复制的目录需放置在 Dockerfile 文件同级目录下 17 | ADD target/pms-boot.jar app.jar 18 | 19 | # 容器启动执行命令 20 | CMD java \ 21 | -Xms128m \ 22 | -Xmx128m \ 23 | -Djava.security.egd=file:/dev/./urandom \ 24 | -jar /app.jar 25 | 26 | # 声明容器提供服务端口 27 | EXPOSE 8802 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /mall-sms/sms-boot/Dockerfile: -------------------------------------------------------------------------------- 1 | # 基础镜像 2 | FROM openjdk:17-jdk-alpine 3 | 4 | # 维护者信息 5 | MAINTAINER youlai 6 | 7 | RUN echo "https://mirrors.ustc.edu.cn/alpine/v3.7/main/" > /etc/apk/repositories && \ 8 | apk --no-cache add tzdata && \ 9 | cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \ 10 | echo "Asia/Shanghai" > /etc/timezone 11 | 12 | # /tmp 目录作为容器数据卷目录,SpringBoot内嵌Tomcat容器默认使用/tmp作为工作目录,任何向 /tmp 中写入的信息不会记录进容器存储层 13 | # 在宿主机的/var/lib/docker目录下创建一个临时文件并把它链接到容器中的/tmp目录 14 | VOLUME /tmp 15 | 16 | # 复制主机文件至镜像内,复制的目录需放置在 Dockerfile 文件同级目录下 17 | ADD target/sms-boot.jar app.jar 18 | 19 | # 容器启动执行命令 20 | CMD java \ 21 | -Xms128m \ 22 | -Xmx128m \ 23 | -Djava.security.egd=file:/dev/./urandom \ 24 | -jar /app.jar 25 | 26 | # 声明容器提供服务端口 27 | EXPOSE 8804 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /mall-sms/sms-boot/src/main/java/com/youlai/mall/sms/enums/CouponTypeEnum.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.sms.enums; 2 | 3 | import com.baomidou.mybatisplus.annotation.EnumValue; 4 | import com.fasterxml.jackson.annotation.JsonValue; 5 | import com.youlai.common.base.IBaseEnum; 6 | import lombok.Getter; 7 | 8 | @Getter 9 | public enum CouponTypeEnum implements IBaseEnum { 10 | 11 | WZ(0, null), 12 | MJ(1, "满减券"), 13 | ZJ(2, "直减券"), 14 | ZK(3, "折扣券") 15 | ; 16 | 17 | @Getter 18 | @EnumValue // Mybatis-Plus 提供注解表示插入数据库时插入该值 19 | private Integer value; 20 | 21 | @Getter 22 | @JsonValue // 表示对枚举序列化时返回此字段 23 | private String label; 24 | 25 | CouponTypeEnum(Integer value, String label) { 26 | this.value = value; 27 | this.label = label; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /mall-ums/ums-boot/Dockerfile: -------------------------------------------------------------------------------- 1 | # 基础镜像 2 | FROM openjdk:17-jdk-alpine 3 | 4 | # 维护者信息 5 | MAINTAINER youlai 6 | 7 | RUN echo "https://mirrors.ustc.edu.cn/alpine/v3.7/main/" > /etc/apk/repositories && \ 8 | apk --no-cache add tzdata && \ 9 | cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \ 10 | echo "Asia/Shanghai" > /etc/timezone 11 | 12 | # /tmp 目录作为容器数据卷目录,SpringBoot内嵌Tomcat容器默认使用/tmp作为工作目录,任何向 /tmp 中写入的信息不会记录进容器存储层 13 | # 在宿主机的/var/lib/docker目录下创建一个临时文件并把它链接到容器中的/tmp目录 14 | VOLUME /tmp 15 | 16 | # 复制主机文件至镜像内,复制的目录需放置在 Dockerfile 文件同级目录下 17 | ADD target/ums-boot.jar app.jar 18 | 19 | # 容器启动执行命令 20 | CMD java \ 21 | -Xms128m \ 22 | -Xmx128m \ 23 | -Djava.security.egd=file:/dev/./urandom \ 24 | -jar /app.jar 25 | 26 | # 声明容器提供服务端口 27 | EXPOSE 8801 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /youlai-system/system-api/src/main/java/com/youlai/system/api/UserFeignClient.java: -------------------------------------------------------------------------------- 1 | package com.youlai.system.api; 2 | 3 | import com.youlai.common.web.config.FeignDecoderConfig; 4 | import com.youlai.system.api.fallback.UserFeignFallbackClient; 5 | import com.youlai.system.dto.UserAuthInfo; 6 | import com.youlai.common.result.Result; 7 | import org.springframework.cloud.openfeign.FeignClient; 8 | import org.springframework.web.bind.annotation.GetMapping; 9 | import org.springframework.web.bind.annotation.PathVariable; 10 | 11 | @FeignClient(value = "youlai-system", fallback = UserFeignFallbackClient.class, configuration = {FeignDecoderConfig.class}) 12 | public interface UserFeignClient { 13 | 14 | @GetMapping("/api/v1/users/{username}/authInfo") 15 | UserAuthInfo getUserAuthInfo(@PathVariable String username); 16 | } 17 | -------------------------------------------------------------------------------- /mall-oms/oms-boot/src/main/resources/mapper/OmsOrderItemMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 24 | 25 | -------------------------------------------------------------------------------- /mall-pms/pms-boot/src/main/java/com/youlai/mall/pms/model/query/SpuPageQuery.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.pms.model.query; 2 | 3 | import com.youlai.common.base.BasePageQuery; 4 | import io.swagger.v3.oas.annotations.media.Schema; 5 | import lombok.Data; 6 | 7 | /** 8 | * 商品分页查询对象 9 | * 10 | * @author haoxr 11 | * @since 2022/2/5 13:09 12 | */ 13 | 14 | @Schema(description = "商品分页查询对象") 15 | @Data 16 | public class SpuPageQuery extends BasePageQuery { 17 | 18 | @Schema(description="关键字") 19 | private String keywords; 20 | 21 | @Schema(description="商品分类ID") 22 | private Long categoryId; 23 | 24 | @Schema(description="排序字段名") 25 | private String sortField; 26 | 27 | @Schema(description="排序规则(asc:升序;desc:降序)") 28 | private String sort; 29 | 30 | } 31 | -------------------------------------------------------------------------------- /youlai-system/system-boot/Dockerfile: -------------------------------------------------------------------------------- 1 | # 基础镜像 2 | FROM openjdk:17-jdk-alpine 3 | 4 | # 维护者信息 5 | MAINTAINER youlai 6 | 7 | RUN echo "https://mirrors.ustc.edu.cn/alpine/v3.7/main/" > /etc/apk/repositories && \ 8 | apk --no-cache add tzdata && \ 9 | cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \ 10 | echo "Asia/Shanghai" > /etc/timezone 11 | 12 | # /tmp 目录作为容器数据卷目录,SpringBoot内嵌Tomcat容器默认使用/tmp作为工作目录,任何向 /tmp 中写入的信息不会记录进容器存储层 13 | # 在宿主机的/var/lib/docker目录下创建一个临时文件并把它链接到容器中的/tmp目录 14 | VOLUME /tmp 15 | 16 | # 复制主机文件至镜像内,复制的目录需放置在 Dockerfile 文件同级目录下 17 | ADD target/system-boot.jar app.jar 18 | 19 | # 容器启动执行命令 20 | CMD java \ 21 | -Xms128m \ 22 | -Xmx128m \ 23 | -Djava.security.egd=file:/dev/./urandom \ 24 | -jar /app.jar 25 | 26 | # 声明容器提供服务端口 27 | EXPOSE 8800 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /youlai-system/system-boot/src/main/java/com/youlai/system/converter/DictConverter.java: -------------------------------------------------------------------------------- 1 | package com.youlai.system.converter; 2 | 3 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 4 | import com.youlai.system.model.entity.SysDict; 5 | import com.youlai.system.model.form.DictForm; 6 | import com.youlai.system.model.vo.DictPageVO; 7 | import org.mapstruct.InheritInverseConfiguration; 8 | import org.mapstruct.Mapper; 9 | 10 | /** 11 | * 字典数据项对象转换器 12 | * 13 | * @author haoxr 14 | * @since 2022/6/8 15 | */ 16 | @Mapper(componentModel = "spring") 17 | public interface DictConverter { 18 | 19 | Page entity2Page(Page page); 20 | 21 | DictForm entity2Form(SysDict entity); 22 | 23 | @InheritInverseConfiguration(name="entity2Form") 24 | SysDict form2Entity(DictForm entity); 25 | } 26 | -------------------------------------------------------------------------------- /mall-sms/sms-boot/src/main/java/com/youlai/mall/sms/enums/ValidityPeriodTypeEnum.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.sms.enums; 2 | 3 | import com.baomidou.mybatisplus.annotation.EnumValue; 4 | import com.fasterxml.jackson.annotation.JsonValue; 5 | import com.youlai.common.base.IBaseEnum; 6 | import lombok.Getter; 7 | 8 | @Getter 9 | public enum ValidityPeriodTypeEnum implements IBaseEnum { 10 | 11 | UNKNOWN(0, null), 12 | DATE_RANGE(1, "日期范围"), 13 | FIXED_DAYS(2, "固定天数"), 14 | ; 15 | @Getter 16 | @EnumValue // Mybatis-Plus 提供注解表示插入数据库时插入该值 17 | private Integer value; 18 | 19 | @Getter 20 | @JsonValue // 表示对枚举序列化时返回此字段 21 | private String label; 22 | 23 | ValidityPeriodTypeEnum(Integer value, String label) { 24 | this.value = value; 25 | this.label = label; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /youlai-common/common-web/src/main/resources/ValidationMessages.properties: -------------------------------------------------------------------------------- 1 | # \u901A\u7528\u5F02\u5E38\u4FE1\u606F 2 | id.positive=id\u5FC5\u987B\u4E3A\u6B63\u6574\u6570 3 | page.count.min=\u5206\u9875\u6570\u91CF\u5FC5\u987B\u4E3A\u6B63\u6574\u6570 4 | page.count.max=\u5206\u9875\u6570\u91CF\u5FC5\u987B\u5C0F\u4E8E{value} 5 | page.number.min=\u5206\u9875\u9875\u7801\u5FC5\u987B\u4E3A\u6B63\u6574\u6570 6 | date.past=\u65E5\u671F\u5FC5\u987B\u662F\u8FC7\u53BB\u7684\u65F6\u95F4 7 | date.interval=\u7ED3\u675F\u65E5\u671F\u5FC5\u987B\u65E9\u4E8E\u5F00\u59CB\u65E5\u671F 8 | text.length.min=\u6700\u5C0F\u957F\u5EA6\u5FC5\u987B\u5927\u4E8E{min} 9 | text.length.max=\u6700\u5927\u957F\u5EA6\u5FC5\u987B\u5C0F\u4E8E{max} 10 | phone.valid=\u5FC5\u987B\u662F\u5927\u964611\u4F4D\u624B\u673A\u53F7 11 | zipcode.valid=\u90AE\u7F16\u5FC5\u987B\u4E3A6\u4F4D\u6570\u5B57 -------------------------------------------------------------------------------- /youlai-system/system-boot/src/main/java/com/youlai/system/mapper/SysRoleMenuMapper.java: -------------------------------------------------------------------------------- 1 | package com.youlai.system.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.youlai.system.model.bo.RolePermsBO; 5 | import com.youlai.system.model.entity.SysRoleMenu; 6 | import org.apache.ibatis.annotations.Mapper; 7 | 8 | import java.util.List; 9 | 10 | /** 11 | * 角色菜单持久层 12 | * 13 | * @author haoxr 14 | * @since 2022/6/4 15 | */ 16 | @Mapper 17 | public interface SysRoleMenuMapper extends BaseMapper { 18 | 19 | /** 20 | * 获取角色拥有的菜单ID集合 21 | * 22 | * @param roleId 23 | * @return 24 | */ 25 | List listMenuIdsByRoleId(Long roleId); 26 | 27 | /** 28 | * 获取权限和拥有权限的角色列表 29 | */ 30 | List getRolePermsList(String roleCode); 31 | } 32 | -------------------------------------------------------------------------------- /mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/model/dto/OrderItemDTO.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.oms.model.dto; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * 订单商品 7 | * 8 | * @author haoxr 9 | * @since 2.0.0 10 | */ 11 | @Data 12 | public class OrderItemDTO { 13 | 14 | /** 15 | * 商品库存单元ID 16 | */ 17 | private Long skuId; 18 | 19 | /** 20 | * SKU编码 21 | */ 22 | private String skuSn; 23 | 24 | /** 25 | * SKU名称 26 | */ 27 | private String skuName; 28 | 29 | /** 30 | * 商品图片地址 31 | */ 32 | private String picUrl; 33 | 34 | /** 35 | * 商品价格 36 | */ 37 | private Long price; 38 | 39 | /** 40 | * 商品名称 41 | */ 42 | private String spuName; 43 | 44 | /** 45 | * 订单商品数量 46 | */ 47 | private Integer quantity; 48 | } 49 | -------------------------------------------------------------------------------- /mall-pms/pms-api/src/main/java/com/youlai/mall/pms/model/dto/SkuInfoDTO.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.pms.model.dto; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * 商品库存信息DTO 7 | *

8 | * 用于表示商品的库存信息。 9 | * 10 | * @author haoxr 11 | * @since 2.0.0 12 | */ 13 | 14 | @Data 15 | public class SkuInfoDTO { 16 | /** 17 | * SKU的唯一标识符 18 | */ 19 | private Long id; 20 | /** 21 | * SKU 编号 22 | */ 23 | private String skuSn; 24 | /** 25 | * SKU 名称 26 | */ 27 | private String skuName; 28 | /** 29 | * SKU 图片地址 30 | */ 31 | private String picUrl; 32 | /** 33 | * SKU 价格 34 | */ 35 | private Long price; 36 | /** 37 | * SKU 库存数量 38 | */ 39 | private Integer stock; 40 | /** 41 | * 所属SPU的名称 42 | */ 43 | private String spuName; 44 | } 45 | -------------------------------------------------------------------------------- /mall-ums/ums-api/src/main/java/com/youlai/mall/ums/dto/RechargeDTO.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.ums.dto; 2 | 3 | import io.swagger.v3.oas.annotations.media.Schema; 4 | import lombok.Data; 5 | 6 | import java.math.BigDecimal; 7 | 8 | @Schema 9 | @Data 10 | public class RechargeDTO { 11 | 12 | @Schema(description = "充值金额") 13 | private String price; 14 | 15 | @Schema(description = "充值说明") 16 | private String name; 17 | 18 | @Schema(description = "用来通知指定地址") 19 | private String callbackurl; 20 | 21 | @Schema(description = "跳转地址") 22 | private String reurl; 23 | 24 | @Schema(description = "用户存放您的用户ID") 25 | private String thirduid; 26 | 27 | @Schema(description = "备注") 28 | private String remarks; 29 | 30 | @Schema(description = "其他信息") 31 | private String other; 32 | 33 | 34 | } 35 | -------------------------------------------------------------------------------- /youlai-common/common-core/src/main/java/com/youlai/common/constant/RedisConstants.java: -------------------------------------------------------------------------------- 1 | package com.youlai.common.constant; 2 | 3 | public interface RedisConstants { 4 | 5 | /** 6 | * 黑名单TOKEN Key前缀 7 | */ 8 | String TOKEN_BLACKLIST_PREFIX = "token:blacklist:"; 9 | 10 | /** 11 | * 图形验证码key前缀 12 | */ 13 | String CAPTCHA_CODE_PREFIX = "captcha_code:"; 14 | 15 | /** 16 | * 登录短信验证码key前缀 17 | */ 18 | String LOGIN_SMS_CODE_PREFIX = "sms_code:login"; 19 | 20 | /** 21 | * 注册短信验证码key前缀 22 | */ 23 | String REGISTER_SMS_CODE_PREFIX = "sms_code:register"; 24 | 25 | 26 | /** 27 | * 角色和权限缓存前缀 28 | */ 29 | String ROLE_PERMS_PREFIX = "role_perms:"; 30 | 31 | 32 | /** 33 | * JWT 密钥对(包含公钥和私钥) 34 | */ 35 | String JWK_SET_KEY = "jwk_set"; 36 | 37 | } 38 | -------------------------------------------------------------------------------- /mall-pms/pms-boot/src/main/java/com/youlai/mall/pms/model/form/PmsSpuForm.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.pms.model.form; 2 | 3 | import com.youlai.mall.pms.model.entity.PmsSku; 4 | import lombok.Data; 5 | import java.util.List; 6 | 7 | /** 8 | * 商品SPU表单对象 9 | * 10 | * @author haoxr 11 | * @since 2022/7/2 12 | */ 13 | @Data 14 | public class PmsSpuForm { 15 | 16 | private Long id; 17 | private String name; 18 | private Long categoryId; 19 | private Long brandId; 20 | private Long originPrice; 21 | private Long price; 22 | private String picUrl; 23 | private String[] subPicUrls; 24 | private String description; 25 | private String detail; 26 | 27 | private List attrList; 28 | 29 | private List specList; 30 | 31 | private List skuList; 32 | } 33 | -------------------------------------------------------------------------------- /mall-sms/sms-boot/src/main/java/com/youlai/mall/sms/SmsApplication.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.sms; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 6 | import org.springframework.cloud.openfeign.EnableFeignClients; 7 | import org.springframework.scheduling.annotation.EnableScheduling; 8 | 9 | /** 10 | * 优惠营销系统 11 | * 秒杀功能开发 12 | * 1、管理员端开发秒杀活动管理界面(创建秒杀活动场次,建立秒杀活动场次与商品关联) 13 | * 2、秒杀预热。采用 异步+定时 将秒杀数据提前同步到redis中 14 | */ 15 | @SpringBootApplication 16 | @EnableDiscoveryClient 17 | @EnableFeignClients 18 | @EnableScheduling 19 | public class SmsApplication { 20 | 21 | public static void main(String[] args) { 22 | SpringApplication.run(SmsApplication.class, args); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/mapper/OrderMapper.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.oms.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 5 | import com.youlai.mall.oms.model.bo.OrderBO; 6 | import com.youlai.mall.oms.model.entity.OmsOrder; 7 | import com.youlai.mall.oms.model.query.OrderPageQuery; 8 | import org.apache.ibatis.annotations.Mapper; 9 | 10 | /** 11 | * 订单数据访问层 12 | * 13 | * @author huawei 14 | * @since 2020-12-30 22:31:10 15 | */ 16 | @Mapper 17 | public interface OrderMapper extends BaseMapper { 18 | 19 | /** 20 | * 订单分页列表 21 | * 22 | * @param page 23 | * @param queryParams 24 | * @return 25 | */ 26 | Page getOrderPage(Page page, OrderPageQuery queryParams); 27 | } 28 | -------------------------------------------------------------------------------- /mall-sms/sms-boot/src/main/java/com/youlai/mall/sms/converter/AdvertConverter.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.sms.converter; 2 | 3 | 4 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 5 | import com.youlai.mall.sms.model.entity.SmsAdvert; 6 | import com.youlai.mall.sms.model.vo.BannerVO; 7 | import com.youlai.mall.sms.model.vo.AdvertPageVO; 8 | import org.mapstruct.Mapper; 9 | 10 | import java.util.List; 11 | 12 | /** 13 | * advert实体转换器 14 | * 15 | * @author haoxr 16 | * @since 2022/5/29 17 | */ 18 | @Mapper(componentModel = "spring") 19 | public interface AdvertConverter { 20 | 21 | AdvertPageVO entity2PageVo(SmsAdvert entity); 22 | 23 | Page entity2PageVo(Page po); 24 | 25 | BannerVO entity2BannerVo(SmsAdvert entity); 26 | 27 | List entity2BannerVo(List entities); 28 | } -------------------------------------------------------------------------------- /mall-sms/sms-boot/src/main/resources/mapper/SmsCouponSpuMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | id,coupon_id,spu_id, 16 | spu_name 17 | 18 | 19 | -------------------------------------------------------------------------------- /mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/converter/OrderItemConverter.java: -------------------------------------------------------------------------------- 1 | 2 | package com.youlai.mall.oms.converter; 3 | 4 | import com.youlai.mall.oms.model.entity.OmsOrderItem; 5 | import com.youlai.mall.oms.model.form.OrderSubmitForm; 6 | import org.mapstruct.Mapper; 7 | import org.mapstruct.Mapping; 8 | import org.mapstruct.Mappings; 9 | 10 | import java.util.List; 11 | 12 | 13 | /** 14 | * 订单商品明细对象转化器 15 | * 16 | * @author haoxr 17 | * @since 2.0.0 18 | */ 19 | @Mapper(componentModel = "spring") 20 | public interface OrderItemConverter { 21 | 22 | @Mappings({ 23 | @Mapping(target = "totalAmount", expression = "java(item.getPrice() * item.getQuantity())"), 24 | }) 25 | OmsOrderItem item2Entity(OrderSubmitForm.OrderItem item); 26 | 27 | List item2Entity(List list); 28 | 29 | } -------------------------------------------------------------------------------- /mall-pms/pms-boot/src/main/java/com/youlai/mall/pms/model/entity/PmsCategory.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.pms.model.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableId; 5 | import com.fasterxml.jackson.annotation.JsonInclude; 6 | import com.youlai.common.base.BaseEntity; 7 | import lombok.Data; 8 | 9 | @Data 10 | public class PmsCategory extends BaseEntity { 11 | 12 | @TableId(type= IdType.AUTO) 13 | private Long id; 14 | private String name; 15 | private Long parentId; 16 | private String iconUrl; 17 | @JsonInclude(value = JsonInclude.Include.NON_NULL) 18 | private Integer level; 19 | @JsonInclude(value = JsonInclude.Include.NON_NULL) 20 | private Integer sort; 21 | @JsonInclude(value = JsonInclude.Include.NON_NULL) 22 | private Integer visible; 23 | } 24 | -------------------------------------------------------------------------------- /youlai-system/system-boot/src/main/java/com/youlai/system/model/form/RoleForm.java: -------------------------------------------------------------------------------- 1 | package com.youlai.system.model.form; 2 | 3 | import io.swagger.v3.oas.annotations.media.Schema; 4 | import jakarta.validation.constraints.NotBlank; 5 | import lombok.Data; 6 | 7 | @Schema(description = "角色表单对象") 8 | @Data 9 | public class RoleForm { 10 | 11 | @Schema(description="角色ID") 12 | private Long id; 13 | 14 | @Schema(description="角色名称") 15 | @NotBlank(message = "角色名称不能为空") 16 | private String name; 17 | 18 | @Schema(description="角色编码") 19 | @NotBlank(message = "角色编码不能为空") 20 | private String code; 21 | 22 | @Schema(description="排序") 23 | private Integer sort; 24 | 25 | @Schema(description="角色状态(1-正常;0-停用)") 26 | private Integer status; 27 | 28 | @Schema(description="数据权限") 29 | private Integer dataScope; 30 | 31 | } 32 | -------------------------------------------------------------------------------- /youlai-system/system-boot/src/main/java/com/youlai/system/service/SysUserRoleService.java: -------------------------------------------------------------------------------- 1 | package com.youlai.system.service; 2 | 3 | 4 | import com.baomidou.mybatisplus.extension.service.IService; 5 | import com.youlai.system.model.entity.SysUserRole; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * 用户角色关联业务接口 11 | * 12 | * @author haoxr 13 | * @since 0.0.1 14 | */ 15 | public interface SysUserRoleService extends IService { 16 | 17 | /** 18 | * 保存用户角色 19 | * 20 | * @param userId 用户ID 21 | * @param roleIds 角色ID集合 22 | * @return boolean 是否保存成功 23 | */ 24 | boolean saveUserRoles(Long userId, List roleIds); 25 | 26 | 27 | /** 28 | * 判断角色是否存在绑定的用户 29 | * 30 | * @param roleId 角色ID 31 | * @return true:已分配 false:未分配 32 | */ 33 | boolean hasAssignedUsers(Long roleId); 34 | } 35 | -------------------------------------------------------------------------------- /youlai-common/common-web/src/main/java/com/youlai/common/web/exception/BizException.java: -------------------------------------------------------------------------------- 1 | package com.youlai.common.web.exception; 2 | 3 | import com.youlai.common.result.IResultCode; 4 | import lombok.Getter; 5 | 6 | /** 7 | * 自定义业务异常 8 | * 9 | * @author haoxr 10 | * @since 2022/7/31 11 | */ 12 | @Getter 13 | public class BizException extends RuntimeException { 14 | 15 | public IResultCode resultCode; 16 | 17 | public BizException(IResultCode errorCode) { 18 | super(errorCode.getMsg()); 19 | this.resultCode = errorCode; 20 | } 21 | 22 | public BizException(String message){ 23 | super(message); 24 | } 25 | 26 | public BizException(String message, Throwable cause){ 27 | super(message, cause); 28 | } 29 | 30 | public BizException(Throwable cause){ 31 | super(cause); 32 | } 33 | 34 | 35 | } 36 | -------------------------------------------------------------------------------- /youlai-auth/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM openjdk:17-jdk-alpine 2 | MAINTAINER youlai youlaitech@163.com 3 | 4 | # 设置国内镜像源(中国科技大学镜像源),修改容器时区(alpine镜像需安装tzdata来设置时区),安装字体库(验证码) 5 | RUN echo "https://mirrors.ustc.edu.cn/alpine/v3.7/main/" > /etc/apk/repositories && \ 6 | apk --no-cache add tzdata && \ 7 | cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \ 8 | echo "Asia/Shanghai" > /etc/timezone && \ 9 | apk --no-cache add ttf-dejavu fontconfig 10 | 11 | 12 | # /tmp 目录作为容器数据卷目录,SpringBoot内嵌Tomcat容器默认使用/tmp作为工作目录,任何向 /tmp 中写入的信息不会记录进容器存储层,从而保证容器存储层的无状态化 13 | # 在宿主机的/var/lib/docker目录下创建一个临时文件并把它链接到容器中的/tmp目录 14 | VOLUME /tmp 15 | 16 | # 复制jar到镜像 17 | ADD target/youlai-auth.jar app.jar 18 | 19 | # 指定容器启动时执行的命令 20 | CMD java \ 21 | -Xms128m \ 22 | -Xmx128m \ 23 | -Djava.security.egd=file:/dev/./urandom \ 24 | -jar /app.jar 25 | 26 | EXPOSE 9000 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /youlai-common/common-mybatis/src/main/java/com/youlai/common/mybatis/annotation/DataPermission.java: -------------------------------------------------------------------------------- 1 | package com.youlai.common.mybatis.annotation; 2 | 3 | import java.lang.annotation.*; 4 | 5 | /** 6 | * MP数据权限注解 7 | *

8 | * https://gitee.com/baomidou/mybatis-plus/issues/I37I90 9 | * 10 | * @author zc 11 | * @since 2021-12-10 15:48 12 | */ 13 | @Documented 14 | @Retention(RetentionPolicy.RUNTIME) 15 | @Target({ElementType.TYPE, ElementType.METHOD}) 16 | public @interface DataPermission { 17 | 18 | /** 19 | * 数据权限 {@link com.baomidou.mybatisplus.extension.plugins.inner.DataPermissionInterceptor} 20 | */ 21 | String deptAlias() default ""; 22 | 23 | String deptIdColumnName() default "dept_id"; 24 | String userAlias() default ""; 25 | 26 | String userIdColumnName() default "create_by"; 27 | 28 | } 29 | 30 | -------------------------------------------------------------------------------- /mall-pms/pms-boot/src/main/java/com/youlai/mall/pms/PmsApplication.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.pms; 2 | 3 | import com.youlai.mall.ums.api.MemberFeignClient; 4 | import org.springframework.boot.SpringApplication; 5 | import org.springframework.boot.autoconfigure.SpringBootApplication; 6 | import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; 7 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 8 | import org.springframework.cloud.openfeign.EnableFeignClients; 9 | import org.springframework.transaction.annotation.EnableTransactionManagement; 10 | 11 | @SpringBootApplication 12 | @EnableDiscoveryClient 13 | @EnableFeignClients(basePackageClasses = {MemberFeignClient.class}) 14 | public class PmsApplication { 15 | public static void main(String[] args) { 16 | SpringApplication.run(PmsApplication.class, args); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /youlai-system/system-boot/src/main/java/com/youlai/system/model/entity/SysDictType.java: -------------------------------------------------------------------------------- 1 | package com.youlai.system.model.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableId; 5 | import com.youlai.common.base.BaseEntity; 6 | import lombok.Data; 7 | 8 | /** 9 | * 字典类型实体 10 | * 11 | * @author haoxr 12 | * @since 2022/12/17 13 | */ 14 | @Data 15 | public class SysDictType extends BaseEntity { 16 | /** 17 | * 主键 18 | */ 19 | @TableId(type = IdType.AUTO) 20 | private Long id; 21 | 22 | /** 23 | * 类型名称 24 | */ 25 | private String name; 26 | 27 | /** 28 | * 类型编码 29 | */ 30 | private String code; 31 | 32 | /** 33 | * 状态(0:正常;1:禁用) 34 | */ 35 | private Integer status; 36 | 37 | /** 38 | * 备注 39 | */ 40 | private String remark; 41 | } -------------------------------------------------------------------------------- /youlai-system/system-boot/src/main/java/com/youlai/system/enums/MenuTypeEnum.java: -------------------------------------------------------------------------------- 1 | package com.youlai.system.enums; 2 | 3 | import com.baomidou.mybatisplus.annotation.EnumValue; 4 | import com.youlai.common.base.IBaseEnum; 5 | import lombok.Getter; 6 | 7 | /** 8 | * 菜单类型枚举 9 | * 10 | * @author haoxr 11 | * @since 2022/4/23 12 | */ 13 | 14 | public enum MenuTypeEnum implements IBaseEnum { 15 | 16 | NULL(0, null), 17 | MENU(1, "菜单"), 18 | CATALOG(2, "目录"), 19 | EXTLINK(3, "外链"), 20 | 21 | BUTTON(4, "按钮"); 22 | 23 | @Getter 24 | @EnumValue // Mybatis-Plus 提供注解表示插入数据库时插入该值 25 | private Integer value; 26 | 27 | @Getter 28 | // @JsonValue // 表示对枚举序列化时返回此字段 29 | private String label; 30 | 31 | MenuTypeEnum(Integer value, String label) { 32 | this.value = value; 33 | this.label = label; 34 | } 35 | 36 | 37 | } 38 | -------------------------------------------------------------------------------- /youlai-common/common-mybatis/src/main/java/com/youlai/common/mybatis/handler/LongArrayJsonTypeHandler.java: -------------------------------------------------------------------------------- 1 | package com.youlai.common.mybatis.handler; 2 | 3 | import lombok.extern.slf4j.Slf4j; 4 | import org.apache.ibatis.type.JdbcType; 5 | import org.apache.ibatis.type.MappedJdbcTypes; 6 | import org.apache.ibatis.type.MappedTypes; 7 | import org.springframework.stereotype.Component; 8 | 9 | /** 10 | * Long 数组类型转换 json 11 | * https://www.jianshu.com/p/ab832f3fe81c 12 | * 13 | * @author Gadfly 14 | * @since 2021-06-30 15:26 15 | */ 16 | @Slf4j 17 | @Component 18 | @MappedTypes(value = {Long[].class}) 19 | @MappedJdbcTypes(value = {JdbcType.OTHER}, includeNullJdbcType = true) 20 | public class LongArrayJsonTypeHandler extends ArrayObjectJsonTypeHandler { 21 | public LongArrayJsonTypeHandler() { 22 | super(Long[].class); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/model/vo/OrderConfirmVO.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.oms.model.vo; 2 | 3 | import com.youlai.mall.oms.model.dto.OrderItemDTO; 4 | import com.youlai.mall.ums.dto.MemberAddressDTO; 5 | import io.swagger.v3.oas.annotations.media.Schema; 6 | import io.swagger.v3.oas.annotations.media.Schema; 7 | import lombok.Data; 8 | 9 | import java.util.List; 10 | 11 | /** 12 | * 订单确认响应对象 13 | */ 14 | @Schema(description ="订单确认响应对象") 15 | @Data 16 | public class OrderConfirmVO { 17 | 18 | /** 19 | * 订单防重提交令牌 20 | */ 21 | @Schema(description="订单防重提交令牌") 22 | private String orderToken; 23 | 24 | /** 25 | * 订单商品 26 | */ 27 | @Schema(description="订单商品") 28 | private List orderItems; 29 | 30 | /** 31 | * 会员收货地址列表 32 | */ 33 | @Schema(description="会员收获地址列表") 34 | private List addresses; 35 | 36 | } 37 | -------------------------------------------------------------------------------- /youlai-common/common-mybatis/src/main/java/com/youlai/common/mybatis/handler/IntegerArrayJsonTypeHandler.java: -------------------------------------------------------------------------------- 1 | package com.youlai.common.mybatis.handler; 2 | 3 | import lombok.extern.slf4j.Slf4j; 4 | import org.apache.ibatis.type.JdbcType; 5 | import org.apache.ibatis.type.MappedJdbcTypes; 6 | import org.apache.ibatis.type.MappedTypes; 7 | import org.springframework.stereotype.Component; 8 | 9 | /** 10 | * Integer 数组类型转换 json 11 | * https://www.jianshu.com/p/ab832f3fe81c 12 | * 13 | * @author Gadfly 14 | * @since 2021-06-30 15:19 15 | */ 16 | @Slf4j 17 | @Component 18 | @MappedTypes(value = {Integer[].class}) 19 | @MappedJdbcTypes(value = {JdbcType.VARCHAR}, includeNullJdbcType = true) 20 | public class IntegerArrayJsonTypeHandler extends ArrayObjectJsonTypeHandler { 21 | public IntegerArrayJsonTypeHandler() { 22 | super(Integer[].class); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /youlai-system/system-boot/src/main/java/com/youlai/system/model/vo/RolePageVO.java: -------------------------------------------------------------------------------- 1 | package com.youlai.system.model.vo; 2 | 3 | import com.fasterxml.jackson.annotation.JsonFormat; 4 | import io.swagger.v3.oas.annotations.media.Schema; 5 | import lombok.Data; 6 | 7 | import java.time.LocalDateTime; 8 | 9 | @Schema(description ="角色分页对象") 10 | @Data 11 | public class RolePageVO { 12 | 13 | @Schema(description="角色ID") 14 | private Long id; 15 | 16 | @Schema(description="角色名称") 17 | private String name; 18 | 19 | @Schema(description="角色编码") 20 | private String code; 21 | 22 | @Schema(description="角色状态") 23 | private Integer status; 24 | 25 | @Schema(description="排序") 26 | private Integer sort; 27 | 28 | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") 29 | private LocalDateTime createTime; 30 | 31 | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") 32 | private LocalDateTime updateTime; 33 | } 34 | -------------------------------------------------------------------------------- /mall-pms/pms-boot/src/main/java/com/youlai/mall/pms/enums/AttributeTypeEnum.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.pms.enums; 2 | 3 | import lombok.Getter; 4 | 5 | /** 6 | * 商品属性类型枚举 7 | * 8 | * @author haoxr 9 | * @since 2022/12/20 10 | */ 11 | public enum AttributeTypeEnum { 12 | 13 | SPEC(1, "规格"), 14 | ATTR(2, "属性"); 15 | 16 | AttributeTypeEnum(int value, String name) { 17 | this.value = value; 18 | this.name = name; 19 | } 20 | 21 | @Getter 22 | private Integer value; 23 | 24 | @Getter 25 | private String name; 26 | 27 | public static AttributeTypeEnum getByValue(Integer value) { 28 | AttributeTypeEnum attributeTypeEnum = null; 29 | 30 | for (AttributeTypeEnum item : values()) { 31 | if (item.getValue().equals(value)) { 32 | attributeTypeEnum = item; 33 | } 34 | } 35 | return attributeTypeEnum; 36 | } 37 | 38 | } 39 | -------------------------------------------------------------------------------- /mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/service/app/OrderLogService.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.oms.service.app; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.youlai.mall.oms.model.entity.OmsOrderLog; 5 | 6 | /** 7 | * 订单操作历史记录 8 | * 9 | * @author huawei 10 | * @email huawei_code@163.com 11 | * @date 2020-12-30 22:31:10 12 | */ 13 | public interface OrderLogService extends IService { 14 | 15 | /** 16 | * 添加订单操作日志记录 17 | * @param orderId 订单ID 18 | * @param orderStatus 订单状态 19 | * @param user 操作人员 20 | * @param detail 描述信息 21 | */ 22 | void addOrderLogs(Long orderId, Integer orderStatus, String user, String detail); 23 | 24 | /** 25 | * 添加订单操作日志记录 26 | * @param orderId 订单ID 27 | * @param orderStatus 订单状态 28 | * @param detail 描述 29 | */ 30 | void addOrderLogs(Long orderId, Integer orderStatus, String detail); 31 | } 32 | 33 | -------------------------------------------------------------------------------- /youlai-system/system-boot/src/main/java/com/youlai/system/handler/UserBlockHandler.java: -------------------------------------------------------------------------------- 1 | package com.youlai.system.handler; 2 | 3 | import com.alibaba.csp.sentinel.slots.block.BlockException; 4 | import com.youlai.common.result.Result; 5 | import com.youlai.system.model.vo.UserInfoVO; 6 | import lombok.extern.slf4j.Slf4j; 7 | 8 | /** 9 | * 用户接口降级逻辑 10 | * @author haoxr 11 | * @createTime 2021/4/23 23:30 12 | */ 13 | @Slf4j 14 | public class UserBlockHandler { 15 | 16 | /** 17 | * 获取当前登录用户信息的熔断降级处理 18 | * @param blockException 19 | * @return 20 | */ 21 | public static Result handleGetCurrentUserBlock(BlockException blockException) { 22 | return Result.success(new UserInfoVO()); 23 | } 24 | 25 | 26 | public static Result handleGetUserByUsernameBlock(String username,BlockException blockException){ 27 | log.info("降级了:{}",username); 28 | return Result.failed("降级了"); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/OmsApplication.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.oms; 2 | 3 | import com.youlai.mall.pms.api.SkuFeignClient; 4 | import com.youlai.mall.ums.api.MemberFeignClient; 5 | import org.springframework.boot.SpringApplication; 6 | import org.springframework.boot.autoconfigure.SpringBootApplication; 7 | import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; 8 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 9 | import org.springframework.cloud.openfeign.EnableFeignClients; 10 | import org.springframework.transaction.annotation.EnableTransactionManagement; 11 | 12 | @SpringBootApplication 13 | @EnableDiscoveryClient 14 | @EnableFeignClients(basePackageClasses = { MemberFeignClient.class, SkuFeignClient.class}) 15 | public class OmsApplication { 16 | 17 | public static void main(String[] args) { 18 | SpringApplication.run(OmsApplication.class, args); 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /mall-pms/pms-boot/src/main/java/com/youlai/mall/pms/model/entity/PmsCategoryAttribute.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.pms.model.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableId; 5 | import com.youlai.common.base.BaseEntity; 6 | import lombok.AllArgsConstructor; 7 | import lombok.Builder; 8 | import lombok.Data; 9 | import lombok.NoArgsConstructor; 10 | 11 | 12 | /** 13 | * 商品分类属性/规格 14 | * 15 | * @author haoxr 16 | * @since 2022/7/2 17 | */ 18 | @Data 19 | @Builder 20 | @NoArgsConstructor 21 | @AllArgsConstructor 22 | public class PmsCategoryAttribute extends BaseEntity { 23 | 24 | @TableId(type=IdType.AUTO) 25 | private Long id; 26 | 27 | /** 28 | * 商品分类ID 29 | */ 30 | private Long categoryId; 31 | 32 | /** 33 | * 属性/规格名称 34 | */ 35 | private String name; 36 | 37 | /** 38 | * 类型(1:规格;2:属性;) 39 | */ 40 | private Integer type; 41 | } 42 | -------------------------------------------------------------------------------- /docs/docker/seata/config/docker/seata-server-entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Copyright 1999-2019 Seata.io Group. 3 | # 4 | # Licensed under the Apache License, Version 2.0 (the "License"); 5 | # you may not use this file except in compliance with the License. 6 | # You may obtain a copy of the License at 7 | # 8 | # http://www.apache.org/licenses/LICENSE-2.0 9 | # 10 | # Unless required by applicable law or agreed to in writing, software 11 | # distributed under the License is distributed on an "AS IS" BASIS, 12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | # See the License for the specific language governing permissions and 14 | # limitations under the License. 15 | 16 | # entrypoint for server 17 | 18 | . /seata-setup.sh 19 | JAVA_OPT=${JAVA_OPT//"//"/"/"} 20 | echo "Affected JVM parameters:$JAVA_OPT" 21 | exec java $JAVA_OPT \ 22 | -cp $( cat /seata-server/jib-classpath-file ) \ 23 | $( cat /seata-server/jib-main-class-file ) 24 | -------------------------------------------------------------------------------- /youlai-auth/src/main/java/com/youlai/auth/oauth2/jackson/MemberMixin.java: -------------------------------------------------------------------------------- 1 | package com.youlai.auth.oauth2.jackson; 2 | 3 | import com.fasterxml.jackson.annotation.JsonAutoDetect; 4 | import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 5 | import com.fasterxml.jackson.annotation.JsonTypeInfo; 6 | import com.fasterxml.jackson.databind.annotation.JsonDeserialize; 7 | 8 | /** 9 | * SysUserDetails 反序列化注册 10 | * 11 | *

刷新模式根据 refresh_token 从 oauth2_authorization 表中获取字段 attributes 内容反序列化成 12 | * 13 | * @author haoxr 14 | * @since 2023/7/4 15 | */ 16 | @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY) 17 | @JsonDeserialize(using = SysUserDeserializer.class) 18 | @JsonAutoDetect( 19 | fieldVisibility = JsonAutoDetect.Visibility.ANY, 20 | getterVisibility = JsonAutoDetect.Visibility.NONE, 21 | isGetterVisibility = JsonAutoDetect.Visibility.NONE) 22 | @JsonIgnoreProperties(ignoreUnknown = true) 23 | public class MemberMixin {} 24 | -------------------------------------------------------------------------------- /youlai-common/common-web/src/main/java/com/youlai/common/web/config/FeignDecoderConfig.java: -------------------------------------------------------------------------------- 1 | package com.youlai.common.web.config; 2 | 3 | import com.youlai.common.web.decoder.FeignDecoder; 4 | import feign.codec.Decoder; 5 | import feign.optionals.OptionalDecoder; 6 | import org.springframework.beans.factory.ObjectProvider; 7 | import org.springframework.boot.autoconfigure.http.HttpMessageConverters; 8 | import org.springframework.cloud.openfeign.support.ResponseEntityDecoder; 9 | import org.springframework.cloud.openfeign.support.SpringDecoder; 10 | import org.springframework.context.annotation.Bean; 11 | 12 | /** 13 | * 14 | * @author haoxr 15 | * @since 2023/8/24 16 | */ 17 | public class FeignDecoderConfig { 18 | 19 | @Bean 20 | public Decoder feignDecoder(ObjectProvider messageConverters) { 21 | return new OptionalDecoder((new ResponseEntityDecoder(new FeignDecoder(new SpringDecoder(messageConverters))))); 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /mall-sms/sms-boot/src/main/java/com/youlai/mall/sms/enums/CouponApplicationScopeEnum.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.sms.enums; 2 | 3 | import com.baomidou.mybatisplus.annotation.EnumValue; 4 | import com.fasterxml.jackson.annotation.JsonValue; 5 | import com.youlai.common.base.IBaseEnum; 6 | import lombok.Getter; 7 | 8 | /** 9 | * 优惠券适用类型枚举 10 | * 11 | * @author haoxr 12 | * @since 2022/7/13 13 | */ 14 | @Getter 15 | public enum CouponApplicationScopeEnum implements IBaseEnum { 16 | 17 | ALL(0, "全场通用"), 18 | /** 19 | * 指定商品分类 20 | */ 21 | SPU_CATEGORY(1, "指定商品分类"), 22 | SPU(2, "指定商品"), 23 | ; 24 | 25 | @Getter 26 | @EnumValue // Mybatis-Plus 提供注解表示插入数据库时插入该值 27 | private Integer value; 28 | 29 | @Getter 30 | @JsonValue // 表示对枚举序列化时返回此字段 31 | private String label; 32 | 33 | CouponApplicationScopeEnum(Integer value, String label) { 34 | this.value = value; 35 | this.label = label; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /mall-sms/sms-boot/src/main/java/com/youlai/mall/sms/model/entity/SmsCouponSpuCategory.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.sms.model.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableField; 5 | import com.baomidou.mybatisplus.annotation.TableId; 6 | import com.baomidou.mybatisplus.annotation.TableName; 7 | import lombok.Data; 8 | import lombok.experimental.Accessors; 9 | 10 | import java.io.Serializable; 11 | 12 | @TableName(value ="sms_coupon_spu_category") 13 | @Data 14 | @Accessors(chain = true) 15 | public class SmsCouponSpuCategory implements Serializable { 16 | /** 17 | * 18 | */ 19 | @TableId(type = IdType.AUTO) 20 | private Long id; 21 | 22 | /** 23 | * 优惠券ID 24 | */ 25 | private Long couponId; 26 | 27 | /** 28 | * 商品分类ID 29 | */ 30 | private Long categoryId; 31 | 32 | @TableField(exist = false) 33 | private static final long serialVersionUID = 1L; 34 | } -------------------------------------------------------------------------------- /mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/model/entity/OmsOrderLog.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.oms.model.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableId; 5 | import com.youlai.common.base.BaseEntity; 6 | import lombok.Data; 7 | 8 | /** 9 | * 订单操作历史记录 10 | * 11 | * @author huawei 12 | * @email huawei_code@163.com 13 | * @date 2020-12-30 22:31:10 14 | */ 15 | @Data 16 | public class OmsOrderLog extends BaseEntity { 17 | 18 | /** 19 | * id 20 | */ 21 | @TableId(type = IdType.AUTO) 22 | private Long id; 23 | /** 24 | * 订单ID 25 | */ 26 | private Long orderId; 27 | /** 28 | * 操作人[用户;系统;后台管理员] 29 | */ 30 | private String user; 31 | /** 32 | * 操作详情 33 | */ 34 | private String detail; 35 | /** 36 | * 操作时订单状态 37 | */ 38 | private Integer orderStatus; 39 | /** 40 | * 备注 41 | */ 42 | private String remark; 43 | /** 44 | * 逻辑删除【0->正常;1->已删除】 45 | */ 46 | private Integer deleted; 47 | 48 | } 49 | -------------------------------------------------------------------------------- /youlai-auth/src/main/java/com/youlai/auth/oauth2/jackson/SysUserMixin.java: -------------------------------------------------------------------------------- 1 | package com.youlai.auth.oauth2.jackson; 2 | 3 | import com.fasterxml.jackson.annotation.JsonAutoDetect; 4 | import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 5 | import com.fasterxml.jackson.annotation.JsonTypeInfo; 6 | import com.fasterxml.jackson.databind.annotation.JsonDeserialize; 7 | 8 | /** 9 | * SysUserDetails 反序列化注册 10 | * 11 | * 刷新模式根据 refresh_token 从 oauth2_authorization 表中获取字段 attributes 内容反序列化成 12 | * 13 | * @author haoxr 14 | * @see org.springframework.security.jackson2.UserMixin 15 | * @since 2023/7/4 16 | */ 17 | @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY) 18 | @JsonDeserialize(using = SysUserDeserializer.class) 19 | @JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY, getterVisibility = JsonAutoDetect.Visibility.NONE, isGetterVisibility = JsonAutoDetect.Visibility.NONE) 20 | @JsonIgnoreProperties(ignoreUnknown = true) 21 | public class SysUserMixin { 22 | } 23 | -------------------------------------------------------------------------------- /mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/enums/OrderStatusEnum.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.oms.enums; 2 | 3 | import com.youlai.common.base.IBaseEnum; 4 | import lombok.Getter; 5 | 6 | /** 7 | * 订单状态枚举 8 | * 9 | * @author haoxr 10 | * @since 2.0.0 11 | */ 12 | public enum OrderStatusEnum implements IBaseEnum { 13 | 14 | /** 15 | * 待付款 16 | */ 17 | UNPAID(0, "待付款"), 18 | /** 19 | * 已付款(待发货) 20 | */ 21 | PAID(1, "已付款"), 22 | /** 23 | * 已发货 24 | */ 25 | SHIPPED(2, "已发货"), 26 | /** 27 | * 已完成 28 | */ 29 | COMPLETE(3, "已完成"), 30 | /** 31 | * 已取消 32 | */ 33 | CANCELED(4, "已取消"), 34 | /** 35 | * 售后中 36 | */ 37 | SERVICING(5, "售后中"); 38 | 39 | OrderStatusEnum(Integer value, String label) { 40 | this.value = value; 41 | this.label = label; 42 | } 43 | 44 | @Getter 45 | private Integer value; 46 | 47 | @Getter 48 | private String label; 49 | 50 | } 51 | -------------------------------------------------------------------------------- /mall-oms/oms-boot/src/main/java/com/youlai/mall/oms/model/dto/CartItemVo.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.oms.model.dto; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | import java.util.Set; 7 | 8 | /** 9 | * 购物车商品项 10 | * 11 | * @author Ray Hao 12 | * @since 0.0.1 13 | */ 14 | @Data 15 | public class CartItemVo implements Serializable { 16 | 17 | /** 18 | * 商品库存ID 19 | */ 20 | private Long skuId; 21 | 22 | /** 23 | * 商品名称 24 | */ 25 | private String spuName; 26 | 27 | /** 28 | * 规格集合 29 | */ 30 | private Set specs; 31 | 32 | /** 33 | * 商品图片 34 | */ 35 | private String imageUrl; 36 | 37 | /** 38 | * 加购数量· 39 | */ 40 | private Integer count; 41 | 42 | /** 43 | * 商品价格 44 | */ 45 | private Long price; 46 | 47 | /** 48 | * 是否选中 49 | */ 50 | private Boolean checked; 51 | 52 | /** 53 | * 商品库存 54 | */ 55 | private Integer stock; 56 | 57 | } 58 | -------------------------------------------------------------------------------- /mall-pms/pms-api/src/main/java/com/youlai/mall/pms/model/dto/CheckPriceDTO.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.pms.model.dto; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | import lombok.ToString; 7 | 8 | import java.util.List; 9 | 10 | /** 11 | * 订单商品验价传输对象 12 | * 13 | * @author haoxr 14 | * @date 2022/2/7 15 | */ 16 | @Data 17 | @NoArgsConstructor 18 | @AllArgsConstructor 19 | @ToString 20 | public class CheckPriceDTO { 21 | 22 | /** 23 | * 订单总金额 24 | */ 25 | private Long totalAmount; 26 | 27 | /** 28 | * 订单商品明细 29 | */ 30 | private List skus; 31 | 32 | /** 33 | * 订单商品对象 34 | */ 35 | @Data 36 | @AllArgsConstructor 37 | @NoArgsConstructor 38 | public static class OrderSku { 39 | /** 40 | * 商品ID 41 | */ 42 | private Long skuId; 43 | 44 | /** 45 | * 商品数量 46 | */ 47 | private Integer count; 48 | } 49 | 50 | 51 | } 52 | -------------------------------------------------------------------------------- /youlai-common/common-web/src/main/java/com/youlai/common/web/constraint/CheckCityValid.java: -------------------------------------------------------------------------------- 1 | package com.youlai.common.web.constraint; 2 | 3 | import jakarta.validation.Constraint; 4 | import jakarta.validation.Payload; 5 | import java.lang.annotation.Documented; 6 | import java.lang.annotation.Retention; 7 | import java.lang.annotation.Target; 8 | 9 | import static java.lang.annotation.ElementType.*; 10 | import static java.lang.annotation.RetentionPolicy.RUNTIME; 11 | 12 | /** 13 | * 校验城市地名等是否合法,不接受null 14 | * 15 | * @author Gadfly 16 | * @since 2021-08-06 16:02 17 | */ 18 | @Documented 19 | @Constraint(validatedBy = CityValidator.class) 20 | @Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE}) 21 | @Retention(RUNTIME) 22 | public @interface CheckCityValid { 23 | /* 校验字段类型 */ 24 | CityType value() default CityType.CITY; 25 | 26 | String message() default "{city.valid}"; 27 | 28 | Class[] groups() default {}; 29 | 30 | Class[] payload() default {}; 31 | } 32 | -------------------------------------------------------------------------------- /youlai-system/system-boot/src/main/resources/mapper/SysRoleMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 27 | 28 | -------------------------------------------------------------------------------- /mall-ums/ums-boot/src/main/java/com/youlai/mall/ums/service/UmsAddressService.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.ums.service; 2 | 3 | 4 | import com.baomidou.mybatisplus.extension.service.IService; 5 | import com.youlai.mall.ums.dto.MemberAddressDTO; 6 | import com.youlai.mall.ums.model.entity.UmsAddress; 7 | import com.youlai.mall.ums.model.form.AddressForm; 8 | 9 | import java.util.List; 10 | 11 | /** 12 | * 会员地址业务接口 13 | * 14 | * @author haoxr 15 | * @since 2022/2/12 16 | */ 17 | public interface UmsAddressService extends IService { 18 | 19 | /** 20 | * 新增地址 21 | * 22 | * @param addressForm 23 | * @return 24 | */ 25 | boolean addAddress(AddressForm addressForm); 26 | 27 | /** 28 | * 修改地址 29 | * 30 | * @param addressForm 31 | * @return 32 | */ 33 | boolean updateAddress(AddressForm addressForm); 34 | 35 | /** 36 | * 获取当前登录会员的地址列表 37 | * 38 | * @return 39 | */ 40 | List listCurrentMemberAddresses(); 41 | } 42 | -------------------------------------------------------------------------------- /youlai-common/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | 8 | youlai-mall 9 | com.youlai 10 | 3.2.1 11 | 12 | 13 | youlai-common 14 | pom 15 | 16 | 17 | common-apidoc 18 | common-core 19 | common-redis 20 | common-web 21 | common-mybatis 22 | common-rabbitmq 23 | common-security 24 | common-seata 25 | common-sms 26 | 27 | 28 | -------------------------------------------------------------------------------- /mall-pms/pms-boot/src/main/java/com/youlai/mall/pms/service/CategoryService.java: -------------------------------------------------------------------------------- 1 | package com.youlai.mall.pms.service; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.youlai.common.web.model.Option; 5 | import com.youlai.mall.pms.model.entity.PmsCategory; 6 | import com.youlai.mall.pms.model.vo.CategoryVO; 7 | 8 | import java.util.List; 9 | 10 | 11 | /** 12 | * 商品分类 13 | * 14 | * @author haoxr 15 | */ 16 | public interface CategoryService extends IService { 17 | 18 | 19 | /** 20 | * 分类列表(树形) 21 | * 22 | * @param parentId 23 | * @return 24 | */ 25 | List getCategoryList(Long parentId); 26 | 27 | /** 28 | * 分类列表(级联) 29 | * @return 30 | */ 31 | List