diff --git a/README.md b/README.md index 751fb9c..fcc2f49 100644 --- a/README.md +++ b/README.md @@ -11,13 +11,18 @@ * 系统端代码 * fumao-service * controller里面调用, 聚合其他几个模块的代码 +* fumao-bi + * 统计数据 ## jpa相关 ### 快速查询 ``` +单表条件查询 @QueryItem(type = QueryType.Eq) 等等 -用于快速开发查询接口 + +多表条件查询 +@QueryItem(join = QueryJoinType.Inner, type = QueryType.equal, column = "实体里面的属性.表属性"> QueryBuilder.build(条件对象) 返回 Predicate 可交给SpringData 查询 ``` @@ -50,8 +55,26 @@ QueryBuilder.build(条件对象) 返回 Predicate 可交给SpringData 查询 * 动态角色实现 AccessDecisionManager 接口 -## 集团实例 +## 集团实例, 基于flyway ``` 新建集团的时候会手动跑Flyway方法, 创建一个新实例 -``` \ No newline at end of file + +目前策略 +主库 + 系统数据 + 集团数据 +集团库 + 集团数据 + 业务数据 +``` +* DBRouteFilter + * 从请求上下文自动企切库 + * 集团端和业务端从JWT中抽取库 + * C端和B端, 从URL中收取库 +* DynamicDataSource + * 扩展DataSource, 可以自动切库 +* DBConfiguration + * 初始化主库 +* CompanyConfiguration + * 初始化集团库 \ No newline at end of file diff --git a/ci/env/develop.env b/ci/env/develop.env new file mode 100644 index 0000000..e69de29 diff --git a/ci/env/production.env b/ci/env/production.env new file mode 100644 index 0000000..e69de29 diff --git a/ci/env/test.env b/ci/env/test.env new file mode 100644 index 0000000..e69de29 diff --git a/fumao-app/pom.xml b/fumao-app/pom.xml index e715627..c4f89eb 100644 --- a/fumao-app/pom.xml +++ b/fumao-app/pom.xml @@ -4,7 +4,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> fumao - com.aki + com.chilunyc 0.0.1-SNAPSHOT 4.0.0 @@ -32,9 +32,14 @@ + + com.amazonaws + aws-java-sdk-s3 + + - com.aki + com.chilunyc fumao-service ${project.version} diff --git a/fumao-app/src/main/java/com/chilunyc/fumao/Application.java b/fumao-app/src/main/java/com/chilunyc/fumao/Application.java index 8731d5b..dee48bc 100644 --- a/fumao-app/src/main/java/com/chilunyc/fumao/Application.java +++ b/fumao-app/src/main/java/com/chilunyc/fumao/Application.java @@ -4,6 +4,7 @@ import com.chilunyc.fumao.common.config.ApplicationProperty; import com.chilunyc.fumao.config.bean.MultiBeanNameGenerator; import com.alibaba.fastjson.parser.ParserConfig; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.system.ApplicationPidFileWriter; @@ -20,7 +21,9 @@ import org.springframework.transaction.annotation.EnableTransactionManagement; /** * */ -@SpringBootApplication() +@SpringBootApplication( + exclude = {FlywayAutoConfiguration.class} +) @EnableAsync @EnableScheduling @EnableJpaRepositories diff --git a/fumao-app/src/main/java/com/chilunyc/fumao/api/company/PlaceAdminController.java b/fumao-app/src/main/java/com/chilunyc/fumao/api/company/PlaceAdminController.java index 39ab1b4..057ea99 100644 --- a/fumao-app/src/main/java/com/chilunyc/fumao/api/company/PlaceAdminController.java +++ b/fumao-app/src/main/java/com/chilunyc/fumao/api/company/PlaceAdminController.java @@ -62,7 +62,7 @@ class PlaceAdminController { }) @RequestMapping(value = "/edit", method = RequestMethod.POST) JsonResponse edit(CompanyAdmin companyAdmin, @RequestBody @Valid PlaceAdminEditRequest request) { - request.setPlaceAdminType(PlaceAdminType.Manager); + request.setType(PlaceAdminType.Manager); request.setCompanyId(companyAdmin.getCompanyId()); placeAdminService.edit(request); return JsonResponse.success(); diff --git a/fumao-app/src/main/java/com/chilunyc/fumao/api/customer/CouponController.java b/fumao-app/src/main/java/com/chilunyc/fumao/api/customer/CouponController.java new file mode 100644 index 0000000..b43cf7a --- /dev/null +++ b/fumao-app/src/main/java/com/chilunyc/fumao/api/customer/CouponController.java @@ -0,0 +1,57 @@ +package com.chilunyc.fumao.api.customer; + +import com.chilunyc.fumao.common.response.JsonResponse; +import com.chilunyc.fumao.place.model.Coupon; +import com.chilunyc.fumao.place.request.coupon.CouponPageRequest; +import com.chilunyc.fumao.place.service.CouponService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import lombok.extern.log4j.Log4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * + */ +@Log4j +@Api(description = "优惠券") +@RestController +@RequestMapping("/customer/{cid}/coupon") +class CouponController { + + @Autowired + CouponService couponService; + + + @ApiOperation(value = "分页") + @ApiImplicitParams({ + @ApiImplicitParam(name = "request", required = true, paramType = "body", dataType = "PageRequest") + }) + @RequestMapping(value = "/find", method = RequestMethod.POST) + JsonResponse> page(@RequestBody CouponPageRequest request) { + Page page = couponService.page(request); + return JsonResponse.success(page); + } + + @ApiOperation(value = "详情") + @ApiImplicitParams({ + }) + @RequestMapping(value = "/find/{id}", method = RequestMethod.GET) + JsonResponse info(@PathVariable Long id) { + Coupon couponResponse = couponService.find(id); + return JsonResponse.success(couponResponse); + } + + @ApiOperation(value = "所有") + @ApiImplicitParams({ + }) + @RequestMapping(value = "/find/all", method = RequestMethod.POST) + JsonResponse> all() { + return JsonResponse.success(); + } +} \ No newline at end of file diff --git a/fumao-app/src/main/java/com/chilunyc/fumao/api/customer/CustomerController.java b/fumao-app/src/main/java/com/chilunyc/fumao/api/customer/CustomerController.java new file mode 100644 index 0000000..0cf6b42 --- /dev/null +++ b/fumao-app/src/main/java/com/chilunyc/fumao/api/customer/CustomerController.java @@ -0,0 +1,44 @@ +package com.chilunyc.fumao.api.customer; + +import com.chilunyc.fumao.common.request.IdsRequest; +import com.chilunyc.fumao.common.response.JsonResponse; +import com.chilunyc.fumao.common.shiro.AuthRoles; +import com.chilunyc.fumao.company.model.PlaceAdmin; +import com.chilunyc.fumao.place.model.Customer; +import com.chilunyc.fumao.place.request.customer.CustomerEditRequest; +import com.chilunyc.fumao.place.request.customer.CustomerPageRequest; +import com.chilunyc.fumao.place.service.CustomerService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import lombok.extern.log4j.Log4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; + +/** + * + */ +@Log4j +@Api(description = "顾客") +@RestController +@RequestMapping("/customer/{cid}/customer") +class CustomerController { + + @Autowired + CustomerService customerService; + + @ApiOperation(value = "详情") + @ApiImplicitParams({ + }) + @RequestMapping(value = "/find/{id}", method = RequestMethod.GET) + JsonResponse info(PlaceAdmin placeAdmin, @PathVariable Long id) { + Customer customerResponse = customerService.find(id); + return JsonResponse.success(customerResponse); + } + +} \ No newline at end of file diff --git a/fumao-app/src/main/java/com/chilunyc/fumao/api/customer/PlaceController.java b/fumao-app/src/main/java/com/chilunyc/fumao/api/customer/PlaceController.java new file mode 100644 index 0000000..cbb6af3 --- /dev/null +++ b/fumao-app/src/main/java/com/chilunyc/fumao/api/customer/PlaceController.java @@ -0,0 +1,43 @@ +package com.chilunyc.fumao.api.customer; + +import com.chilunyc.fumao.common.response.JsonResponse; +import com.chilunyc.fumao.company.model.Place; +import com.chilunyc.fumao.company.request.place.PlacePageRequest; +import com.chilunyc.fumao.company.service.PlaceService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import lombok.extern.log4j.Log4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +/** + * + */ +@Log4j +@Api(description = "商场") +@RestController +@RequestMapping("/customer/{cid}/place") +class PlaceController { + + @Autowired + PlaceService placeService; + + + @ApiOperation(value = "分页") + @ApiImplicitParams({ + @ApiImplicitParam(name = "request", required = true, paramType = "body", dataType = "PageRequest") + }) + @RequestMapping(value = "/find", method = RequestMethod.POST) + JsonResponse> page(@RequestBody PlacePageRequest request) { + Page page = placeService.page(request); + return JsonResponse.success(page); + } + + +} \ No newline at end of file diff --git a/fumao-app/src/main/java/com/chilunyc/fumao/api/customer/ShopController.java b/fumao-app/src/main/java/com/chilunyc/fumao/api/customer/ShopController.java new file mode 100644 index 0000000..a98afa2 --- /dev/null +++ b/fumao-app/src/main/java/com/chilunyc/fumao/api/customer/ShopController.java @@ -0,0 +1,49 @@ +package com.chilunyc.fumao.api.customer; + +import com.chilunyc.fumao.common.response.JsonResponse; +import com.chilunyc.fumao.place.model.Shop; +import com.chilunyc.fumao.place.request.shop.ShopPageRequest; +import com.chilunyc.fumao.place.service.ShopService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import lombok.extern.log4j.Log4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.web.bind.annotation.*; + +/** + * + */ +@Log4j +@Api(description = "商铺") +@RestController +@RequestMapping("/customer/{cid}/shop") +class ShopController { + + @Autowired + ShopService shopService; + + + @ApiOperation(value = "分页") + @ApiImplicitParams({ + @ApiImplicitParam(name = "request", required = true, paramType = "body", dataType = "PageRequest") + }) + @RequestMapping(value = "/find", method = RequestMethod.POST) + JsonResponse> page(@RequestBody ShopPageRequest request) { + Page page = shopService.page(request); + return JsonResponse.success(page); + } + + @ApiOperation(value = "详情") + @ApiImplicitParams({ + }) + @RequestMapping(value = "/find/{id}", method = RequestMethod.GET) + JsonResponse info(@PathVariable Long id) { + Shop shopResponse = shopService.find(id); + return JsonResponse.success(shopResponse); + } + + +} \ No newline at end of file diff --git a/fumao-app/src/main/java/com/chilunyc/fumao/api/customer/TradeController.java b/fumao-app/src/main/java/com/chilunyc/fumao/api/customer/TradeController.java new file mode 100644 index 0000000..054c31e --- /dev/null +++ b/fumao-app/src/main/java/com/chilunyc/fumao/api/customer/TradeController.java @@ -0,0 +1,61 @@ +package com.chilunyc.fumao.api.customer; + +import com.chilunyc.fumao.common.response.JsonResponse; +import com.chilunyc.fumao.place.model.Trade; +import com.chilunyc.fumao.place.request.trade.TradeEditRequest; +import com.chilunyc.fumao.place.request.trade.TradePageRequest; +import com.chilunyc.fumao.place.service.TradeService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import lombok.extern.log4j.Log4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; + +/** + * + */ +@Log4j +@Api(description = "订单") +@RestController +@RequestMapping("/customer/{cid}/trade") +class TradeController { + + @Autowired + TradeService tradeService; + + + @ApiOperation(value = "分页") + @ApiImplicitParams({ + @ApiImplicitParam(name = "request", required = true, paramType = "body", dataType = "PageRequest") + }) + @RequestMapping(value = "/find", method = RequestMethod.POST) + JsonResponse> page(@RequestBody TradePageRequest request) { + Page page = tradeService.page(request); + return JsonResponse.success(page); + } + + @ApiOperation(value = "详情") + @ApiImplicitParams({ + }) + @RequestMapping(value = "/find/{id}", method = RequestMethod.GET) + JsonResponse info(@PathVariable Long id) { + Trade tradeResponse = tradeService.find(id); + return JsonResponse.success(tradeResponse); + } + + @ApiOperation(value = "新增 | 编辑") + @ApiImplicitParams({ + @ApiImplicitParam(name = "request", required = true, paramType = "body", dataType = "Trade") + }) + @RequestMapping(value = "/edit", method = RequestMethod.POST) + JsonResponse edit(@RequestBody @Valid TradeEditRequest request) { + tradeService.edit(request); + return JsonResponse.success(); + } + +} \ No newline at end of file diff --git a/fumao-app/src/main/java/com/chilunyc/fumao/api/merchant/CouponController.java b/fumao-app/src/main/java/com/chilunyc/fumao/api/merchant/CouponController.java new file mode 100644 index 0000000..611030b --- /dev/null +++ b/fumao-app/src/main/java/com/chilunyc/fumao/api/merchant/CouponController.java @@ -0,0 +1,57 @@ +package com.chilunyc.fumao.api.merchant; + +import com.chilunyc.fumao.common.response.JsonResponse; +import com.chilunyc.fumao.place.model.Coupon; +import com.chilunyc.fumao.place.request.coupon.CouponPageRequest; +import com.chilunyc.fumao.place.service.CouponService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import lombok.extern.log4j.Log4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * + */ +@Log4j +@Api(description = "优惠券") +@RestController +@RequestMapping("/merchant/{cid}/coupon") +class CouponController { + + @Autowired + CouponService couponService; + + + @ApiOperation(value = "分页") + @ApiImplicitParams({ + @ApiImplicitParam(name = "request", required = true, paramType = "body", dataType = "PageRequest") + }) + @RequestMapping(value = "/find", method = RequestMethod.POST) + JsonResponse> page(@RequestBody CouponPageRequest request) { + Page page = couponService.page(request); + return JsonResponse.success(page); + } + + @ApiOperation(value = "详情") + @ApiImplicitParams({ + }) + @RequestMapping(value = "/find/{id}", method = RequestMethod.GET) + JsonResponse info(@PathVariable Long id) { + Coupon couponResponse = couponService.find(id); + return JsonResponse.success(couponResponse); + } + + @ApiOperation(value = "所有") + @ApiImplicitParams({ + }) + @RequestMapping(value = "/find/all", method = RequestMethod.POST) + JsonResponse> all() { + return JsonResponse.success(); + } +} \ No newline at end of file diff --git a/fumao-app/src/main/java/com/chilunyc/fumao/api/merchant/FindPwdController.java b/fumao-app/src/main/java/com/chilunyc/fumao/api/merchant/FindPwdController.java new file mode 100644 index 0000000..ccc96d1 --- /dev/null +++ b/fumao-app/src/main/java/com/chilunyc/fumao/api/merchant/FindPwdController.java @@ -0,0 +1,62 @@ +package com.chilunyc.fumao.api.merchant; + +import com.chilunyc.fumao.common.request.ChangePwdRequest; +import com.chilunyc.fumao.common.response.JsonResponse; +import com.chilunyc.fumao.common.sms.model.SmsType; +import com.chilunyc.fumao.common.sms.request.SmsSendRequest; +import com.chilunyc.fumao.common.sms.service.SmsService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import lombok.extern.log4j.Log4j; +import org.apache.commons.lang3.RandomStringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import javax.validation.Valid; + +/** + * + */ +@Log4j +@Api(description = "找回密码") +@RestController +@RequestMapping("/merchant/find/pwd") +class FindPwdController { + + @Autowired + SmsService smsService; + + + @ApiOperation(value = "改密码") + @ApiImplicitParams({ + @ApiImplicitParam(name = "request", required = true, paramType = "body", dataType = "UserChangePwdRequest") + }) + @RequestMapping(value = "/", method = RequestMethod.POST) + JsonResponse login(@RequestBody @Valid ChangePwdRequest request) { +// + return JsonResponse.success(); + } + + @ApiOperation(value = "改密码发短信") + @ApiImplicitParams({ + @ApiImplicitParam(name = "request", required = true, paramType = "body", dataType = "SmsSendRequest") + }) + @RequestMapping(value = "/send", method = RequestMethod.POST) + JsonResponse login(@RequestBody @Valid SmsSendRequest request) { + //1. 校验是否存在 +// if (!userService.isExist(request.getMobile())) { +// throw new SystemException("000010"); +// } + + //2. 发送 + request.setContent(RandomStringUtils.randomNumeric(4)); + request.setType(SmsType.CustomerFindPwd); + smsService.send(request); + return JsonResponse.success(); + } +} diff --git a/fumao-app/src/main/java/com/chilunyc/fumao/api/merchant/TradeController.java b/fumao-app/src/main/java/com/chilunyc/fumao/api/merchant/TradeController.java new file mode 100644 index 0000000..2723ad1 --- /dev/null +++ b/fumao-app/src/main/java/com/chilunyc/fumao/api/merchant/TradeController.java @@ -0,0 +1,52 @@ +package com.chilunyc.fumao.api.merchant; + +import com.chilunyc.fumao.common.response.JsonResponse; +import com.chilunyc.fumao.place.model.Trade; +import com.chilunyc.fumao.place.request.trade.TradeEditRequest; +import com.chilunyc.fumao.place.request.trade.TradePageRequest; +import com.chilunyc.fumao.place.service.TradeService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import lombok.extern.log4j.Log4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; + +/** + * + */ +@Log4j +@Api(description = "订单") +@RestController +@RequestMapping("/merchant/{cid}/trade") +class TradeController { + + @Autowired + TradeService tradeService; + + + @ApiOperation(value = "分页") + @ApiImplicitParams({ + @ApiImplicitParam(name = "request", required = true, paramType = "body", dataType = "PageRequest") + }) + @RequestMapping(value = "/find", method = RequestMethod.POST) + JsonResponse> page(@RequestBody TradePageRequest request) { + Page page = tradeService.page(request); + return JsonResponse.success(page); + } + + @ApiOperation(value = "详情") + @ApiImplicitParams({ + }) + @RequestMapping(value = "/find/{id}", method = RequestMethod.GET) + JsonResponse info(@PathVariable Long id) { + Trade tradeResponse = tradeService.find(id); + return JsonResponse.success(tradeResponse); + } + + +} \ No newline at end of file diff --git a/fumao-app/src/main/java/com/chilunyc/fumao/api/place/ClientPvController.java b/fumao-app/src/main/java/com/chilunyc/fumao/api/place/ClientPvController.java new file mode 100644 index 0000000..861a61f --- /dev/null +++ b/fumao-app/src/main/java/com/chilunyc/fumao/api/place/ClientPvController.java @@ -0,0 +1,46 @@ +package com.chilunyc.fumao.api.place; + +import com.chilunyc.fumao.bi.model.ClientPv; +import com.chilunyc.fumao.bi.request.clientPv.ClientPvPageRequest; +import com.chilunyc.fumao.bi.service.ClientPvService; +import com.chilunyc.fumao.common.response.JsonResponse; +import com.chilunyc.fumao.common.shiro.AuthRoles; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import lombok.extern.log4j.Log4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +/** + * + */ +@Log4j +@Api(description = "C端数据") +@RestController +@RequestMapping("/place/client/pv") +@PreAuthorize(AuthRoles.PlaceAdminExp + " OR " + AuthRoles.PlaceDataExp) +class ClientPvController { + + @Autowired + ClientPvService clientPvService; + + + @ApiOperation(value = "分页") + @ApiImplicitParams({ + @ApiImplicitParam(name = "request", required = true, paramType = "body", dataType = "PageRequest") + }) + @RequestMapping(value = "/find", method = RequestMethod.POST) + JsonResponse> page(@RequestBody ClientPvPageRequest request) { + Page page = clientPvService.page(request); + return JsonResponse.success(page); + } + + +} \ No newline at end of file diff --git a/fumao-app/src/main/java/com/chilunyc/fumao/api/place/CouponChannelController.java b/fumao-app/src/main/java/com/chilunyc/fumao/api/place/CouponChannelController.java new file mode 100644 index 0000000..35cfd44 --- /dev/null +++ b/fumao-app/src/main/java/com/chilunyc/fumao/api/place/CouponChannelController.java @@ -0,0 +1,76 @@ +package com.chilunyc.fumao.api.place; + +import com.chilunyc.fumao.common.request.IdsRequest; +import com.chilunyc.fumao.common.response.JsonResponse; +import com.chilunyc.fumao.company.model.PlaceAdmin; +import com.chilunyc.fumao.place.model.CouponChannel; +import com.chilunyc.fumao.place.request.couponChannel.CouponChannelEditRequest; +import com.chilunyc.fumao.place.request.couponChannel.CouponChannelPageRequest; +import com.chilunyc.fumao.place.service.CouponChannelService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import lombok.extern.log4j.Log4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; + +/** + * + */ +@Log4j +@Api(description = "优惠券渠道") +@RestController +@RequestMapping("/place/coupon/channel") +class CouponChannelController { + + @Autowired + CouponChannelService couponChannelService; + + + @ApiOperation(value = "分页") + @ApiImplicitParams({ + @ApiImplicitParam(name = "request", required = true, paramType = "body", dataType = "PageRequest") + }) + @RequestMapping(value = "/find", method = RequestMethod.POST) + JsonResponse> page(@RequestBody CouponChannelPageRequest request) { + Page page = couponChannelService.page(request); + return JsonResponse.success(page); + } + + @ApiOperation(value = "详情") + @ApiImplicitParams({ + }) + @RequestMapping(value = "/find/{id}", method = RequestMethod.GET) + JsonResponse info(@PathVariable Long id) { + CouponChannel couponChannelResponse = couponChannelService.find(id); + return JsonResponse.success(couponChannelResponse); + } + + + @ApiOperation(value = "新增 | 编辑") + @ApiImplicitParams({ + @ApiImplicitParam(name = "request", required = true, paramType = "body", dataType = "CouponChannel") + }) + @RequestMapping(value = "/edit", method = RequestMethod.POST) + JsonResponse edit(PlaceAdmin placeAdmin, @RequestBody @Valid CouponChannelEditRequest request) { + request.setPlaceId(placeAdmin.getPlaceId()); + couponChannelService.edit(request); + return JsonResponse.success(); + } + + @ApiOperation(value = "删除") + @ApiImplicitParams({ + @ApiImplicitParam(name = "request", required = true, paramType = "body", dataType = "IdRequest") + }) + @RequestMapping(value = "/delete", method = RequestMethod.POST) + JsonResponse remove(@RequestBody @Valid IdsRequest request) { + couponChannelService.remove(request); + return JsonResponse.success(); + } + + +} \ No newline at end of file diff --git a/fumao-app/src/main/java/com/chilunyc/fumao/api/place/CouponController.java b/fumao-app/src/main/java/com/chilunyc/fumao/api/place/CouponController.java new file mode 100644 index 0000000..d6461ac --- /dev/null +++ b/fumao-app/src/main/java/com/chilunyc/fumao/api/place/CouponController.java @@ -0,0 +1,98 @@ +package com.chilunyc.fumao.api.place; + +import com.chilunyc.fumao.common.request.IdsRequest; +import com.chilunyc.fumao.common.response.JsonResponse; +import com.chilunyc.fumao.common.shiro.AuthRoles; +import com.chilunyc.fumao.common.util.MapBuilder; +import com.chilunyc.fumao.company.model.PlaceAdmin; +import com.chilunyc.fumao.place.model.Coupon; +import com.chilunyc.fumao.place.model.CouponChannel; +import com.chilunyc.fumao.place.request.coupon.CouponEditRequest; +import com.chilunyc.fumao.place.request.coupon.CouponPageRequest; +import com.chilunyc.fumao.place.service.CouponChannelService; +import com.chilunyc.fumao.place.service.CouponService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import lombok.extern.log4j.Log4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; +import java.util.Map; + +/** + * + */ +@Log4j +@Api(description = "优惠券") +@RestController +@RequestMapping("/place/coupon") + +@PreAuthorize(AuthRoles.PlaceAdminExp + " OR " + AuthRoles.PlaceCouponExp) +class CouponController { + + @Autowired + CouponService couponService; + + @Autowired + CouponChannelService couponChannelService; + + @ApiOperation(value = "分页") + @ApiImplicitParams({ + @ApiImplicitParam(name = "request", required = true, paramType = "body", dataType = "PageRequest") + }) + @RequestMapping(value = "/find", method = RequestMethod.POST) + JsonResponse> page(PlaceAdmin placeAdmin, @RequestBody CouponPageRequest request) { + Page page = couponService.page(request); + return JsonResponse.success(page); + } + + @ApiOperation(value = "详情") + @ApiImplicitParams({ + }) + @RequestMapping(value = "/find/{id}", method = RequestMethod.GET) + JsonResponse info(@PathVariable Long id) { + Coupon couponResponse = couponService.find(id); + List couponChannelList = couponChannelService.findByCouponId(id, true); + return JsonResponse.success( + MapBuilder + .builder() + .put("coupon", couponResponse) + .put("couponCateList", couponChannelList) + .getMap() + ); + } + + + @ApiOperation(value = "新增 | 编辑") + @ApiImplicitParams({ + @ApiImplicitParam(name = "request", required = true, paramType = "body", dataType = "Coupon") + }) + @RequestMapping(value = "/edit", method = RequestMethod.POST) + JsonResponse edit(PlaceAdmin placeAdmin, @RequestBody @Valid CouponEditRequest request) { + request.setPlaceId(placeAdmin.getPlaceId()); + Coupon coupon = couponService.edit(request); + return JsonResponse.success(coupon); + } + + @ApiOperation(value = "删除") + @ApiImplicitParams({ + @ApiImplicitParam(name = "request", required = true, paramType = "body", dataType = "IdRequest") + }) + @RequestMapping(value = "/delete", method = RequestMethod.POST) + JsonResponse remove(@RequestBody @Valid IdsRequest request) { + couponService.remove(request); + return JsonResponse.success(); + } + + @RequestMapping(value = "/cate", method = RequestMethod.GET) + JsonResponse cates() { + return JsonResponse.success(couponService.cates()); + } + +} \ No newline at end of file diff --git a/fumao-app/src/main/java/com/chilunyc/fumao/api/place/CouponPvController.java b/fumao-app/src/main/java/com/chilunyc/fumao/api/place/CouponPvController.java new file mode 100644 index 0000000..f7b966a --- /dev/null +++ b/fumao-app/src/main/java/com/chilunyc/fumao/api/place/CouponPvController.java @@ -0,0 +1,43 @@ +package com.chilunyc.fumao.api.place; + +import com.chilunyc.fumao.bi.model.CouponPv; +import com.chilunyc.fumao.bi.request.couponPv.CouponPvPageRequest; +import com.chilunyc.fumao.bi.service.CouponPvService; +import com.chilunyc.fumao.common.response.JsonResponse; +import com.chilunyc.fumao.common.shiro.AuthRoles; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import lombok.extern.log4j.Log4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +/** + * + */ +@Log4j +@Api(description = "优惠券数据") +@RestController +@RequestMapping("/place/coupon/pv") +@PreAuthorize(AuthRoles.PlaceAdminExp + " OR " + AuthRoles.PlaceDataExp) +class CouponPvController { + + @Autowired + CouponPvService couponPvService; + + + @ApiOperation(value = "分页") + @ApiImplicitParams({ + @ApiImplicitParam(name = "request", required = true, paramType = "body", dataType = "PageRequest") + }) + @RequestMapping(value = "/find", method = RequestMethod.POST) + JsonResponse> page(@RequestBody CouponPvPageRequest request) { + Page page = couponPvService.page(request); + return JsonResponse.success(page); + } + + +} \ No newline at end of file diff --git a/fumao-app/src/main/java/com/chilunyc/fumao/api/place/CustomerController.java b/fumao-app/src/main/java/com/chilunyc/fumao/api/place/CustomerController.java new file mode 100644 index 0000000..fc23ef2 --- /dev/null +++ b/fumao-app/src/main/java/com/chilunyc/fumao/api/place/CustomerController.java @@ -0,0 +1,80 @@ +package com.chilunyc.fumao.api.place; + +import com.chilunyc.fumao.common.request.IdsRequest; +import com.chilunyc.fumao.common.response.JsonResponse; +import com.chilunyc.fumao.common.shiro.AuthRoles; +import com.chilunyc.fumao.company.model.PlaceAdmin; +import com.chilunyc.fumao.place.model.Customer; +import com.chilunyc.fumao.place.request.customer.CustomerEditRequest; +import com.chilunyc.fumao.place.request.customer.CustomerPageRequest; +import com.chilunyc.fumao.place.service.CustomerService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import lombok.extern.log4j.Log4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; + +/** + * + */ +@Log4j +@Api(description = "顾客") +@RestController +@RequestMapping("/place/customer") +@PreAuthorize(AuthRoles.PlaceAdminExp + " OR " + AuthRoles.PlaceCustomerExp) +class CustomerController { + + @Autowired + CustomerService customerService; + + @ApiOperation(value = "分页") + @ApiImplicitParams({ + @ApiImplicitParam(name = "request", required = true, paramType = "body", dataType = "PageRequest") + }) + @RequestMapping(value = "/find", method = RequestMethod.POST) + JsonResponse> page(PlaceAdmin placeAdmin, @RequestBody CustomerPageRequest request) { + Page page = customerService.page(request); + return JsonResponse.success(page); + } + + @ApiOperation(value = "详情") + @ApiImplicitParams({ + }) + @RequestMapping(value = "/find/{id}", method = RequestMethod.GET) + JsonResponse info(PlaceAdmin placeAdmin, @PathVariable Long id) { + Customer customerResponse = customerService.find(id); + return JsonResponse.success(customerResponse); + } + + + @ApiOperation(value = "新增 | 编辑") + @ApiImplicitParams({ + @ApiImplicitParam(name = "request", required = true, paramType = "body", dataType = "Customer") + }) + @RequestMapping(value = "/edit", method = RequestMethod.POST) + JsonResponse edit(PlaceAdmin placeAdmin, @RequestBody @Valid CustomerEditRequest request) { + customerService.edit(request); + return JsonResponse.success(); + } + + @ApiOperation(value = "删除") + @ApiImplicitParams({ + @ApiImplicitParam(name = "request", required = true, paramType = "body", dataType = "IdRequest") + }) + @RequestMapping(value = "/delete", method = RequestMethod.POST) + JsonResponse remove(PlaceAdmin placeAdmin, @RequestBody @Valid IdsRequest request) { + customerService.remove(request); + return JsonResponse.success(); + } + + @RequestMapping(value = "/find/mobile/{mobile}") + JsonResponse findByMobile(@PathVariable String mobile) { + return JsonResponse.success(customerService.findByMobile(mobile)); + } +} \ No newline at end of file diff --git a/fumao-app/src/main/java/com/chilunyc/fumao/api/place/CustomerDashboardController.java b/fumao-app/src/main/java/com/chilunyc/fumao/api/place/CustomerDashboardController.java new file mode 100644 index 0000000..a19a303 --- /dev/null +++ b/fumao-app/src/main/java/com/chilunyc/fumao/api/place/CustomerDashboardController.java @@ -0,0 +1,80 @@ +package com.chilunyc.fumao.api.place; + +import com.chilunyc.fumao.bi.model.BiCustomerRegister; +import com.chilunyc.fumao.bi.model.BiTrade; +import com.chilunyc.fumao.bi.service.BiCustomerLoginService; +import com.chilunyc.fumao.bi.service.BiCustomerRegisterService; +import com.chilunyc.fumao.bi.service.BiTradeService; +import com.chilunyc.fumao.common.request.TimeRangeRequest; +import com.chilunyc.fumao.common.response.JsonResponse; +import com.chilunyc.fumao.common.response.KeyValue; +import com.chilunyc.fumao.common.shiro.AuthRoles; +import com.chilunyc.fumao.service.service.CustomerDashboardService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.log4j.Log4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * + */ +@Log4j +@Api(description = "顾客") +@RestController +@RequestMapping("/place/customer/dashboard") +@PreAuthorize(AuthRoles.PlaceAdminExp + " OR " + AuthRoles.PlaceCustomerExp) +class CustomerDashboardController { + + @Autowired + CustomerDashboardService customerDashboardService; + + @Autowired + BiCustomerRegisterService biCustomerRegisterService; + + @Autowired + BiCustomerLoginService biCustomerLoginService; + + @Autowired + BiTradeService biTradeService; + + @ApiOperation("今日新增会员") + @RequestMapping(value = "/add", method = RequestMethod.GET) + JsonResponse add() { + return JsonResponse.success(customerDashboardService.add()); + } + + + @ApiOperation("今日会员消费金额") + @RequestMapping(value = "/money", method = RequestMethod.GET) + JsonResponse money() { + return JsonResponse.success(customerDashboardService.money()); + } + + @RequestMapping(value = "/chart/register", method = RequestMethod.POST) + JsonResponse> chartRegister(@RequestBody TimeRangeRequest request) { + return JsonResponse.success( + biCustomerRegisterService.range(request.getTimeRange()) + ); + } + + @RequestMapping(value = "/chart/active", method = RequestMethod.POST) + JsonResponse> chartActive(@RequestBody TimeRangeRequest request) { + return JsonResponse.success( + biCustomerLoginService.range(request.getTimeRange()) + ); + } + + @RequestMapping(value = "/chart/trade", method = RequestMethod.POST) + JsonResponse> chartTrade(@RequestBody TimeRangeRequest request) { + return JsonResponse.success( + biTradeService.range(request.getTimeRange()) + ); + } +} \ No newline at end of file diff --git a/fumao-app/src/main/java/com/chilunyc/fumao/api/place/LoginLogoutController.java b/fumao-app/src/main/java/com/chilunyc/fumao/api/place/LoginLogoutController.java new file mode 100644 index 0000000..2929abf --- /dev/null +++ b/fumao-app/src/main/java/com/chilunyc/fumao/api/place/LoginLogoutController.java @@ -0,0 +1,52 @@ +package com.chilunyc.fumao.api.place; + +import com.chilunyc.fumao.common.request.LoginRequest; +import com.chilunyc.fumao.common.response.JsonResponse; +import com.chilunyc.fumao.common.util.jwt.JwtUtils; +import com.chilunyc.fumao.company.model.PlaceAdmin; +import com.chilunyc.fumao.company.service.PlaceAdminService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import lombok.extern.log4j.Log4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import javax.validation.Valid; + +/** + * + */ +@Log4j +@Api(description = "登录登出") +@RestController +@RequestMapping("/place") +class LoginLogoutController { + + @Autowired + PlaceAdminService placeAdminService; + + @ApiOperation(value = "登录") + @ApiImplicitParams({ + @ApiImplicitParam(name = "request", required = true, paramType = "body", dataType = "LoginRequest") + }) + @RequestMapping(value = "/login", method = RequestMethod.POST) + JsonResponse login(@RequestBody @Valid LoginRequest request) { + PlaceAdmin login = placeAdminService.login(request); + return JsonResponse.success( + JwtUtils.encode(JwtUtils.T.Market, login) + ); + } + + @ApiOperation(value = "登出") + @ApiImplicitParams({ + }) + @RequestMapping(value = "/logout", method = RequestMethod.GET) + JsonResponse logout() { + return JsonResponse.success(); + } +} \ No newline at end of file diff --git a/fumao-app/src/main/java/com/chilunyc/fumao/api/place/MerchantAdminController.java b/fumao-app/src/main/java/com/chilunyc/fumao/api/place/MerchantAdminController.java new file mode 100644 index 0000000..274c005 --- /dev/null +++ b/fumao-app/src/main/java/com/chilunyc/fumao/api/place/MerchantAdminController.java @@ -0,0 +1,92 @@ +package com.chilunyc.fumao.api.place; + +import com.chilunyc.fumao.common.request.IdsRequest; +import com.chilunyc.fumao.common.response.JsonResponse; +import com.chilunyc.fumao.common.shiro.AuthRoles; +import com.chilunyc.fumao.company.model.PlaceAdmin; +import com.chilunyc.fumao.place.model.MerchantAdmin; +import com.chilunyc.fumao.place.request.merchantAdmin.MerchantAdminEditRequest; +import com.chilunyc.fumao.place.request.merchantAdmin.MerchantAdminPageRequest; +import com.chilunyc.fumao.place.service.MerchantAdminService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import lombok.extern.log4j.Log4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * + */ +@Log4j +@Api(description = "商户管理员") +@RestController +@RequestMapping("/place/merchant/admin") +@PreAuthorize(AuthRoles.PlaceAdminExp + " OR " + AuthRoles.PlaceMerchantExp) +class MerchantAdminController { + + @Autowired + MerchantAdminService merchantAdminService; + + + @ApiOperation(value = "分页") + @ApiImplicitParams({ + @ApiImplicitParam(name = "request", required = true, paramType = "body", dataType = "PageRequest") + }) + @RequestMapping(value = "/find", method = RequestMethod.POST) + JsonResponse> page(@RequestBody MerchantAdminPageRequest request) { + Page page = merchantAdminService.page(request); + return JsonResponse.success(page); + } + + @ApiOperation(value = "详情") + @ApiImplicitParams({ + }) + @RequestMapping(value = "/find/{id}", method = RequestMethod.GET) + JsonResponse info(@PathVariable Long id) { + MerchantAdmin merchantAdminResponse = merchantAdminService.find(id); + return JsonResponse.success(merchantAdminResponse); + } + + + @ApiOperation(value = "新增 | 编辑") + @ApiImplicitParams({ + @ApiImplicitParam(name = "request", required = true, paramType = "body", dataType = "MerchantAdmin") + }) + @RequestMapping(value = "/edit", method = RequestMethod.POST) + JsonResponse edit(@RequestBody @Valid MerchantAdminEditRequest request) { + merchantAdminService.edit(request); + return JsonResponse.success(); + } + + @ApiOperation(value = "删除") + @ApiImplicitParams({ + @ApiImplicitParam(name = "request", required = true, paramType = "body", dataType = "IdRequest") + }) + @RequestMapping(value = "/delete", method = RequestMethod.POST) + JsonResponse remove(@RequestBody @Valid IdsRequest request) { + merchantAdminService.remove(request); + return JsonResponse.success(); + } + + @RequestMapping(value = "/find/all", method = RequestMethod.GET) + JsonResponse> all(MerchantAdminPageRequest request) { + return JsonResponse.success(merchantAdminService.all(request)); + } + + @ApiOperation(value = "重置密码") + @ApiImplicitParams({ + }) + @RequestMapping(value = "/reset/password/{id}", method = RequestMethod.GET) + JsonResponse resetPassword(PlaceAdmin placeAdmin, @PathVariable Long id) { + merchantAdminService.resetPassword(id); + log.info(String.format("商场管理员[ %s ]重置密码 => [ %s ]", placeAdmin.getId(), id)); + return JsonResponse.success(); + } +} \ No newline at end of file diff --git a/fumao-app/src/main/java/com/chilunyc/fumao/api/place/MerchantController.java b/fumao-app/src/main/java/com/chilunyc/fumao/api/place/MerchantController.java new file mode 100644 index 0000000..73ef681 --- /dev/null +++ b/fumao-app/src/main/java/com/chilunyc/fumao/api/place/MerchantController.java @@ -0,0 +1,79 @@ +package com.chilunyc.fumao.api.place; + +import com.chilunyc.fumao.common.request.IdsRequest; +import com.chilunyc.fumao.common.response.JsonResponse; +import com.chilunyc.fumao.common.shiro.AuthRoles; +import com.chilunyc.fumao.place.model.Merchant; +import com.chilunyc.fumao.place.request.merchant.MerchantEditRequest; +import com.chilunyc.fumao.place.request.merchant.MerchantPageRequest; +import com.chilunyc.fumao.place.service.MerchantService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import lombok.extern.log4j.Log4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; + +/** + * + */ +@Log4j +@Api(description = "商户") +@RestController +@RequestMapping("/place/merchant") +@PreAuthorize(AuthRoles.PlaceAdminExp + " OR " + AuthRoles.PlaceMerchantExp) +class MerchantController { + + @Autowired + MerchantService merchantService; + + + @ApiOperation(value = "分页") + @ApiImplicitParams({ + @ApiImplicitParam(name = "request", required = true, paramType = "body", dataType = "PageRequest") + }) + @RequestMapping(value = "/find", method = RequestMethod.POST) + JsonResponse> page(@RequestBody MerchantPageRequest request) { + Page page = merchantService.page(request); + return JsonResponse.success(page); + } + + @ApiOperation(value = "详情") + @ApiImplicitParams({ + }) + @RequestMapping(value = "/find/{id}", method = RequestMethod.GET) + JsonResponse info(@PathVariable Long id) { + Merchant merchantResponse = merchantService.find(id); + return JsonResponse.success(merchantResponse); + } + + + @ApiOperation(value = "新增 | 编辑") + @ApiImplicitParams({ + @ApiImplicitParam(name = "request", required = true, paramType = "body", dataType = "Merchant") + }) + @RequestMapping(value = "/edit", method = RequestMethod.POST) + JsonResponse edit(@RequestBody @Valid MerchantEditRequest request) { + Merchant edit = merchantService.edit(request); + return JsonResponse.success(edit); + } + + @ApiOperation(value = "删除") + @ApiImplicitParams({ + @ApiImplicitParam(name = "request", required = true, paramType = "body", dataType = "IdRequest") + }) + @RequestMapping(value = "/delete", method = RequestMethod.POST) + JsonResponse remove(@RequestBody @Valid IdsRequest request) { + merchantService.remove(request); + return JsonResponse.success(); + } + + + + +} \ No newline at end of file diff --git a/fumao-app/src/main/java/com/chilunyc/fumao/api/place/PlaceAdminController.java b/fumao-app/src/main/java/com/chilunyc/fumao/api/place/PlaceAdminController.java new file mode 100644 index 0000000..356816c --- /dev/null +++ b/fumao-app/src/main/java/com/chilunyc/fumao/api/place/PlaceAdminController.java @@ -0,0 +1,110 @@ +package com.chilunyc.fumao.api.place; + +import com.chilunyc.fumao.common.request.IdsRequest; +import com.chilunyc.fumao.common.response.JsonResponse; +import com.chilunyc.fumao.common.shiro.AuthRoles; +import com.chilunyc.fumao.company.model.PlaceAdmin; +import com.chilunyc.fumao.company.request.placeAdmin.PlaceAdminAddRequest; +import com.chilunyc.fumao.company.request.placeAdmin.PlaceAdminEditRequest; +import com.chilunyc.fumao.company.request.placeAdmin.PlaceAdminPageRequest; +import com.chilunyc.fumao.company.service.PlaceAdminService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import lombok.extern.log4j.Log4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * + */ +@Log4j +@Api(description = "商场管理员") +@RestController +@RequestMapping("/place/admin") +@PreAuthorize(AuthRoles.PlaceAdminExp + " OR " + AuthRoles.PlaceAccountExp) +class PlaceAdminController { + + @Autowired + PlaceAdminService placeAdminService; + + + @ApiOperation(value = "分页") + @ApiImplicitParams({ + @ApiImplicitParam(name = "request", required = true, paramType = "body", dataType = "PageRequest") + }) + @RequestMapping(value = "/find", method = RequestMethod.POST) + JsonResponse> page(PlaceAdmin placeAdmin, @RequestBody PlaceAdminPageRequest request) { + request.setCompanyId(placeAdmin.getPlaceId()); + Page page = placeAdminService.page(request); + return JsonResponse.success(page); + } + + @ApiOperation(value = "详情") + @ApiImplicitParams({ + }) + @RequestMapping(value = "/find/{id}", method = RequestMethod.GET) + JsonResponse info(@PathVariable Long id) { + PlaceAdmin placeAdminResponse = placeAdminService.find(id); + return JsonResponse.success(placeAdminResponse); + } + + + @ApiOperation(value = "新增 | 编辑") + @ApiImplicitParams({ + @ApiImplicitParam(name = "request", required = true, paramType = "body", dataType = "PlaceAdmin") + }) + @RequestMapping(value = "/add", method = RequestMethod.POST) + JsonResponse add(PlaceAdmin placeAdmin, @RequestBody @Valid PlaceAdminAddRequest request) { + request.setPlaceId(placeAdmin.getPlaceId()); + request.setCompanyId(placeAdmin.getCompanyId()); + PlaceAdmin add = placeAdminService.add(request); + return JsonResponse.success(add); + } + + + @ApiOperation(value = "新增 | 编辑") + @ApiImplicitParams({ + @ApiImplicitParam(name = "request", required = true, paramType = "body", dataType = "PlaceAdmin") + }) + @RequestMapping(value = "/edit", method = RequestMethod.POST) + JsonResponse edit(PlaceAdmin placeAdmin, @RequestBody @Valid PlaceAdminEditRequest request) { + request.setPlaceId(placeAdmin.getPlaceId()); + request.setCompanyId(placeAdmin.getCompanyId()); + placeAdminService.edit(request); + return JsonResponse.success(); + } + + @ApiOperation(value = "删除") + @ApiImplicitParams({ + @ApiImplicitParam(name = "request", required = true, paramType = "body", dataType = "IdRequest") + }) + @RequestMapping(value = "/delete", method = RequestMethod.POST) + JsonResponse remove(@RequestBody @Valid IdsRequest request) { + placeAdminService.remove(request); + return JsonResponse.success(); + } + + + @ApiOperation(value = "重置密码") + @ApiImplicitParams({ + }) + @RequestMapping(value = "/reset/password/{id}", method = RequestMethod.GET) + JsonResponse resetPassword(PlaceAdmin companyAdmin, @PathVariable Long id) { + placeAdminService.resetPassword(id, companyAdmin.getCompanyId()); + log.info(String.format("商场管理员[ %s ]重置密码 => [ %s ]", companyAdmin.getId(), id)); + return JsonResponse.success(); + } + + @RequestMapping(value = "/find/all", method = RequestMethod.POST) + JsonResponse> all(PlaceAdmin placeAdmin, @RequestBody PlaceAdminPageRequest request) { + request.setPlaceId(placeAdmin.getPlaceId()); + return JsonResponse.success(placeAdminService.all(request)); + } +} \ No newline at end of file diff --git a/fumao-app/src/main/java/com/chilunyc/fumao/api/place/PlaceFloorController.java b/fumao-app/src/main/java/com/chilunyc/fumao/api/place/PlaceFloorController.java new file mode 100644 index 0000000..0905cad --- /dev/null +++ b/fumao-app/src/main/java/com/chilunyc/fumao/api/place/PlaceFloorController.java @@ -0,0 +1,49 @@ +package com.chilunyc.fumao.api.place; + +import com.chilunyc.fumao.common.response.JsonResponse; +import com.chilunyc.fumao.common.response.NodeResponse; +import com.chilunyc.fumao.common.shiro.AuthRoles; +import com.chilunyc.fumao.company.model.PlaceAdmin; +import com.chilunyc.fumao.company.model.PlaceFloor; +import com.chilunyc.fumao.company.request.placeFloor.PlaceFloorPageRequest; +import com.chilunyc.fumao.company.service.PlaceFloorService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import lombok.extern.log4j.Log4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; +import java.util.Map; + +/** + * + */ +@Log4j +@Api(description = "商场楼层") +@RestController +@RequestMapping("/place/floor") +@PreAuthorize(AuthRoles.PlaceAdminExp + " OR " + AuthRoles.PlaceMerchantExp) +class PlaceFloorController { + + @Autowired + PlaceFloorService placeFloorService; + + + @ApiOperation(value = "所有") + @ApiImplicitParams({ + @ApiImplicitParam(name = "request", required = true, paramType = "body", dataType = "PageRequest") + }) + @RequestMapping(value = "/find/group", method = RequestMethod.GET) + JsonResponse< List> group(PlaceAdmin placeAdmin, PlaceFloorPageRequest request) { + request.setPlaceId(placeAdmin.getPlaceId()); + return JsonResponse.success(placeFloorService.group(request)); + } + + +} \ No newline at end of file diff --git a/fumao-app/src/main/java/com/chilunyc/fumao/api/place/PlaceSettingController.java b/fumao-app/src/main/java/com/chilunyc/fumao/api/place/PlaceSettingController.java new file mode 100644 index 0000000..7dafb15 --- /dev/null +++ b/fumao-app/src/main/java/com/chilunyc/fumao/api/place/PlaceSettingController.java @@ -0,0 +1,39 @@ +package com.chilunyc.fumao.api.place; + +import com.chilunyc.fumao.common.response.JsonResponse; +import com.chilunyc.fumao.company.model.PlaceAdmin; +import com.chilunyc.fumao.place.model.PlaceSetting; +import com.chilunyc.fumao.place.model.enums.PlaceSettingType; +import com.chilunyc.fumao.place.request.placeSetting.PlaceSettingEditRequest; +import com.chilunyc.fumao.place.service.PlaceSettingService; +import io.swagger.annotations.Api; +import lombok.extern.log4j.Log4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +/** + * + */ +@Log4j +@Api(description = "商场配置") +@RestController +@RequestMapping("/place/setting") +class PlaceSettingController { + + @Autowired + PlaceSettingService placeSettingService; + + + @RequestMapping(value = "/get/{type}", method = RequestMethod.GET) + JsonResponse get(PlaceAdmin placeAdmin, @PathVariable PlaceSettingType type) { + PlaceSetting placeSetting = placeSettingService.get(placeAdmin.getPlaceId(), type); + return JsonResponse.success(placeSetting == null ? null : placeSetting.getValue()); + } + + @RequestMapping(value = "/set", method = RequestMethod.POST) + JsonResponse set(PlaceAdmin placeAdmin, @RequestBody PlaceSettingEditRequest request) { + request.setPlaceId(placeAdmin.getPlaceId()); + placeSettingService.set(request); + return JsonResponse.success(); + } +} \ No newline at end of file diff --git a/fumao-app/src/main/java/com/chilunyc/fumao/api/place/PointTransactionController.java b/fumao-app/src/main/java/com/chilunyc/fumao/api/place/PointTransactionController.java new file mode 100644 index 0000000..d56c2c6 --- /dev/null +++ b/fumao-app/src/main/java/com/chilunyc/fumao/api/place/PointTransactionController.java @@ -0,0 +1,69 @@ +package com.chilunyc.fumao.api.place; + +import com.chilunyc.fumao.common.response.JsonResponse; +import com.chilunyc.fumao.common.shiro.AuthRoles; +import com.chilunyc.fumao.company.model.PlaceAdmin; +import com.chilunyc.fumao.place.model.PointTransaction; +import com.chilunyc.fumao.place.request.pointTransaction.PointTransactionPaddedRequest; +import com.chilunyc.fumao.place.request.pointTransaction.PointTransactionPageRequest; +import com.chilunyc.fumao.place.service.PointTransactionService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import lombok.extern.log4j.Log4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; + +/** + * + */ +@Log4j +@Api(description = "积分") +@RestController +@RequestMapping("/place/point/transaction") +@PreAuthorize(AuthRoles.PlaceAdminExp + " OR " + AuthRoles.PlaceCustomerExp) +class PointTransactionController { + + @Autowired + PointTransactionService pointTransactionService; + + + @ApiOperation(value = "分页") + @ApiImplicitParams({ + @ApiImplicitParam(name = "request", required = true, paramType = "body", dataType = "PageRequest") + }) + @RequestMapping(value = "/find", method = RequestMethod.POST) + JsonResponse> page(@RequestBody PointTransactionPageRequest request) { + Page page = pointTransactionService.page(request); + return JsonResponse.success(page); + } + + @ApiOperation(value = "详情") + @ApiImplicitParams({ + }) + @RequestMapping(value = "/find/{id}", method = RequestMethod.GET) + JsonResponse info(@PathVariable Long id) { + PointTransaction pointTransactionResponse = pointTransactionService.find(id); + return JsonResponse.success(pointTransactionResponse); + } + + + @ApiOperation(value = "新增 | 编辑") + @ApiImplicitParams({ + @ApiImplicitParam(name = "request", required = true, paramType = "body", dataType = "PointTransaction") + }) + @RequestMapping(value = "/padded", method = RequestMethod.POST) + JsonResponse padded(PlaceAdmin placeAdmin, @RequestBody @Valid PointTransactionPaddedRequest request) { + request.setAdminId(placeAdmin.getId()); + request.setPlaceId(placeAdmin.getPlaceId()); + pointTransactionService.padded(request); + return JsonResponse.success(); + } + + +} \ No newline at end of file diff --git a/fumao-app/src/main/java/com/chilunyc/fumao/api/place/ScenePvController.java b/fumao-app/src/main/java/com/chilunyc/fumao/api/place/ScenePvController.java new file mode 100644 index 0000000..14a726a --- /dev/null +++ b/fumao-app/src/main/java/com/chilunyc/fumao/api/place/ScenePvController.java @@ -0,0 +1,44 @@ +package com.chilunyc.fumao.api.place; + +import com.chilunyc.fumao.bi.model.ScenePv; +import com.chilunyc.fumao.bi.request.scenePv.ScenePvPageRequest; +import com.chilunyc.fumao.bi.service.ScenePvService; +import com.chilunyc.fumao.common.response.JsonResponse; +import com.chilunyc.fumao.common.shiro.AuthRoles; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import lombok.extern.log4j.Log4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +/** + * + */ +@Log4j +@Api(description = "场景数据") +@RestController +@RequestMapping("/place/scene/pv") +@PreAuthorize(AuthRoles.PlaceAdminExp + " OR " + AuthRoles.PlaceDataExp) +class ScenePvController { + + @Autowired + ScenePvService scenePvService; + + + @ApiOperation(value = "分页") + @ApiImplicitParams({ + @ApiImplicitParam(name = "request", required = true, paramType = "body", dataType = "PageRequest") + }) + @RequestMapping(value = "/find", method = RequestMethod.POST) + JsonResponse> page(@RequestBody ScenePvPageRequest request) { + Page page = scenePvService.page(request); + return JsonResponse.success(page); + } + + + +} \ No newline at end of file diff --git a/fumao-app/src/main/java/com/chilunyc/fumao/api/place/ShopController.java b/fumao-app/src/main/java/com/chilunyc/fumao/api/place/ShopController.java new file mode 100644 index 0000000..5bbe9fe --- /dev/null +++ b/fumao-app/src/main/java/com/chilunyc/fumao/api/place/ShopController.java @@ -0,0 +1,105 @@ +package com.chilunyc.fumao.api.place; + +import com.chilunyc.fumao.common.request.AssignsRequest; +import com.chilunyc.fumao.common.request.IdsRequest; +import com.chilunyc.fumao.common.response.JsonResponse; +import com.chilunyc.fumao.common.shiro.AuthRoles; +import com.chilunyc.fumao.company.model.PlaceAdmin; +import com.chilunyc.fumao.place.model.Shop; +import com.chilunyc.fumao.place.request.shop.ShopEditRequest; +import com.chilunyc.fumao.place.request.shop.ShopPageRequest; +import com.chilunyc.fumao.place.service.ShopService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import lombok.extern.log4j.Log4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * + */ +@Log4j +@Api(description = "商铺") +@RestController +@RequestMapping("/place/shop") +@PreAuthorize(AuthRoles.PlaceAdminExp + " OR " + AuthRoles.PlaceMerchantExp) +class ShopController { + + @Autowired + ShopService shopService; + + + @ApiOperation(value = "分页") + @ApiImplicitParams({ + @ApiImplicitParam(name = "request", required = true, paramType = "body", dataType = "PageRequest") + }) + @RequestMapping(value = "/find", method = RequestMethod.POST) + JsonResponse> page(PlaceAdmin placeAdmin, @RequestBody ShopPageRequest request) { + request.setPlaceId(placeAdmin.getPlaceId()); + Page page = shopService.page(request); + return JsonResponse.success(page); + } + + @ApiOperation(value = "详情") + @ApiImplicitParams({ + }) + @RequestMapping(value = "/find/{id}", method = RequestMethod.GET) + JsonResponse info(@PathVariable Long id) { + Shop shopResponse = shopService.find(id); + return JsonResponse.success(shopResponse); + } + + + @ApiOperation(value = "新增 | 编辑") + @ApiImplicitParams({ + @ApiImplicitParam(name = "request", required = true, paramType = "body", dataType = "Shop") + }) + @RequestMapping(value = "/edit", method = RequestMethod.POST) + JsonResponse edit(PlaceAdmin placeAdmin, @RequestBody @Valid ShopEditRequest request) { + request.setPlaceId(placeAdmin.getPlaceId()); + shopService.edit(request); + return JsonResponse.success(); + } + + @RequestMapping(value = "/assign", method = RequestMethod.POST) + JsonResponse assignToMerchant(@RequestBody @Valid AssignsRequest request) { + shopService.assign(request); + return JsonResponse.success(); + } + + @ApiOperation(value = "删除") + @ApiImplicitParams({ + @ApiImplicitParam(name = "request", required = true, paramType = "body", dataType = "IdRequest") + }) + @RequestMapping(value = "/delete", method = RequestMethod.POST) + JsonResponse remove(@RequestBody @Valid IdsRequest request) { + shopService.remove(request); + return JsonResponse.success(); + } + + @ApiOperation(value = "所有") + @ApiImplicitParams({ + }) + @RequestMapping(value = "/find/all", method = RequestMethod.GET) + JsonResponse> all(ShopPageRequest request) { + List result = shopService.all(request); + return JsonResponse.success(result); + } + + @ApiOperation(value = "解绑商户") + @ApiImplicitParams({ + }) + @RequestMapping(value = "/unbind/merchant/{shopId}", method = RequestMethod.GET) + JsonResponse unbindMerchant(@PathVariable Long shopId){ + shopService.unbindMerchant(shopId); + return JsonResponse.success(); + } + +} \ No newline at end of file diff --git a/fumao-app/src/main/java/com/chilunyc/fumao/api/place/TradeController.java b/fumao-app/src/main/java/com/chilunyc/fumao/api/place/TradeController.java new file mode 100644 index 0000000..4fcfe99 --- /dev/null +++ b/fumao-app/src/main/java/com/chilunyc/fumao/api/place/TradeController.java @@ -0,0 +1,77 @@ +package com.chilunyc.fumao.api.place; + +import com.chilunyc.fumao.common.request.IdsRequest; +import com.chilunyc.fumao.common.response.JsonResponse; +import com.chilunyc.fumao.common.shiro.AuthRoles; +import com.chilunyc.fumao.place.model.Trade; +import com.chilunyc.fumao.place.request.trade.TradeEditRequest; +import com.chilunyc.fumao.place.request.trade.TradePageRequest; +import com.chilunyc.fumao.place.service.TradeService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import lombok.extern.log4j.Log4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; + +/** + * + */ +@Log4j +@Api(description = "订单") +@RestController +@RequestMapping("/place/trade") +@PreAuthorize(AuthRoles.PlaceAdminExp + " OR " + AuthRoles.PlaceCustomerExp) +class TradeController { + + @Autowired + TradeService tradeService; + + + @ApiOperation(value = "分页") + @ApiImplicitParams({ + @ApiImplicitParam(name = "request", required = true, paramType = "body", dataType = "PageRequest") + }) + @RequestMapping(value = "/find", method = RequestMethod.POST) + JsonResponse> page(@RequestBody TradePageRequest request) { + Page page = tradeService.page(request); + return JsonResponse.success(page); + } + + @ApiOperation(value = "详情") + @ApiImplicitParams({ + }) + @RequestMapping(value = "/find/{id}", method = RequestMethod.GET) + JsonResponse info(@PathVariable Long id) { + Trade tradeResponse = tradeService.find(id); + return JsonResponse.success(tradeResponse); + } + + + @ApiOperation(value = "新增 | 编辑") + @ApiImplicitParams({ + @ApiImplicitParam(name = "request", required = true, paramType = "body", dataType = "Trade") + }) + @RequestMapping(value = "/edit", method = RequestMethod.POST) + JsonResponse edit(@RequestBody @Valid TradeEditRequest request) { + tradeService.edit(request); + return JsonResponse.success(); + } + + @ApiOperation(value = "删除") + @ApiImplicitParams({ + @ApiImplicitParam(name = "request", required = true, paramType = "body", dataType = "IdRequest") + }) + @RequestMapping(value = "/delete", method = RequestMethod.POST) + JsonResponse remove(@RequestBody @Valid IdsRequest request) { + tradeService.remove(request); + return JsonResponse.success(); + } + + +} \ No newline at end of file diff --git a/fumao-app/src/main/java/com/chilunyc/fumao/api/system/PlaceAdminController.java b/fumao-app/src/main/java/com/chilunyc/fumao/api/system/PlaceAdminController.java index 516d06d..9629e76 100644 --- a/fumao-app/src/main/java/com/chilunyc/fumao/api/system/PlaceAdminController.java +++ b/fumao-app/src/main/java/com/chilunyc/fumao/api/system/PlaceAdminController.java @@ -60,7 +60,7 @@ class PlaceAdminController { }) @RequestMapping(value = "/edit", method = RequestMethod.POST) JsonResponse edit(@RequestBody @Valid PlaceAdminEditRequest request) { - request.setPlaceAdminType(PlaceAdminType.Manager); + request.setType(PlaceAdminType.Manager); placeAdminService.edit(request); return JsonResponse.success(); } diff --git a/fumao-app/src/main/java/com/chilunyc/fumao/config/swagger/SwaggerConfig.java b/fumao-app/src/main/java/com/chilunyc/fumao/config/swagger/SwaggerConfig.java index bc4386c..da1ac60 100644 --- a/fumao-app/src/main/java/com/chilunyc/fumao/config/swagger/SwaggerConfig.java +++ b/fumao-app/src/main/java/com/chilunyc/fumao/config/swagger/SwaggerConfig.java @@ -27,10 +27,31 @@ public class SwaggerConfig { private TypeResolver typeResolver; @Bean - Docket all() { - return build("所有", "/", "所有接口"); + Docket system() { + return build("系统端", "/system", "所有接口"); } + @Bean + Docket customer() { + return build("C端", "/customer", "所有接口"); + } + + @Bean + Docket merchant() { + return build("B端", "/merchant", "所有接口"); + } + + @Bean + Docket place() { + return build("业务端", "/place", "所有接口"); + } + + @Bean + Docket company() { + return build("集团段", "/place", "所有接口"); + } + + /** * @param group * @param path diff --git a/fumao-app/src/main/java/com/chilunyc/fumao/config/web/WebConfig.java b/fumao-app/src/main/java/com/chilunyc/fumao/config/web/WebConfig.java index d2173a2..c7cac41 100644 --- a/fumao-app/src/main/java/com/chilunyc/fumao/config/web/WebConfig.java +++ b/fumao-app/src/main/java/com/chilunyc/fumao/config/web/WebConfig.java @@ -3,9 +3,11 @@ package com.chilunyc.fumao.config.web; import com.chilunyc.fumao.common.config.ApplicationProperty; import com.chilunyc.fumao.config.web.arguments.DateArgumentResolver; import com.chilunyc.fumao.config.web.arguments.LoginUserArgumentResolver; -import com.chilunyc.fumao.config.web.interceptor.AuthInterceptor; +import com.chilunyc.fumao.config.web.filter.DBRouteFilter; import com.chilunyc.fumao.config.web.interceptor.CorsInterceptor; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.web.servlet.FilterRegistrationBean; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.method.support.HandlerMethodArgumentResolver; import org.springframework.web.servlet.config.annotation.CorsRegistry; @@ -20,9 +22,6 @@ import java.util.List; @Configuration public class WebConfig extends WebMvcConfigurerAdapter { - @Autowired - private AuthInterceptor authInterceptor; - @Autowired private CorsInterceptor corsInterceptor; @@ -32,6 +31,9 @@ public class WebConfig extends WebMvcConfigurerAdapter { @Autowired private ApplicationProperty applicationConfig; + @Autowired + private DBRouteFilter dbRouteFilter; + /** * 跨域访问 * @@ -52,21 +54,6 @@ public class WebConfig extends WebMvcConfigurerAdapter { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(corsInterceptor); -// registry.addInterceptor(authInterceptor).excludePathPatterns( -// "/**/login", -// "/**/login/**", -// "/**/logout", -// "/upload", -// "/**/register/**", -// "/**/find/pwd/", -// "/**/find/pwd/**", -// "/swagger/**", -// "/swagger-resources/**", -// "/webjars/**", -// "/captcha", -// "/wx/**", -// "/error" -// ); } @Override @@ -75,4 +62,12 @@ public class WebConfig extends WebMvcConfigurerAdapter { argumentResolvers.add(new DateArgumentResolver()); } + @Bean + FilterRegistrationBean dbRouteFilter() { + FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(); + filterRegistrationBean.setFilter(dbRouteFilter); + filterRegistrationBean.addUrlPatterns("/*"); + filterRegistrationBean.setOrder(Integer.MAX_VALUE); //最后初始化, 依赖Jwt数值 + return filterRegistrationBean; + } } diff --git a/fumao-app/src/main/java/com/chilunyc/fumao/config/web/WebSecurityConfig.java b/fumao-app/src/main/java/com/chilunyc/fumao/config/web/WebSecurityConfig.java index 068cc33..5ac1ee9 100644 --- a/fumao-app/src/main/java/com/chilunyc/fumao/config/web/WebSecurityConfig.java +++ b/fumao-app/src/main/java/com/chilunyc/fumao/config/web/WebSecurityConfig.java @@ -9,7 +9,7 @@ import org.springframework.security.config.http.SessionCreationPolicy; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; /** - * Created by Tkk on 2018/7/23. + * on 2018/7/23. */ @Configuration public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @@ -39,20 +39,22 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { "/login/**", "/**/login", "/**/login/**") - .permitAll() + .permitAll() // 放行通用 - .antMatchers( - "/common/**") - .permitAll() + .antMatchers("/common/**").permitAll() + // swagger + .antMatchers("/swagger-ui.html").permitAll() + .antMatchers("/swagger-resources/**").permitAll() // 其他全部校验 .anyRequest() - .authenticated() + .authenticated() // 增加过滤器, 过滤权限 .and() .addFilterBefore(securityFilter, UsernamePasswordAuthenticationFilter.class); } + } diff --git a/fumao-app/src/main/java/com/chilunyc/fumao/config/web/filter/DBRouteFilter.java b/fumao-app/src/main/java/com/chilunyc/fumao/config/web/filter/DBRouteFilter.java new file mode 100644 index 0000000..b3e46ed --- /dev/null +++ b/fumao-app/src/main/java/com/chilunyc/fumao/config/web/filter/DBRouteFilter.java @@ -0,0 +1,54 @@ +package com.chilunyc.fumao.config.web.filter; + +import com.chilunyc.fumao.common.context.Request; +import com.chilunyc.fumao.common.context.RequestHolder; +import com.chilunyc.fumao.common.db.datasource.DynamicDataSourceHolder; +import org.springframework.stereotype.Component; +import org.springframework.web.filter.OncePerRequestFilter; + +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +/** + * on 2018/7/26. + */ +@Component +public class DBRouteFilter extends OncePerRequestFilter { + + + @Override + protected void doFilterInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, FilterChain filterChain) throws ServletException, IOException { + try { + String servletPath = httpServletRequest.getServletPath(); + String prefix = org.apache.commons.lang3.StringUtils.substringBetween(servletPath, "/", "/"); + Request request = RequestHolder.get(); + if (request != null && request.getJwtValue() != null) { + Long cid = null; + switch (prefix) { + case "system": + break; + + // 从jwt中获取 + case "company": + case "place": + cid = request.getJwtValue().get("cid", Long.class); + break; + + // 从url中获取 + default: + cid = Long.parseLong(prefix); + break; + } + if (cid != null) { + DynamicDataSourceHolder.set(cid.toString()); + } + } + filterChain.doFilter(httpServletRequest, httpServletResponse); + } finally { + DynamicDataSourceHolder.remove(); + } + } +} diff --git a/fumao-app/src/main/java/com/chilunyc/fumao/config/web/security/SecurityEntryPoint.java b/fumao-app/src/main/java/com/chilunyc/fumao/config/web/security/SecurityEntryPoint.java index b25fe4a..316a1df 100644 --- a/fumao-app/src/main/java/com/chilunyc/fumao/config/web/security/SecurityEntryPoint.java +++ b/fumao-app/src/main/java/com/chilunyc/fumao/config/web/security/SecurityEntryPoint.java @@ -12,7 +12,7 @@ import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** - * Created by Tkk on 2018/7/23. + * on 2018/7/23. */ @Log4j @Component diff --git a/fumao-app/src/main/java/com/chilunyc/fumao/config/web/security/SecurityFilter.java b/fumao-app/src/main/java/com/chilunyc/fumao/config/web/security/SecurityFilter.java index 83856c3..a30cb37 100644 --- a/fumao-app/src/main/java/com/chilunyc/fumao/config/web/security/SecurityFilter.java +++ b/fumao-app/src/main/java/com/chilunyc/fumao/config/web/security/SecurityFilter.java @@ -6,7 +6,6 @@ import com.chilunyc.fumao.common.exception.SystemException; import com.chilunyc.fumao.common.response.JsonResponse; import com.chilunyc.fumao.common.shiro.AuthUser; import com.chilunyc.fumao.common.util.jwt.JwtUtils; -import com.chilunyc.fumao.config.web.arguments.LoginUserArgumentResolver; import io.jsonwebtoken.Claims; import lombok.extern.log4j.Log4j; import org.apache.commons.lang.StringUtils; @@ -32,7 +31,7 @@ import java.util.stream.Collectors; /** * 把JWT转换为security的对象 - * Created by Tkk on 2018/7/23. + * on 2018/7/23. */ @Component @Log4j @@ -49,6 +48,11 @@ public class SecurityFilter extends OncePerRequestFilter { .request(httpServletRequest) .build(); String servletPath = httpServletRequest.getServletPath(); + if (isIgnore(servletPath)) { + filterChain.doFilter(httpServletRequest, httpServletResponse); + return; + } + String prefix = org.apache.commons.lang3.StringUtils.substringBetween(servletPath, "/", "/"); switch (prefix) { case "system": @@ -108,6 +112,13 @@ public class SecurityFilter extends OncePerRequestFilter { } } + + private boolean isIgnore(String servletPath) { + return servletPath.startsWith("/swagger") || + servletPath.startsWith("/webjar") || + servletPath.startsWith("/common"); + } + /** * @param claims * @return diff --git a/fumao-app/src/main/java/com/chilunyc/fumao/controller/common/LBSController.java b/fumao-app/src/main/java/com/chilunyc/fumao/controller/common/LBSController.java new file mode 100644 index 0000000..07c095d --- /dev/null +++ b/fumao-app/src/main/java/com/chilunyc/fumao/controller/common/LBSController.java @@ -0,0 +1,34 @@ +package com.chilunyc.fumao.controller.common; + +import com.chilunyc.fumao.common.lbs.request.LBSPoiRequest; +import com.chilunyc.fumao.common.lbs.service.LBSService; +import com.chilunyc.fumao.common.response.JsonResponse; +import com.chilunyc.fumao.common.shiro.AuthRoles; +import io.swagger.annotations.Api; +import lombok.extern.log4j.Log4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import javax.validation.Valid; + +/** + * + */ +@Log4j +@Api(description = "登录登出") +@RestController +@RequestMapping("/common/lbs") +class LBSController { + + @Autowired + LBSService lbsService; + + @RequestMapping(value = "/poi/find", method = RequestMethod.POST) + JsonResponse login(@RequestBody @Valid LBSPoiRequest request) { + return JsonResponse.success(lbsService.findPoi(request)); + } +} \ No newline at end of file diff --git a/fumao-app/src/main/resources/application.prod.properties b/fumao-app/src/main/resources/application.prod.properties index eab43b2..93bec8f 100644 --- a/fumao-app/src/main/resources/application.prod.properties +++ b/fumao-app/src/main/resources/application.prod.properties @@ -2,7 +2,7 @@ ## ###### logging.level.root=INFO -logging.level.com.aki=INFO +logging.level.com.chilunyc=INFO logging.level.org.springframework=INFO logging.config=/opt/projects/config/logback.xml @@ -57,7 +57,7 @@ spring.redis.pool.max-wait=-1 ###### ## \u6570\u636E\u6E90 ###### -mybatis.mapper-locations=classpath*:com/aki/**/*Mapper.xml +mybatis.mapper-locations=classpath*:com/chilunyc/**/*Mapper.xml mybatis.configuration.default-fetch-size=100 mybatis.configuration.default-statement-timeout=30 mybatis.configuration.map-underscore-to-camel-case=true diff --git a/fumao-app/src/main/resources/application.properties b/fumao-app/src/main/resources/application.properties index 7c37b51..239df50 100644 --- a/fumao-app/src/main/resources/application.properties +++ b/fumao-app/src/main/resources/application.properties @@ -2,7 +2,7 @@ ## ###### logging.level.root=INFO -logging.level.com.aki=TRACE +logging.level.com.chilunyc=TRACE logging.level.org.springframework=INFO logging.level.org.hibernate=INFO @@ -46,14 +46,19 @@ pagehelper.helperDialect=mysql pagehelper.reasonable=true pagehelper.row-bounds-with-count=true pagehelper.supportMethodsArguments=true -spring.jpa.hibernate.ddl-auto=update +#spring.jpa.hibernate.ddl-auto=update spring.jpa.show-sql=true spring.jpa.open-in-view=false -spring.datasource.testOnBorrow=true -spring.datasource.url=jdbc:mysql://127.0.0.1:3306/demo?characterEncoding=UTF-8&&zeroDateTimeBehavior=convertToNull&autoReconnect=true&failOverReadOnly=false&connectTimeout=0 -#spring.datasource.url=jdbc:mysql://127.0.0.1:3306/demo?characterEncoding=UTF-8&&zeroDateTimeBehavior=convertToNull&autoReconnect=true&failOverReadOnly=false&connectTimeout=0&useSSL=true -spring.datasource.username=root -spring.datasource.password= +db.host=127.0.0.1 +db.port=3306 +db.user=root +db.password= +db.pool=10 +#spring.datasource.testOnBorrow=true +#spring.datasource.url=jdbc:mysql://127.0.0.1:3306/demo?characterEncoding=UTF-8&&zeroDateTimeBehavior=convertToNull&autoReconnect=true&failOverReadOnly=false&connectTimeout=0 +##spring.datasource.url=jdbc:mysql://127.0.0.1:3306/demo?characterEncoding=UTF-8&&zeroDateTimeBehavior=convertToNull&autoReconnect=true&failOverReadOnly=false&connectTimeout=0&useSSL=true +#spring.datasource.username=root +#spring.datasource.password= ###### ## redis @@ -93,6 +98,18 @@ wechat.mp.aesKey= wechat.mp.mch-id= wechat.mp.mch-key= wechat.mp.key-path= + +###### +## \u5FAE\u4FE1 +###### +wechat.ma.app-id=wx9d227fced4b94c12 +wechat.ma.secret=bc7ef9506b69fa5bc4249103e0c14ff6 +wechat.ma.token= +wechat.ma.aesKey= +wechat.ma.mch-id= +wechat.ma.mch-key= +wechat.ma.key-path= + ###### ## \u767E\u5EA6 ###### diff --git a/fumao-app/src/main/resources/flyway/company/V1__init.sql b/fumao-app/src/main/resources/flyway/company/V1__init.sql new file mode 100644 index 0000000..4bee0ec --- /dev/null +++ b/fumao-app/src/main/resources/flyway/company/V1__init.sql @@ -0,0 +1,553 @@ +# ************************************************************ +# Sequel Pro SQL dump +# Version 4541 +# +# http://www.sequelpro.com/ +# https://github.com/sequelpro/sequelpro +# +# Host: 127.0.0.1 (MySQL 5.7.21) +# Database: f_system +# Generation Time: 2018-07-30 13:27:21 +0000 +# ************************************************************ + + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + + +# Dump of table fumao_client_pv +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `fumao_client_pv`; + +CREATE TABLE `fumao_client_pv` ( + `id` bigint(20) NOT NULL, + `coupon_count` bigint(9) DEFAULT NULL COMMENT '领取量', + `coupon_customer_count` bigint(9) DEFAULT NULL COMMENT '领取人数', + `create_time` date DEFAULT NULL COMMENT '创建时间', + `pv` bigint(9) DEFAULT NULL COMMENT 'pv', + `uv` bigint(9) DEFAULT NULL COMMENT 'uv', + `write_off_count` bigint(9) DEFAULT NULL COMMENT '核销量', + `write_off_customer_count` bigint(9) DEFAULT NULL COMMENT '核销人数', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + + + +# Dump of table fumao_company +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `fumao_company`; + +CREATE TABLE `fumao_company` ( + `id` bigint(64) NOT NULL, + `address` varchar(64) DEFAULT NULL COMMENT '地址', + `area` varchar(10) DEFAULT NULL COMMENT '区域', + `city` varchar(10) DEFAULT NULL COMMENT '城市', + `create_time` datetime DEFAULT NULL, + `lat` varchar(12) DEFAULT NULL COMMENT '经度', + `lng` varchar(12) DEFAULT NULL COMMENT '纬度', + `name` varchar(64) DEFAULT NULL COMMENT '名称', + `poi` varchar(64) DEFAULT NULL COMMENT 'POI', + `province` varchar(10) DEFAULT NULL COMMENT '省份', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + + +# Dump of table fumao_company_admin +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `fumao_company_admin`; + +CREATE TABLE `fumao_company_admin` ( + `id` bigint(64) NOT NULL, + `company_id` varchar(64) DEFAULT NULL COMMENT '集团', + `create_time` date DEFAULT NULL COMMENT '创建时间', + `mobile` varchar(20) DEFAULT NULL COMMENT '手机号', + `name` varchar(64) DEFAULT NULL COMMENT '名称', + `password` varchar(32) DEFAULT NULL COMMENT '密码', + `salt` varchar(32) DEFAULT NULL COMMENT '盐值', + `origin_password` varchar(32) DEFAULT NULL COMMENT '初始密码', + PRIMARY KEY (`id`), + KEY `company_admin_mobile` (`mobile`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + + +# Dump of table fumao_company_apply +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `fumao_company_apply`; + +CREATE TABLE `fumao_company_apply` ( + `id` bigint(64) NOT NULL, + `create_time` date DEFAULT NULL COMMENT '创建时间', + `market` text COMMENT '备注', + `mobile` varchar(20) DEFAULT NULL COMMENT '手机号', + `name` varchar(64) DEFAULT NULL COMMENT '集团名称', + `proposer` varchar(64) DEFAULT NULL COMMENT '申请人', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + + +# Dump of table fumao_coupon +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `fumao_coupon`; + +CREATE TABLE `fumao_coupon` ( + `id` bigint(20) NOT NULL, + `amount` double(9,2) DEFAULT NULL COMMENT '面额', + `cover` text COLLATE utf8mb4_unicode_ci COMMENT '封面', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `description` text COLLATE utf8mb4_unicode_ci COMMENT '使用须知', + `kind` int(1) DEFAULT NULL COMMENT '类型', + `max_num` text COLLATE utf8mb4_unicode_ci COMMENT '限领', + `merchant_id` bigint(64) DEFAULT NULL COMMENT '商户', + `open_end` date DEFAULT NULL COMMENT '发放结束日期', + `open_from` date DEFAULT NULL COMMENT '发放开始日期', + `place_id` bigint(64) DEFAULT NULL COMMENT '商场', + `remain` int(9) DEFAULT NULL COMMENT '剩余库存', + `require_amount` double(9,2) DEFAULT NULL COMMENT '售价', + `send_way` int(1) DEFAULT NULL COMMENT '发劵方式', + `status` int(1) DEFAULT NULL COMMENT '状态', + `stock` int(9) DEFAULT NULL COMMENT '库存', + `sub_title` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '副标题', + `title` varchar(30) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '名称', + `valid_day` text COLLATE utf8mb4_unicode_ci COMMENT '有效日', + `valid_end` date DEFAULT NULL COMMENT '有效结束日期', + `valid_from` date DEFAULT NULL COMMENT '有效开始日期', + PRIMARY KEY (`id`), +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + + + +# Dump of table fumao_coupon_pv +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `fumao_coupon_pv`; + +CREATE TABLE `fumao_coupon_pv` ( + `id` bigint(20) NOT NULL, + `coupon_count` bigint(9) DEFAULT NULL COMMENT '领取量', + `coupon_customer_count` bigint(9) DEFAULT NULL COMMENT '领取人数', + `create_time` date DEFAULT NULL COMMENT '创建时间', + `pv` bigint(9) DEFAULT NULL COMMENT 'pv', + `uv` bigint(9) DEFAULT NULL COMMENT 'uv', + `write_off_count` bigint(9) DEFAULT NULL COMMENT '核销量', + `write_off_customer_count` bigint(9) DEFAULT NULL COMMENT '核销人数', + `coupon_kind` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '优惠券类型', + `coupon_name` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '优惠券名称', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + + + +# Dump of table fumao_customer +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `fumao_customer`; + +CREATE TABLE `fumao_customer` ( + `id` bigint(20) NOT NULL, + `address` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '住址', + `birth` date DEFAULT NULL COMMENT '出生日期', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `education` text COLLATE utf8mb4_unicode_ci COMMENT '学历', + `email` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '邮箱', + `mobile` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '手机号', + `name` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '名称', + `score` int(9) DEFAULT NULL COMMENT '积分', + `sex` int(1) DEFAULT NULL COMMENT '性别', + `channel` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '注册渠道', + PRIMARY KEY (`id`), + KEY `customer_mobile` (`mobile`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + + + +# Dump of table fumao_event_log +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `fumao_event_log`; + +CREATE TABLE `fumao_event_log` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `content` longtext, + `create_time` datetime DEFAULT NULL, + `ip` varchar(255) DEFAULT NULL, + `operator` varchar(32) DEFAULT NULL, + `target` int(11) DEFAULT NULL, + `target_id` varchar(32) DEFAULT NULL, + `type` int(11) DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `event_log_operator` (`operator`), + KEY `event_log_targetId` (`target_id`), + KEY `event_log_type` (`type`), + KEY `event_log_target` (`target`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + + +# Dump of table fumao_merchant +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `fumao_merchant`; + +CREATE TABLE `fumao_merchant` ( + `id` bigint(20) NOT NULL, + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `image` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '图片', + `mobile` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '联系方式', + `name` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '名称', + PRIMARY KEY (`id`), + KEY `merchant_mobile` (`mobile`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + + + +# Dump of table fumao_merchant_admin +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `fumao_merchant_admin`; + +CREATE TABLE `fumao_merchant_admin` ( + `id` bigint(20) NOT NULL, + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `merchant_id` bigint(64) DEFAULT NULL COMMENT '商户', + `mobile` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '手机号', + `name` text COLLATE utf8mb4_unicode_ci COMMENT '名称', + `origin_password` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '原始密码', + `password` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '密码', + `salt` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '盐值', + PRIMARY KEY (`id`), + KEY `merchant_admin_mobile` (`mobile`), + KEY `merchant_admin_merchantId` (`merchant_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + + + +# Dump of table fumao_place +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `fumao_place`; + +CREATE TABLE `fumao_place` ( + `id` bigint(64) NOT NULL, + `address` varchar(64) DEFAULT NULL COMMENT '地址', + `area` varchar(10) DEFAULT NULL COMMENT '区域', + `city` varchar(10) DEFAULT NULL COMMENT '城市', + `company_id` varchar(64) DEFAULT NULL COMMENT '集团', + `create_time` datetime DEFAULT NULL, + `depot_area` decimal(9,2) DEFAULT NULL COMMENT '停车场面积', + `etcp_id` varchar(128) DEFAULT NULL COMMENT 'ETCP', + `lat` varchar(12) DEFAULT NULL COMMENT '经度', + `lng` varchar(12) DEFAULT NULL COMMENT '纬度', + `maiwaidi_id` varchar(128) DEFAULT NULL COMMENT '迈外迪', + `name` varchar(64) DEFAULT NULL COMMENT '名称', + `poi` varchar(64) DEFAULT NULL COMMENT 'POI', + `province` varchar(10) DEFAULT NULL COMMENT '省份', + `selling_area` decimal(9,2) DEFAULT NULL COMMENT '营业面积', + `total_area` decimal(9,2) DEFAULT NULL COMMENT '总面积', + PRIMARY KEY (`id`), + KEY `market_companyId` (`company_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + + +# Dump of table fumao_place_admin +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `fumao_place_admin`; + +CREATE TABLE `fumao_place_admin` ( + `id` bigint(64) NOT NULL, + `company_id` varchar(64) DEFAULT NULL COMMENT '集团', + `create_time` date DEFAULT NULL COMMENT '创建时间', + `mobile` varchar(20) DEFAULT NULL COMMENT '手机号', + `name` varchar(64) DEFAULT NULL COMMENT '名称', + `password` varchar(32) DEFAULT NULL COMMENT '密码', + `place_admin_role_id` varchar(64) DEFAULT NULL COMMENT '角色', + `place_id` varchar(64) DEFAULT NULL COMMENT '集团商场', + `salt` varchar(32) DEFAULT NULL COMMENT '盐值', + `type` int(1) DEFAULT NULL COMMENT '类型', + `origin_password` varchar(32) DEFAULT NULL COMMENT '初始密码', + PRIMARY KEY (`id`), + KEY `market_admin_mobile` (`mobile`), + KEY `market_admin_marketId` (`place_id`), + KEY `market_admin_placeId` (`place_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + + +# Dump of table fumao_place_admin_permission +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `fumao_place_admin_permission`; + +CREATE TABLE `fumao_place_admin_permission` ( + `id` bigint(64) NOT NULL, + `create_time` date DEFAULT NULL COMMENT '创建时间', + `name` varchar(32) DEFAULT NULL COMMENT '名称', + `place_admin_id` bigint(64) DEFAULT NULL COMMENT '业务管理员', + `has` int(11) DEFAULT NULL COMMENT '是否有权限', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + + +# Dump of table fumao_place_floor +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `fumao_place_floor`; + +CREATE TABLE `fumao_place_floor` ( + `id` bigint(64) NOT NULL, + `area` decimal(9,2) DEFAULT NULL COMMENT '面积', + `create_time` date DEFAULT NULL COMMENT '创建时间', + `floor` varchar(2) DEFAULT NULL COMMENT '楼层', + `image` text COMMENT '平面图', + `place_id` varchar(64) DEFAULT NULL COMMENT '商场', + `tower` varchar(2) DEFAULT NULL COMMENT '几座', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + + +# Dump of table fumao_point_transaction +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `fumao_point_transaction`; + +CREATE TABLE `fumao_point_transaction` ( + `id` bigint(20) NOT NULL, + `admin_id` bigint(64) DEFAULT NULL COMMENT '操作人', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `customer_id` bigint(64) DEFAULT NULL COMMENT '客户', + `customer_mobile` varchar(20) DEFAULT NULL COMMENT '手机号', + `dest` int(9) DEFAULT NULL COMMENT '现在积分', + `oper` int(9) DEFAULT NULL COMMENT '操作积分', + `origin` int(9) DEFAULT NULL COMMENT '原始积分', + `trade_id` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '订单ID', + `place_id` bigint(64) DEFAULT NULL COMMENT '操作人', + PRIMARY KEY (`id`), + KEY `point_transaction_tradeId` (`trade_id`), + KEY `point_transaction_customerId` (`customer_id`), + KEY `point_transaction_placeId` (`place_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + + + +# Dump of table fumao_scene_pv +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `fumao_scene_pv`; + +CREATE TABLE `fumao_scene_pv` ( + `id` bigint(20) NOT NULL, + `create_time` date DEFAULT NULL COMMENT '创建时间', + `parking_count` bigint(9) DEFAULT NULL COMMENT '车辆数', + `push_count` bigint(9) DEFAULT NULL COMMENT '发劵量', + `write_off_count` bigint(9) DEFAULT NULL COMMENT '核销数', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + + + +# Dump of table fumao_shop +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `fumao_shop`; + +CREATE TABLE `fumao_shop` ( + `id` bigint(20) NOT NULL, + `address` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '地址', + `city` varchar(10) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '城市', + `cover` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '封面', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `floor` bigint(64) DEFAULT NULL COMMENT '楼层', + `lat` varchar(12) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '经度', + `lng` varchar(12) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '纬度', + `merchant_id` bigint(64) DEFAULT NULL COMMENT '商户', + `number` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '商铺号', + `place_id` bigint(64) DEFAULT NULL COMMENT '商场', + `poi` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'POI', + `selling_area` double(9,2) DEFAULT NULL COMMENT '营业面积', + `total_area` double(9,2) DEFAULT NULL COMMENT '建筑面积', + `area` varchar(10) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '城市', + `province` varchar(10) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '城市', + PRIMARY KEY (`id`), + KEY `shop_number` (`number`), + KEY `shop_merchantId` (`merchant_id`), + KEY `shop_placeId` (`place_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + + + +# Dump of table fumao_shop_apply +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `fumao_shop_apply`; + +CREATE TABLE `fumao_shop_apply` ( + `id` bigint(64) NOT NULL, + `create_time` date DEFAULT NULL COMMENT '创建时间', + `market` text COMMENT '备注', + `mobile` varchar(20) DEFAULT NULL COMMENT '手机号', + `name` varchar(64) DEFAULT NULL COMMENT '商铺名称', + `proposer` varchar(64) DEFAULT NULL COMMENT '申请人', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + + +# Dump of table fumao_sms +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `fumao_sms`; + +CREATE TABLE `fumao_sms` ( + `id` bigint(64) NOT NULL, + `check_count` int(11) DEFAULT NULL, + `content` varchar(255) DEFAULT NULL, + `create_time` datetime DEFAULT NULL, + `expired_time` datetime DEFAULT NULL, + `is_check` bit(1) DEFAULT NULL, + `mark` varchar(255) DEFAULT NULL, + `mobile` varchar(11) DEFAULT NULL, + `type` varchar(16) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + + +# Dump of table fumao_system_admin +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `fumao_system_admin`; + +CREATE TABLE `fumao_system_admin` ( + `id` bigint(20) NOT NULL, + `create_time` date DEFAULT NULL COMMENT '创建时间', + `mobile` varchar(20) DEFAULT NULL COMMENT '手机号', + `name` varchar(64) DEFAULT NULL COMMENT '名称', + `password` varchar(32) DEFAULT NULL COMMENT '密码', + `salt` varchar(32) DEFAULT NULL COMMENT '盐值', + PRIMARY KEY (`id`), + KEY `system_admin_mobile` (`mobile`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + + +# Dump of table fumao_trade +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `fumao_trade`; + +CREATE TABLE `fumao_trade` ( + `id` bigint(20) NOT NULL, + `amount` decimal(9,2) DEFAULT NULL COMMENT '面额', + `coupon_id` bigint(64) DEFAULT NULL COMMENT '优惠券', + `coupon_name` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '优惠券名称', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `customer_id` bigint(64) DEFAULT NULL COMMENT '客户', + `expired_time` date DEFAULT NULL COMMENT '过期时间', + `merchant_id` bigint(64) DEFAULT NULL COMMENT '商户', + `pay_time` date DEFAULT NULL COMMENT '支付时间', + `place_id` bigint(64) DEFAULT NULL COMMENT '商场', + `require_amount` decimal(9,2) DEFAULT NULL COMMENT '金额', + `shop_id` bigint(64) DEFAULT NULL COMMENT '商铺', + `status` int(1) DEFAULT NULL COMMENT '状态', + `use_time` date DEFAULT NULL COMMENT '使用时间', + PRIMARY KEY (`id`), + KEY `trade_couponId` (`coupon_id`), + KEY `trade_customerId` (`customer_id`), + KEY `trade_shopId` (`shop_id`), + KEY `trade_merchantId` (`merchant_id`), + KEY `trade_placeId` (`place_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +DROP TABLE IF EXISTS `fumao_bi_customer_register`; +CREATE TABLE `fumao_bi_customer_register` ( + `id` bigint(20) NOT NULL, + `create_time` date DEFAULT NULL COMMENT '创建时间', + `register_count` bigint(9) DEFAULT NULL COMMENT '注册量', + `total` bigint(9) DEFAULT NULL COMMENT '总量', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +DROP TABLE IF EXISTS `fumao_bi_trade`; +CREATE TABLE `fumao_bi_trade` ( + `id` bigint(20) NOT NULL, + `create_time` date DEFAULT NULL COMMENT '创建时间', + `today` bigint(9) DEFAULT NULL COMMENT '今日', + `today_cash` decimal(9,2) DEFAULT NULL COMMENT '今日金额', + `total` bigint(9) DEFAULT NULL COMMENT '总量', + `total_cash` decimal(9,2) DEFAULT NULL COMMENT '消费金额', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +DROP TABLE IF EXISTS `fumao_place_setting`; +CREATE TABLE `fumao_place_setting` ( + `id` bigint(20) NOT NULL, + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `place_id` bigint(64) DEFAULT NULL COMMENT '商场', + `type` int(1) DEFAULT NULL COMMENT '类型', + `value` text COLLATE utf8mb4_unicode_ci COMMENT '数值', + PRIMARY KEY (`id`), + KEY `place_setting_placeId` (`place_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +DROP TABLE IF EXISTS `fumao_tag`; +CREATE TABLE `fumao_tag` ( + `id` bigint(20) NOT NULL, + `cate` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '组', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `name` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '名称', + `target_id` bigint(64) DEFAULT NULL COMMENT '目标', + `value` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '数值', + PRIMARY KEY (`id`), + KEY `tag_name` (`name`), + KEY `tag_cate` (`cate`), + KEY `tag_targetId` (`target_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +DROP TABLE IF EXISTS `fumao_bi_customer_login`; +CREATE TABLE `fumao_bi_customer_login` ( + `id` bigint(20) NOT NULL, + `channel` varchar(16) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '渠道', + `create_time` date DEFAULT NULL COMMENT '创建时间', + `customer_id` bigint(64) DEFAULT NULL COMMENT '会员', + `ip` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'IP', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + + +DROP TABLE IF EXISTS `fumao_coupon_channel`; +CREATE TABLE `fumao_coupon_channel` ( + `id` bigint(20) NOT NULL, + `cate` varchar(16) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '分类', + `channel` int(1) DEFAULT NULL COMMENT '渠道', + `coupon_id` bigint(64) DEFAULT NULL COMMENT '优惠卷', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `place_id` bigint(64) DEFAULT NULL COMMENT '商场', + PRIMARY KEY (`id`), + KEY `coupon_channel_couponId` (`coupon_id`), + KEY `coupon_channel_channel` (`channel`), + KEY `coupon_channel_placeId` (`place_id`), + KEY `coupon_channel_cate` (`cate`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; diff --git a/fumao-app/src/main/resources/flyway/system/V1__Init.sql b/fumao-app/src/main/resources/flyway/system/V1__Init.sql new file mode 100644 index 0000000..ce43926 --- /dev/null +++ b/fumao-app/src/main/resources/flyway/system/V1__Init.sql @@ -0,0 +1,243 @@ +# ************************************************************ +# Sequel Pro SQL dump +# Version 4541 +# +# http://www.sequelpro.com/ +# https://github.com/sequelpro/sequelpro +# +# Host: 127.0.0.1 (MySQL 5.7.21) +# Database: demo +# Generation Time: 2018-07-26 03:49:04 +0000 +# ************************************************************ + + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + + +# Dump of table fumao_company +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `fumao_company`; + +CREATE TABLE `fumao_company` ( + `id` bigint(64) NOT NULL, + `address` varchar(64) DEFAULT NULL COMMENT '地址', + `area` varchar(10) DEFAULT NULL COMMENT '区域', + `city` varchar(10) DEFAULT NULL COMMENT '城市', + `create_time` datetime DEFAULT NULL, + `lat` varchar(12) DEFAULT NULL COMMENT '经度', + `lng` varchar(12) DEFAULT NULL COMMENT '纬度', + `name` varchar(64) DEFAULT NULL COMMENT '名称', + `poi` varchar(64) DEFAULT NULL COMMENT 'POI', + `province` varchar(10) DEFAULT NULL COMMENT '省份', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + + +# Dump of table fumao_company_admin +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `fumao_company_admin`; + +CREATE TABLE `fumao_company_admin` ( + `id` bigint(64) NOT NULL, + `company_id` varchar(64) DEFAULT NULL COMMENT '集团', + `create_time` date DEFAULT NULL COMMENT '创建时间', + `mobile` varchar(20) DEFAULT NULL COMMENT '手机号', + `name` varchar(64) DEFAULT NULL COMMENT '名称', + `password` varchar(32) DEFAULT NULL COMMENT '密码', + `salt` varchar(32) DEFAULT NULL COMMENT '盐值', + `origin_password` varchar(32) DEFAULT NULL COMMENT '初始密码', + PRIMARY KEY (`id`), + KEY `company_admin_mobile` (`mobile`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + + +# Dump of table fumao_company_apply +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `fumao_company_apply`; + +CREATE TABLE `fumao_company_apply` ( + `id` bigint(64) NOT NULL, + `create_time` date DEFAULT NULL COMMENT '创建时间', + `market` text COMMENT '备注', + `mobile` varchar(20) DEFAULT NULL COMMENT '手机号', + `name` varchar(64) DEFAULT NULL COMMENT '集团名称', + `proposer` varchar(64) DEFAULT NULL COMMENT '申请人', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + + +# Dump of table fumao_event_log +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `fumao_event_log`; + +CREATE TABLE `fumao_event_log` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `content` longtext, + `create_time` datetime DEFAULT NULL, + `ip` varchar(255) DEFAULT NULL, + `operator` varchar(32) DEFAULT NULL, + `target` int(11) DEFAULT NULL, + `target_id` varchar(32) DEFAULT NULL, + `type` int(11) DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `event_log_operator` (`operator`), + KEY `event_log_targetId` (`target_id`), + KEY `event_log_type` (`type`), + KEY `event_log_target` (`target`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + + +# Dump of table fumao_place +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `fumao_place`; + +CREATE TABLE `fumao_place` ( + `id` bigint(64) NOT NULL, + `address` varchar(64) DEFAULT NULL COMMENT '地址', + `area` varchar(10) DEFAULT NULL COMMENT '区域', + `city` varchar(10) DEFAULT NULL COMMENT '城市', + `company_id` varchar(64) DEFAULT NULL COMMENT '集团', + `create_time` datetime DEFAULT NULL, + `depot_area` decimal(9,2) DEFAULT NULL COMMENT '停车场面积', + `etcp_id` varchar(128) DEFAULT NULL COMMENT 'ETCP', + `lat` varchar(12) DEFAULT NULL COMMENT '经度', + `lng` varchar(12) DEFAULT NULL COMMENT '纬度', + `maiwaidi_id` varchar(128) DEFAULT NULL COMMENT '迈外迪', + `name` varchar(64) DEFAULT NULL COMMENT '名称', + `poi` varchar(64) DEFAULT NULL COMMENT 'POI', + `province` varchar(10) DEFAULT NULL COMMENT '省份', + `selling_area` decimal(9,2) DEFAULT NULL COMMENT '营业面积', + `total_area` decimal(9,2) DEFAULT NULL COMMENT '总面积', + PRIMARY KEY (`id`), + KEY `market_companyId` (`company_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + + +# Dump of table fumao_place_admin +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `fumao_place_admin`; + +CREATE TABLE `fumao_place_admin` ( + `id` bigint(64) NOT NULL, + `company_id` varchar(64) DEFAULT NULL COMMENT '集团', + `create_time` date DEFAULT NULL COMMENT '创建时间', + `mobile` varchar(20) DEFAULT NULL COMMENT '手机号', + `name` varchar(64) DEFAULT NULL COMMENT '名称', + `password` varchar(32) DEFAULT NULL COMMENT '密码', + `place_admin_role_id` varchar(64) DEFAULT NULL COMMENT '角色', + `place_id` varchar(64) DEFAULT NULL COMMENT '集团商场', + `salt` varchar(32) DEFAULT NULL COMMENT '盐值', + `type` int(1) DEFAULT NULL COMMENT '类型', + `origin_password` varchar(32) DEFAULT NULL COMMENT '初始密码', + PRIMARY KEY (`id`), + KEY `market_admin_mobile` (`mobile`), + KEY `market_admin_marketId` (`place_id`), + KEY `market_admin_placeId` (`place_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + + +# Dump of table fumao_place_admin_permission +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `fumao_place_admin_permission`; + +CREATE TABLE `fumao_place_admin_permission` ( + `id` bigint(64) NOT NULL, + `create_time` date DEFAULT NULL COMMENT '创建时间', + `name` varchar(32) DEFAULT NULL COMMENT '名称', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + + +# Dump of table fumao_place_floor +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `fumao_place_floor`; + +CREATE TABLE `fumao_place_floor` ( + `id` bigint(64) NOT NULL, + `area` decimal(9,2) DEFAULT NULL COMMENT '面积', + `create_time` date DEFAULT NULL COMMENT '创建时间', + `floor` varchar(2) DEFAULT NULL COMMENT '楼层', + `image` text COMMENT '平面图', + `place_id` varchar(64) DEFAULT NULL COMMENT '商场', + `tower` varchar(2) DEFAULT NULL COMMENT '几座', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + + +# Dump of table fumao_shop_apply +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `fumao_shop_apply`; + +CREATE TABLE `fumao_shop_apply` ( + `id` bigint(64) NOT NULL, + `create_time` date DEFAULT NULL COMMENT '创建时间', + `market` text COMMENT '备注', + `mobile` varchar(20) DEFAULT NULL COMMENT '手机号', + `name` varchar(64) DEFAULT NULL COMMENT '商铺名称', + `proposer` varchar(64) DEFAULT NULL COMMENT '申请人', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + + +# Dump of table fumao_sms +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `fumao_sms`; + +CREATE TABLE `fumao_sms` ( + `id` bigint(64) NOT NULL, + `check_count` int(11) DEFAULT NULL, + `content` varchar(255) DEFAULT NULL, + `create_time` datetime DEFAULT NULL, + `expired_time` datetime DEFAULT NULL, + `is_check` bit(1) DEFAULT NULL, + `mark` varchar(255) DEFAULT NULL, + `mobile` varchar(11) DEFAULT NULL, + `type` varchar(16) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + + +# Dump of table fumao_system_admin +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `fumao_system_admin`; + +CREATE TABLE `fumao_system_admin` ( + `id` bigint(20) NOT NULL, + `create_time` date DEFAULT NULL COMMENT '创建时间', + `mobile` varchar(20) DEFAULT NULL COMMENT '手机号', + `name` varchar(64) DEFAULT NULL COMMENT '名称', + `password` varchar(32) DEFAULT NULL COMMENT '密码', + `salt` varchar(32) DEFAULT NULL COMMENT '盐值', + PRIMARY KEY (`id`), + KEY `system_admin_mobile` (`mobile`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + + diff --git a/fumao-app/src/main/resources/messages.properties b/fumao-app/src/main/resources/messages.properties index e07f113..cbb509f 100644 --- a/fumao-app/src/main/resources/messages.properties +++ b/fumao-app/src/main/resources/messages.properties @@ -1,7 +1,7 @@ 000000=ok 000001=\u7CFB\u7EDF\u9519\u8BEF 000002=\u5C1A\u672A\u767B\u5F55 -000003=\u53C2\u6570\u9519\u8BEF +000003={0} 000004=\u7528\u6237\u540D\u6216\u5BC6\u7801\u9519\u8BEF 000005=\u5FAE\u4FE1\u9519\u8BEF 000006=\u6CA1\u6709\u6743\u9650\u8BBF\u95EE @@ -10,4 +10,5 @@ 100000=\u5DF2\u5B58\u5728\u76F8\u540C\u7684\u624B\u673A\u53F7 -100001=\u4E0D\u80FD\u5220\u9664\u81EA\u5DF1 \ No newline at end of file +100001=\u4E0D\u80FD\u5220\u9664\u81EA\u5DF1 +100002=\u5C1A\u672A\u914D\u7F6E{0} \ No newline at end of file diff --git a/fumao-bi/pom.xml b/fumao-bi/pom.xml new file mode 100644 index 0000000..f46178a --- /dev/null +++ b/fumao-bi/pom.xml @@ -0,0 +1,22 @@ + + + + fumao + com.chilunyc + 0.0.1-SNAPSHOT + + 4.0.0 + + fumao-bi + + + + + com.chilunyc + fumao-common + 0.0.1-SNAPSHOT + + + \ No newline at end of file diff --git a/fumao-bi/src/.DS_Store b/fumao-bi/src/.DS_Store new file mode 100644 index 0000000..b8a7aca Binary files /dev/null and b/fumao-bi/src/.DS_Store differ diff --git a/fumao-bi/src/main/.DS_Store b/fumao-bi/src/main/.DS_Store new file mode 100644 index 0000000..0f6ac2a Binary files /dev/null and b/fumao-bi/src/main/.DS_Store differ diff --git a/fumao-bi/src/main/java/.DS_Store b/fumao-bi/src/main/java/.DS_Store new file mode 100644 index 0000000..801eee2 Binary files /dev/null and b/fumao-bi/src/main/java/.DS_Store differ diff --git a/fumao-bi/src/main/java/com/.DS_Store b/fumao-bi/src/main/java/com/.DS_Store new file mode 100644 index 0000000..c7367d6 Binary files /dev/null and b/fumao-bi/src/main/java/com/.DS_Store differ diff --git a/fumao-bi/src/main/java/com/chilunyc/fumao/bi/model/BiCustomerLogin.java b/fumao-bi/src/main/java/com/chilunyc/fumao/bi/model/BiCustomerLogin.java new file mode 100644 index 0000000..0a34945 --- /dev/null +++ b/fumao-bi/src/main/java/com/chilunyc/fumao/bi/model/BiCustomerLogin.java @@ -0,0 +1,62 @@ +package com.chilunyc.fumao.bi.model; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.GenericGenerator; +import org.hibernate.annotations.Parameter; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import javax.persistence.*; +import java.io.Serializable; +import java.util.Date; + +/** + * + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +@Entity +@Table(name = "fumao_bi_customer_login", indexes = { +}) +@EntityListeners(AuditingEntityListener.class) +public class BiCustomerLogin implements Serializable { + + /** + * 编号 + */ + @Id + @Column(length = 64) + @GeneratedValue(generator = "custom") + @GenericGenerator(name = "custom", strategy = "com.chilunyc.fumao.common.util.jpa.CustomIdentifierGenerator", parameters = {@Parameter(name = "type", value = "Number")}) + private Long id; + + /** + * 会员 + */ + @Column(columnDefinition = "bigint(64) comment '会员'") + private Long customerId; + + /** + * IP + */ + @Column(columnDefinition = "varchar(20) comment 'IP'") + private String ip; + + /** + * 渠道 + */ + @Column(columnDefinition = "varchar(16) comment '渠道'") + private String channel; + + /** + * 创建时间 + */ + @CreatedDate + @Column(columnDefinition = "date comment '创建时间'") + private Date createTime; +} diff --git a/fumao-bi/src/main/java/com/chilunyc/fumao/bi/model/BiCustomerRegister.java b/fumao-bi/src/main/java/com/chilunyc/fumao/bi/model/BiCustomerRegister.java new file mode 100644 index 0000000..f08fc39 --- /dev/null +++ b/fumao-bi/src/main/java/com/chilunyc/fumao/bi/model/BiCustomerRegister.java @@ -0,0 +1,56 @@ +package com.chilunyc.fumao.bi.model; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.GenericGenerator; +import org.hibernate.annotations.Parameter; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import javax.persistence.*; +import java.io.Serializable; +import java.util.Date; + +/** + * + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +@Entity +@Table(name = "fumao_bi_customer_register", indexes = { +}) +@EntityListeners(AuditingEntityListener.class) +public class BiCustomerRegister implements Serializable { + + /** + * 编号 + */ + @Id + @Column(length = 64) + @GeneratedValue(generator = "custom") + @GenericGenerator(name = "custom", strategy = "com.chilunyc.fumao.common.util.jpa.CustomIdentifierGenerator", parameters = {@Parameter(name = "type", value = "Number")}) + private Long id; + + /** + * 总量 + */ + @Column(columnDefinition = "bigint(9) comment '总量'") + private Long total; + + /** + * 注册量 + */ + @Column(columnDefinition = "bigint(9) comment '注册量'") + private Long registerCount; + + /** + * 创建时间 + */ + @Temporal(TemporalType.DATE) + @Column(columnDefinition = "date comment '创建时间'") + private Date createTime; +} diff --git a/fumao-bi/src/main/java/com/chilunyc/fumao/bi/model/BiTrade.java b/fumao-bi/src/main/java/com/chilunyc/fumao/bi/model/BiTrade.java new file mode 100644 index 0000000..f15aacc --- /dev/null +++ b/fumao-bi/src/main/java/com/chilunyc/fumao/bi/model/BiTrade.java @@ -0,0 +1,68 @@ +package com.chilunyc.fumao.bi.model; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.GenericGenerator; +import org.hibernate.annotations.Parameter; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import javax.persistence.*; +import java.io.Serializable; +import java.util.Date; + +/** + * + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +@Entity +@Table(name = "fumao_bi_trade", indexes = { +}) +@EntityListeners(AuditingEntityListener.class) +public class BiTrade implements Serializable { + + /** + * 编号 + */ + @Id + @Column(length = 64) + @GeneratedValue(generator = "custom") + @GenericGenerator(name = "custom", strategy = "com.chilunyc.fumao.common.util.jpa.CustomIdentifierGenerator", parameters = {@Parameter(name = "type", value = "Number")}) + private Long id; + + /** + * 总量 + */ + @Column(columnDefinition = "bigint(9) comment '总量'") + private Long total; + + /** + * 今日 + */ + @Column(columnDefinition = "bigint(9) comment '今日'") + private Long today; + + /** + * 消费金额 + */ + @Column(columnDefinition = "decimal(9,2) comment '消费金额'") + private Double totalCash; + + /** + * 今日金额 + */ + @Column(columnDefinition = "decimal(9,2) comment '今日金额'") + private Double todayCash; + + /** + * 创建时间 + */ + @CreatedDate + @Column(columnDefinition = "date comment '创建时间'") + private Date createTime; +} diff --git a/fumao-bi/src/main/java/com/chilunyc/fumao/bi/model/ClientPv.java b/fumao-bi/src/main/java/com/chilunyc/fumao/bi/model/ClientPv.java new file mode 100644 index 0000000..65cbe59 --- /dev/null +++ b/fumao-bi/src/main/java/com/chilunyc/fumao/bi/model/ClientPv.java @@ -0,0 +1,81 @@ +package com.chilunyc.fumao.bi.model; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.GenericGenerator; +import org.hibernate.annotations.Parameter; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import javax.persistence.*; +import java.io.Serializable; +import java.util.Date; + +/** + * + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +@Entity +@Table(name = "fumao_client_pv", indexes = { +}) +@EntityListeners(AuditingEntityListener.class) +public class ClientPv implements Serializable { + + /** + * 编号 + */ + @Id + @Column(length = 64) + @GeneratedValue(generator = "custom") + @GenericGenerator(name = "custom", strategy = "com.chilunyc.fumao.common.util.jpa.CustomIdentifierGenerator", parameters = {@Parameter(name = "type", value = "Number")}) + private Long id; + + /** + * pv + */ + @Column(columnDefinition = "bigint(9) comment 'pv'") + private Long pv; + + /** + * uv + */ + @Column(columnDefinition = "bigint(9) comment 'uv'") + private Long uv; + + /** + * 领取人数 + */ + @Column(columnDefinition = "bigint(9) comment '领取人数'") + private Long couponCustomerCount; + + /** + * 领取量 + */ + @Column(columnDefinition = "bigint(9) comment '领取量'") + private Long couponCount; + + /** + * 核销人数 + */ + @Column(columnDefinition = "bigint(9) comment '核销人数'") + private Long writeOffCustomerCount; + + /** + * 核销量 + */ + @Column(columnDefinition = "bigint(9) comment '核销量'") + private Long writeOffCount; + + /** + * 创建时间 + */ + @CreatedDate + @Column(columnDefinition = "date comment '创建时间'") + + private Date createTime; +} diff --git a/fumao-bi/src/main/java/com/chilunyc/fumao/bi/model/CouponPv.java b/fumao-bi/src/main/java/com/chilunyc/fumao/bi/model/CouponPv.java new file mode 100644 index 0000000..010dbff --- /dev/null +++ b/fumao-bi/src/main/java/com/chilunyc/fumao/bi/model/CouponPv.java @@ -0,0 +1,92 @@ +package com.chilunyc.fumao.bi.model; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.GenericGenerator; +import org.hibernate.annotations.Parameter; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import javax.persistence.*; +import java.io.Serializable; +import java.util.Date; + +/** + * + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +@Entity +@Table(name = "fumao_coupon_pv", indexes = { +}) +@EntityListeners(AuditingEntityListener.class) +public class CouponPv implements Serializable { + + /** + * 编号 + */ + @Id + @Column(length = 64) + @GeneratedValue(generator = "custom") + @GenericGenerator(name = "custom", strategy = "com.chilunyc.fumao.common.util.jpa.CustomIdentifierGenerator", parameters = {@Parameter(name = "type", value = "Number")}) + private Long id; + + /** + * + */ + @Column(columnDefinition = "varchar(64) comment '优惠券名称'") + private String couponName; + + /** + * + */ + @Column(columnDefinition = "varchar(64) comment '优惠券类型'") + private String couponKind; + + /** + * pv + */ + @Column(columnDefinition = "bigint(9) comment 'pv'") + private Long pv; + + /** + * uv + */ + @Column(columnDefinition = "bigint(9) comment 'uv'") + private Long uv; + + /** + * 领取人数 + */ + @Column(columnDefinition = "bigint(9) comment '领取人数'") + private Long couponCustomerCount; + + /** + * 领取量 + */ + @Column(columnDefinition = "bigint(9) comment '领取量'") + private Long couponCount; + + /** + * 核销人数 + */ + @Column(columnDefinition = "bigint(9) comment '核销人数'") + private Long writeOffCustomerCount; + + /** + * 核销量 + */ + @Column(columnDefinition = "bigint(9) comment '核销量'") + private Long writeOffCount; + + /** + * 创建时间 + */ + @CreatedDate + @Column(columnDefinition = "date comment '创建时间'") + private Date createTime; +} diff --git a/fumao-bi/src/main/java/com/chilunyc/fumao/bi/model/ScenePv.java b/fumao-bi/src/main/java/com/chilunyc/fumao/bi/model/ScenePv.java new file mode 100644 index 0000000..0e28670 --- /dev/null +++ b/fumao-bi/src/main/java/com/chilunyc/fumao/bi/model/ScenePv.java @@ -0,0 +1,62 @@ +package com.chilunyc.fumao.bi.model; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.GenericGenerator; +import org.hibernate.annotations.Parameter; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import javax.persistence.*; +import java.io.Serializable; +import java.util.Date; + +/** + * + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +@Entity +@Table(name = "fumao_scene_pv", indexes = { +}) +@EntityListeners(AuditingEntityListener.class) +public class ScenePv implements Serializable { + + /** + * 编号 + */ + @Id + @Column(length = 64) + @GeneratedValue(generator = "custom") + @GenericGenerator(name = "custom", strategy = "com.chilunyc.fumao.common.util.jpa.CustomIdentifierGenerator", parameters = {@Parameter(name = "type", value = "Number")}) + private Long id; + + /** + * 车辆数 + */ + @Column(columnDefinition = "bigint(9) comment '车辆数'") + private Long parkingCount; + + /** + * 核销数 + */ + @Column(columnDefinition = "bigint(9) comment '核销数'") + private Long writeOffCount; + + /** + * 发劵量 + */ + @Column(columnDefinition = "bigint(9) comment '发劵量'") + private Long pushCount; + + /** + * 创建时间 + */ + @CreatedDate + @Column(columnDefinition = "date comment '创建时间'") + private Date createTime; +} diff --git a/fumao-bi/src/main/java/com/chilunyc/fumao/bi/repository/BiCustomerLoginRepository.java b/fumao-bi/src/main/java/com/chilunyc/fumao/bi/repository/BiCustomerLoginRepository.java new file mode 100644 index 0000000..0453945 --- /dev/null +++ b/fumao-bi/src/main/java/com/chilunyc/fumao/bi/repository/BiCustomerLoginRepository.java @@ -0,0 +1,22 @@ +package com.chilunyc.fumao.bi.repository; + +import com.chilunyc.fumao.bi.model.BiCustomerLogin; +import com.chilunyc.fumao.common.response.KeyValue; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; +import org.springframework.data.jpa.repository.Query; + +import java.util.Date; +import java.util.List; + +/** + * + */ +public interface BiCustomerLoginRepository extends JpaRepository, JpaSpecificationExecutor { + + + @Query( + "select new com.chilunyc.fumao.common.response.KeyValue(DATE_FORMAT(b.createTime,'%Y-%m-%d'), count(b)) from BiCustomerLogin b where b.createTime >= ?1 and b.createTime <= ?2 group by b.createTime" + ) + List groupByCreateTime(Date date, Date date1); +} diff --git a/fumao-bi/src/main/java/com/chilunyc/fumao/bi/repository/BiCustomerRegisterRepository.java b/fumao-bi/src/main/java/com/chilunyc/fumao/bi/repository/BiCustomerRegisterRepository.java new file mode 100644 index 0000000..9846cb4 --- /dev/null +++ b/fumao-bi/src/main/java/com/chilunyc/fumao/bi/repository/BiCustomerRegisterRepository.java @@ -0,0 +1,22 @@ +package com.chilunyc.fumao.bi.repository; + +import com.chilunyc.fumao.bi.model.BiCustomerRegister; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; + +import java.util.Date; +import java.util.List; + +/** + * + */ +public interface BiCustomerRegisterRepository extends JpaRepository, JpaSpecificationExecutor { + + BiCustomerRegister findByCreateTime(Date date); + + Long countByCreateTimeBetween(Date date, Date date1); + + Long countByCreateTime(Date date); + + List findByCreateTimeBetween(Date date, Date date1); +} diff --git a/fumao-bi/src/main/java/com/chilunyc/fumao/bi/repository/BiTradeRepository.java b/fumao-bi/src/main/java/com/chilunyc/fumao/bi/repository/BiTradeRepository.java new file mode 100644 index 0000000..2a20488 --- /dev/null +++ b/fumao-bi/src/main/java/com/chilunyc/fumao/bi/repository/BiTradeRepository.java @@ -0,0 +1,16 @@ +package com.chilunyc.fumao.bi.repository; + +import com.chilunyc.fumao.bi.model.BiTrade; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; + +import java.util.Date; +import java.util.List; + +/** +* +*/ +public interface BiTradeRepository extends JpaRepository, JpaSpecificationExecutor { + + List findByCreateTimeBetween(Date date, Date date1); +} diff --git a/fumao-bi/src/main/java/com/chilunyc/fumao/bi/repository/ClientPvRepository.java b/fumao-bi/src/main/java/com/chilunyc/fumao/bi/repository/ClientPvRepository.java new file mode 100644 index 0000000..a53d66e --- /dev/null +++ b/fumao-bi/src/main/java/com/chilunyc/fumao/bi/repository/ClientPvRepository.java @@ -0,0 +1,14 @@ +package com.chilunyc.fumao.bi.repository; + +import com.chilunyc.fumao.bi.model.ClientPv; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; + +import java.util.List; + +/** +* +*/ +public interface ClientPvRepository extends JpaRepository, JpaSpecificationExecutor { + +} diff --git a/fumao-bi/src/main/java/com/chilunyc/fumao/bi/repository/CouponPvRepository.java b/fumao-bi/src/main/java/com/chilunyc/fumao/bi/repository/CouponPvRepository.java new file mode 100644 index 0000000..6b7f957 --- /dev/null +++ b/fumao-bi/src/main/java/com/chilunyc/fumao/bi/repository/CouponPvRepository.java @@ -0,0 +1,14 @@ +package com.chilunyc.fumao.bi.repository; + +import com.chilunyc.fumao.bi.model.CouponPv; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; + +import java.util.List; + +/** +* +*/ +public interface CouponPvRepository extends JpaRepository, JpaSpecificationExecutor { + +} diff --git a/fumao-bi/src/main/java/com/chilunyc/fumao/bi/repository/ScenePvRepository.java b/fumao-bi/src/main/java/com/chilunyc/fumao/bi/repository/ScenePvRepository.java new file mode 100644 index 0000000..59ab1c3 --- /dev/null +++ b/fumao-bi/src/main/java/com/chilunyc/fumao/bi/repository/ScenePvRepository.java @@ -0,0 +1,14 @@ +package com.chilunyc.fumao.bi.repository; + +import com.chilunyc.fumao.bi.model.ScenePv; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; + +import java.util.List; + +/** +* +*/ +public interface ScenePvRepository extends JpaRepository, JpaSpecificationExecutor { + +} diff --git a/fumao-bi/src/main/java/com/chilunyc/fumao/bi/request/biCustomerRegister/BiCustomerRegisterPageRequest.java b/fumao-bi/src/main/java/com/chilunyc/fumao/bi/request/biCustomerRegister/BiCustomerRegisterPageRequest.java new file mode 100644 index 0000000..f41656a --- /dev/null +++ b/fumao-bi/src/main/java/com/chilunyc/fumao/bi/request/biCustomerRegister/BiCustomerRegisterPageRequest.java @@ -0,0 +1,16 @@ +package com.chilunyc.fumao.bi.request.biCustomerRegister; + +import com.chilunyc.fumao.common.request.PageRequest; +import com.chilunyc.fumao.common.util.jpa.query.SortItem; +import com.chilunyc.fumao.common.util.jpa.query.SortItems; +import lombok.Data; + +/** +* +*/ +@SortItems({ + @SortItem(column = "createTime") +}) +@Data +public class BiCustomerRegisterPageRequest extends PageRequest { +} diff --git a/fumao-bi/src/main/java/com/chilunyc/fumao/bi/request/clientPv/ClientPvPageRequest.java b/fumao-bi/src/main/java/com/chilunyc/fumao/bi/request/clientPv/ClientPvPageRequest.java new file mode 100644 index 0000000..f981536 --- /dev/null +++ b/fumao-bi/src/main/java/com/chilunyc/fumao/bi/request/clientPv/ClientPvPageRequest.java @@ -0,0 +1,24 @@ +package com.chilunyc.fumao.bi.request.clientPv; + +import com.chilunyc.fumao.common.request.PageRequest; +import com.chilunyc.fumao.common.util.jpa.query.QueryItem; +import com.chilunyc.fumao.common.util.jpa.query.QueryType; +import com.chilunyc.fumao.common.util.jpa.query.SortItem; +import com.chilunyc.fumao.common.util.jpa.query.SortItems; +import lombok.Data; + +import java.util.Date; + + +/** + * + */ +@SortItems({ + @SortItem(column = "createTime") +}) +@Data +public class ClientPvPageRequest extends PageRequest { + + @QueryItem(type = QueryType.betweenDate, column = "createTime") + private Date[] timeRange; +} diff --git a/fumao-bi/src/main/java/com/chilunyc/fumao/bi/request/couponPv/CouponPvPageRequest.java b/fumao-bi/src/main/java/com/chilunyc/fumao/bi/request/couponPv/CouponPvPageRequest.java new file mode 100644 index 0000000..b692c2a --- /dev/null +++ b/fumao-bi/src/main/java/com/chilunyc/fumao/bi/request/couponPv/CouponPvPageRequest.java @@ -0,0 +1,17 @@ +package com.chilunyc.fumao.bi.request.couponPv; + +import com.chilunyc.fumao.common.request.PageRequest; +import com.chilunyc.fumao.common.util.jpa.query.SortItem; +import com.chilunyc.fumao.common.util.jpa.query.SortItems; +import lombok.Data; + + +/** + * + */ +@SortItems({ + @SortItem(column = "createTime") +}) +@Data +public class CouponPvPageRequest extends PageRequest { +} diff --git a/fumao-bi/src/main/java/com/chilunyc/fumao/bi/request/scenePv/ScenePvPageRequest.java b/fumao-bi/src/main/java/com/chilunyc/fumao/bi/request/scenePv/ScenePvPageRequest.java new file mode 100644 index 0000000..aba6d4e --- /dev/null +++ b/fumao-bi/src/main/java/com/chilunyc/fumao/bi/request/scenePv/ScenePvPageRequest.java @@ -0,0 +1,23 @@ +package com.chilunyc.fumao.bi.request.scenePv; + +import com.chilunyc.fumao.common.request.PageRequest; +import com.chilunyc.fumao.common.util.jpa.query.QueryItem; +import com.chilunyc.fumao.common.util.jpa.query.QueryType; +import com.chilunyc.fumao.common.util.jpa.query.SortItem; +import com.chilunyc.fumao.common.util.jpa.query.SortItems; +import lombok.Data; + +import java.util.Date; + +/** + * + */ +@SortItems({ + @SortItem(column = "createTime") +}) +@Data +public class ScenePvPageRequest extends PageRequest { + + @QueryItem(type = QueryType.betweenDate, column = "createTime") + private Date[] timeRange; +} diff --git a/fumao-bi/src/main/java/com/chilunyc/fumao/bi/service/BiCustomerLoginService.java b/fumao-bi/src/main/java/com/chilunyc/fumao/bi/service/BiCustomerLoginService.java new file mode 100644 index 0000000..fda6872 --- /dev/null +++ b/fumao-bi/src/main/java/com/chilunyc/fumao/bi/service/BiCustomerLoginService.java @@ -0,0 +1,28 @@ +package com.chilunyc.fumao.bi.service; + +import com.chilunyc.fumao.bi.repository.BiCustomerLoginRepository; +import com.chilunyc.fumao.common.response.KeyValue; +import lombok.extern.log4j.Log4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; + +/** + * + */ +@Log4j +@Service +@Transactional +public class BiCustomerLoginService { + + + @Autowired + private BiCustomerLoginRepository biCustomerLoginRepository; + + public List range(Date[] timeRange) { + return biCustomerLoginRepository.groupByCreateTime(timeRange[0], timeRange[1]); + } +} diff --git a/fumao-bi/src/main/java/com/chilunyc/fumao/bi/service/BiCustomerRegisterService.java b/fumao-bi/src/main/java/com/chilunyc/fumao/bi/service/BiCustomerRegisterService.java new file mode 100644 index 0000000..299ef71 --- /dev/null +++ b/fumao-bi/src/main/java/com/chilunyc/fumao/bi/service/BiCustomerRegisterService.java @@ -0,0 +1,55 @@ +package com.chilunyc.fumao.bi.service; + +import com.chilunyc.fumao.bi.model.BiCustomerRegister; +import com.chilunyc.fumao.bi.repository.BiCustomerRegisterRepository; +import com.chilunyc.fumao.bi.request.biCustomerRegister.BiCustomerRegisterPageRequest; +import com.chilunyc.fumao.common.util.jpa.query.QueryBuilder; +import lombok.extern.log4j.Log4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; + +/** + * + */ +@Log4j +@Service +@Transactional +public class BiCustomerRegisterService { + + @Autowired + private BiCustomerRegisterRepository biCustomerRegisterRepository; + + + public Page page(BiCustomerRegisterPageRequest request) { + return biCustomerRegisterRepository.findAll(QueryBuilder.build(request), request.getPage()); + } + + /** + * @param date + * @param allCount + * @return + */ + public synchronized BiCustomerRegister findByDate(Date date, Long allCount) { + BiCustomerRegister customerRegister = biCustomerRegisterRepository.findByCreateTime(date); + if (customerRegister == null) { + customerRegister = biCustomerRegisterRepository.save( + BiCustomerRegister + .builder() + .createTime(date) + .registerCount(0L) + .total(allCount) + .build() + ); + } + return customerRegister; + } + + public List range(Date[] timeRange) { + return biCustomerRegisterRepository.findByCreateTimeBetween(timeRange[0], timeRange[1]); + } +} diff --git a/fumao-bi/src/main/java/com/chilunyc/fumao/bi/service/BiTradeService.java b/fumao-bi/src/main/java/com/chilunyc/fumao/bi/service/BiTradeService.java new file mode 100644 index 0000000..2c227c6 --- /dev/null +++ b/fumao-bi/src/main/java/com/chilunyc/fumao/bi/service/BiTradeService.java @@ -0,0 +1,29 @@ +package com.chilunyc.fumao.bi.service; + +import com.chilunyc.fumao.bi.model.BiTrade; +import com.chilunyc.fumao.bi.repository.BiTradeRepository; +import lombok.extern.log4j.Log4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; + +/** + * + */ +@Log4j +@Service +@Transactional +public class BiTradeService { + + + @Autowired + private BiTradeRepository biTradeRepository; + + + public List range(Date[] timeRange) { + return biTradeRepository.findByCreateTimeBetween(timeRange[0], timeRange[1]); + } +} diff --git a/fumao-bi/src/main/java/com/chilunyc/fumao/bi/service/ClientPvService.java b/fumao-bi/src/main/java/com/chilunyc/fumao/bi/service/ClientPvService.java new file mode 100644 index 0000000..e1da53b --- /dev/null +++ b/fumao-bi/src/main/java/com/chilunyc/fumao/bi/service/ClientPvService.java @@ -0,0 +1,47 @@ +package com.chilunyc.fumao.bi.service; + +import com.chilunyc.fumao.bi.model.ClientPv; +import com.chilunyc.fumao.bi.repository.ClientPvRepository; +import com.chilunyc.fumao.bi.request.clientPv.ClientPvPageRequest; +import com.chilunyc.fumao.common.context.RequestHolder; +import com.chilunyc.fumao.common.log.model.EventTarget; +import com.chilunyc.fumao.common.log.model.EventType; +import com.chilunyc.fumao.common.log.service.EventService; +import com.chilunyc.fumao.common.util.BeanHelper; +import com.chilunyc.fumao.common.util.jpa.query.QueryBuilder; +import lombok.extern.log4j.Log4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +/** + * + */ +@Log4j +@Service +@Transactional +public class ClientPvService { + + + @Autowired + private ClientPvRepository clientPvRepository; + + @Autowired + private EventService eventService; + + public Page page(ClientPvPageRequest request) { + return clientPvRepository.findAll(QueryBuilder.build(request), request.getPage()); + } + + + public ClientPv find(Long id) { + ClientPv one = clientPvRepository.findOne(id); + return one; + } + + + + + +} diff --git a/fumao-bi/src/main/java/com/chilunyc/fumao/bi/service/CouponPvService.java b/fumao-bi/src/main/java/com/chilunyc/fumao/bi/service/CouponPvService.java new file mode 100644 index 0000000..384114f --- /dev/null +++ b/fumao-bi/src/main/java/com/chilunyc/fumao/bi/service/CouponPvService.java @@ -0,0 +1,48 @@ +package com.chilunyc.fumao.bi.service; + +import com.chilunyc.fumao.bi.model.CouponPv; +import com.chilunyc.fumao.bi.repository.CouponPvRepository; +import com.chilunyc.fumao.bi.request.couponPv.CouponPvPageRequest; +import com.chilunyc.fumao.common.context.RequestHolder; +import com.chilunyc.fumao.common.log.model.EventTarget; +import com.chilunyc.fumao.common.log.model.EventType; +import com.chilunyc.fumao.common.log.service.EventService; +import com.chilunyc.fumao.common.request.IdsRequest; +import com.chilunyc.fumao.common.util.BeanHelper; +import com.chilunyc.fumao.common.util.jpa.query.QueryBuilder; +import lombok.extern.log4j.Log4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +/** + * + */ +@Log4j +@Service +@Transactional +public class CouponPvService { + + + @Autowired + private CouponPvRepository couponPvRepository; + + @Autowired + private EventService eventService; + + public Page page(CouponPvPageRequest request) { + return couponPvRepository.findAll(QueryBuilder.build(request), request.getPage()); + } + + + public CouponPv find(Long id) { + CouponPv one = couponPvRepository.findOne(id); + return one; + } + + + + + +} diff --git a/fumao-bi/src/main/java/com/chilunyc/fumao/bi/service/ScenePvService.java b/fumao-bi/src/main/java/com/chilunyc/fumao/bi/service/ScenePvService.java new file mode 100644 index 0000000..6ba0f00 --- /dev/null +++ b/fumao-bi/src/main/java/com/chilunyc/fumao/bi/service/ScenePvService.java @@ -0,0 +1,40 @@ +package com.chilunyc.fumao.bi.service; + +import com.chilunyc.fumao.bi.model.ScenePv; +import com.chilunyc.fumao.bi.repository.ScenePvRepository; +import com.chilunyc.fumao.bi.request.scenePv.ScenePvPageRequest; +import com.chilunyc.fumao.common.log.service.EventService; +import com.chilunyc.fumao.common.util.jpa.query.QueryBuilder; +import lombok.extern.log4j.Log4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +/** + * + */ +@Log4j +@Service +@Transactional +public class ScenePvService { + + + @Autowired + private ScenePvRepository scenePvRepository; + + @Autowired + private EventService eventService; + + public Page page(ScenePvPageRequest request) { + return scenePvRepository.findAll(QueryBuilder.build(request), request.getPage()); + } + + + public ScenePv find(Long id) { + ScenePv one = scenePvRepository.findOne(id); + return one; + } + + +} diff --git a/fumao-bi/src/main/resources/.DS_Store b/fumao-bi/src/main/resources/.DS_Store new file mode 100644 index 0000000..35a54bf Binary files /dev/null and b/fumao-bi/src/main/resources/.DS_Store differ diff --git a/fumao-bi/src/main/resources/com/.DS_Store b/fumao-bi/src/main/resources/com/.DS_Store new file mode 100644 index 0000000..70c60d8 Binary files /dev/null and b/fumao-bi/src/main/resources/com/.DS_Store differ diff --git a/fumao-bi/src/main/resources/com/chilunyc/fumao/bi/repository/.gitkeep b/fumao-bi/src/main/resources/com/chilunyc/fumao/bi/repository/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/fumao-common/pom.xml b/fumao-common/pom.xml index ac9e261..9e9f848 100644 --- a/fumao-common/pom.xml +++ b/fumao-common/pom.xml @@ -4,7 +4,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> fumao - com.aki + com.chilunyc 0.0.1-SNAPSHOT 4.0.0 @@ -44,20 +44,6 @@ aliyun-sdk-oss 2.6.1 - - com.aliyun - aliyun-java-sdk-core - 3.2.3 - system - ${project.basedir}/src/main/lib/aliyun-java-sdk-core-3.2.2.jar - - - com.aliyun - aliyun-java-sdk-dysmsapi - 1.0.0 - system - ${project.basedir}/src/main/lib/aliyun-java-sdk-dysmsapi-1.0.0-SANPSHOT.jar - @@ -144,6 +130,11 @@ + + org.flywaydb + flyway-core + 5.1.4 + org.springframework.boot spring-boot-starter-data-jpa diff --git a/fumao-common/src/.DS_Store b/fumao-common/src/.DS_Store new file mode 100644 index 0000000..308b554 Binary files /dev/null and b/fumao-common/src/.DS_Store differ diff --git a/fumao-common/src/main/.DS_Store b/fumao-common/src/main/.DS_Store new file mode 100644 index 0000000..9aa8888 Binary files /dev/null and b/fumao-common/src/main/.DS_Store differ diff --git a/fumao-common/src/main/java/com/chilunyc/fumao/common/db/config/DBConfiguration.java b/fumao-common/src/main/java/com/chilunyc/fumao/common/db/config/DBConfiguration.java new file mode 100644 index 0000000..5c9b96e --- /dev/null +++ b/fumao-common/src/main/java/com/chilunyc/fumao/common/db/config/DBConfiguration.java @@ -0,0 +1,32 @@ +package com.chilunyc.fumao.common.db.config; + +import com.chilunyc.fumao.common.db.datasource.DynamicDataSource; +import com.chilunyc.fumao.common.db.flyway.FlywayService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import javax.sql.DataSource; + +/** + * on 2018/7/26. + */ +@Configuration +@EnableConfigurationProperties(DBProperties.class) +public class DBConfiguration { + + @Autowired + DBProperties dbProperties; + + @Autowired + FlywayService flywayService; + + @Bean + DataSource dataSource() { + DynamicDataSource dataSource = new DynamicDataSource(); + DataSource init = flywayService.init("f_system", "classpath:/flyway/system"); + dataSource.addDataSource("master", init, true); + return dataSource; + } +} diff --git a/fumao-common/src/main/java/com/chilunyc/fumao/common/db/config/DBProperties.java b/fumao-common/src/main/java/com/chilunyc/fumao/common/db/config/DBProperties.java new file mode 100644 index 0000000..d735c30 --- /dev/null +++ b/fumao-common/src/main/java/com/chilunyc/fumao/common/db/config/DBProperties.java @@ -0,0 +1,48 @@ +package com.chilunyc.fumao.common.db.config; + +import com.zaxxer.hikari.HikariDataSource; +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; + +import javax.sql.DataSource; + +/** + * on 2018/7/26. + */ +@Data +@ConfigurationProperties("db") +public class DBProperties { + + private String host; + + private String port; + + private String user; + + private String password; + + private int pool; + + public String getURL(String database) { + return String.format( + "jdbc:mysql://%s:%s/%s?&zeroDateTimeBehavior=convertToNull&autoReconnect=true&failOverReadOnly=false&connectTimeout=0", + host, + port, + database + ); + } + + public HikariDataSource getDataSource(String database) { + HikariDataSource hikariDataSource = new HikariDataSource(); + hikariDataSource.setDriverClassName("com.mysql.jdbc.Driver"); + hikariDataSource.setUsername(user); + hikariDataSource.setPassword(password); + hikariDataSource.setJdbcUrl(getURL(database)); + hikariDataSource.setConnectionInitSql("select 1"); + hikariDataSource.setConnectionTimeout(30 * 1000); + hikariDataSource.setIdleTimeout(10 * 60 * 1000); + hikariDataSource.setMaximumPoolSize(pool); + hikariDataSource.setMinimumIdle(10); + return hikariDataSource; + } +} diff --git a/fumao-common/src/main/java/com/chilunyc/fumao/common/db/datasource/DynamicDataSource.java b/fumao-common/src/main/java/com/chilunyc/fumao/common/db/datasource/DynamicDataSource.java new file mode 100644 index 0000000..cdb649c --- /dev/null +++ b/fumao-common/src/main/java/com/chilunyc/fumao/common/db/datasource/DynamicDataSource.java @@ -0,0 +1,57 @@ +package com.chilunyc.fumao.common.db.datasource; + +import com.zaxxer.hikari.HikariDataSource; +import lombok.extern.log4j.Log4j; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.DisposableBean; +import org.springframework.jdbc.datasource.AbstractDataSource; + +import javax.sql.DataSource; +import java.sql.Connection; +import java.sql.SQLException; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * on 2018/7/26. + */ +@Log4j +public class DynamicDataSource extends AbstractDataSource implements DisposableBean { + + private Map dataSourceMap = new ConcurrentHashMap<>(); + + private String defaultDbName; + + /** + * @param dbName + * @param dataSource + */ + public void addDataSource(String dbName, DataSource dataSource, boolean isDefault) { + dataSourceMap.put(dbName, dataSource); + if (isDefault) { + this.defaultDbName = dbName; + } + } + + public Connection getConnection() throws SQLException { + String s = DynamicDataSourceHolder.get(); + if (StringUtils.isBlank(s)) { + s = defaultDbName; + } + if (log.isInfoEnabled()) { + log.info("使用 =>[ " + s + " ]库"); + } + return dataSourceMap.get(s).getConnection(); + } + + public Connection getConnection(String username, String password) throws SQLException { + return getConnection(); + } + + @Override + public void destroy() throws Exception { + dataSourceMap.values().forEach(dataSource -> { + ((HikariDataSource) dataSource).close(); + }); + } +} diff --git a/fumao-common/src/main/java/com/chilunyc/fumao/common/db/datasource/DynamicDataSourceHolder.java b/fumao-common/src/main/java/com/chilunyc/fumao/common/db/datasource/DynamicDataSourceHolder.java new file mode 100644 index 0000000..abdad03 --- /dev/null +++ b/fumao-common/src/main/java/com/chilunyc/fumao/common/db/datasource/DynamicDataSourceHolder.java @@ -0,0 +1,22 @@ +package com.chilunyc.fumao.common.db.datasource; + + +/** + * on 2018/7/26. + */ +public final class DynamicDataSourceHolder { + + private static final ThreadLocal dbNameMap = new ThreadLocal<>(); + + public static void set(String dbName) { + dbNameMap.set(dbName); + } + + public static String get() { + return dbNameMap.get(); + } + + public static void remove() { + dbNameMap.remove(); + } +} diff --git a/fumao-common/src/main/java/com/chilunyc/fumao/common/db/flyway/FlywayService.java b/fumao-common/src/main/java/com/chilunyc/fumao/common/db/flyway/FlywayService.java new file mode 100644 index 0000000..719ad75 --- /dev/null +++ b/fumao-common/src/main/java/com/chilunyc/fumao/common/db/flyway/FlywayService.java @@ -0,0 +1,42 @@ +package com.chilunyc.fumao.common.db.flyway; + +import com.chilunyc.fumao.common.db.config.DBProperties; +import com.zaxxer.hikari.HikariDataSource; +import lombok.extern.log4j.Log4j; +import org.flywaydb.core.Flyway; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Service; + +/** + * on 2018/7/26. + */ +@Log4j +@Service +public class FlywayService { + + @Autowired + DBProperties dbProperties; + + public HikariDataSource init(String database, String scripts) { + HikariDataSource dataSource = dbProperties.getDataSource(""); + + // 判断是否创建数据库, 然后关闭 + JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); + if (jdbcTemplate.queryForList(String.format("show databases like '%s'", database)).size() == 0) { + jdbcTemplate.execute(String.format("CREATE DATABASE `%s` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci", database)); + } + dataSource.close(); + + + // + Flyway flyway = new Flyway(); + flyway.setDataSource(dbProperties.getURL(database), dbProperties.getUser(), dbProperties.getPassword()); + flyway.setLocations(scripts); + flyway.migrate(); + + // + log.info("主库同步完成, 设置主库成功"); + return dbProperties.getDataSource(database); + } +} diff --git a/fumao-common/src/main/java/com/chilunyc/fumao/common/enums/YesOrNo.java b/fumao-common/src/main/java/com/chilunyc/fumao/common/enums/YesOrNo.java index 893a5b9..9642994 100644 --- a/fumao-common/src/main/java/com/chilunyc/fumao/common/enums/YesOrNo.java +++ b/fumao-common/src/main/java/com/chilunyc/fumao/common/enums/YesOrNo.java @@ -5,6 +5,5 @@ package com.chilunyc.fumao.common.enums; */ public enum YesOrNo { Yes, - No } diff --git a/fumao-common/src/main/java/com/chilunyc/fumao/common/lbs/model/LBSPoi.java b/fumao-common/src/main/java/com/chilunyc/fumao/common/lbs/model/LBSPoi.java index fc45752..2d0dc68 100644 --- a/fumao-common/src/main/java/com/chilunyc/fumao/common/lbs/model/LBSPoi.java +++ b/fumao-common/src/main/java/com/chilunyc/fumao/common/lbs/model/LBSPoi.java @@ -9,7 +9,7 @@ import lombok.NoArgsConstructor; import java.math.BigDecimal; /** - * Created by Tkk on 2018/7/24. + * on 2018/7/24. */ @Data @NoArgsConstructor diff --git a/fumao-common/src/main/java/com/chilunyc/fumao/common/lbs/request/LBSPoiRequest.java b/fumao-common/src/main/java/com/chilunyc/fumao/common/lbs/request/LBSPoiRequest.java index 6740c0e..e4f818a 100644 --- a/fumao-common/src/main/java/com/chilunyc/fumao/common/lbs/request/LBSPoiRequest.java +++ b/fumao-common/src/main/java/com/chilunyc/fumao/common/lbs/request/LBSPoiRequest.java @@ -4,7 +4,7 @@ import com.chilunyc.fumao.common.request.PageRequest; import lombok.Data; /** - * Created by Tkk on 2018/7/24. + * on 2018/7/24. */ @Data public class LBSPoiRequest extends PageRequest { diff --git a/fumao-common/src/main/java/com/chilunyc/fumao/common/log/model/EventTarget.java b/fumao-common/src/main/java/com/chilunyc/fumao/common/log/model/EventTarget.java index 249b4cc..593e25f 100644 --- a/fumao-common/src/main/java/com/chilunyc/fumao/common/log/model/EventTarget.java +++ b/fumao-common/src/main/java/com/chilunyc/fumao/common/log/model/EventTarget.java @@ -4,5 +4,5 @@ package com.chilunyc.fumao.common.log.model; * */ public enum EventTarget { - System, Company, None + System, Company, Place, None } diff --git a/fumao-common/src/main/java/com/chilunyc/fumao/common/log/model/EventType.java b/fumao-common/src/main/java/com/chilunyc/fumao/common/log/model/EventType.java index 702261f..cb78df9 100644 --- a/fumao-common/src/main/java/com/chilunyc/fumao/common/log/model/EventType.java +++ b/fumao-common/src/main/java/com/chilunyc/fumao/common/log/model/EventType.java @@ -8,5 +8,5 @@ public enum EventType { Error, // 权限 - RoleEdit, RoleDelete, PermissionEdit, PermissionRemove, SendMsg, 编辑系统管理员, 删除系统管理员, 编辑集团, 删除集团, 编辑商场, 删除商场, 编辑商场楼层, 删除商场楼层, 编辑集团申请, 删除集团申请, 编辑商铺申请, 删除商铺申请, 编辑集团管理员, 删除集团管理员, 编辑商场管理员角色, 删除商场管理员角色, 编辑商场管理员, 删除商场管理员, + RoleEdit, RoleDelete, PermissionEdit, PermissionRemove, SendMsg, 编辑系统管理员, 删除系统管理员, 编辑集团, 删除集团, 编辑商场, 删除商场, 编辑商场楼层, 删除商场楼层, 编辑集团申请, 删除集团申请, 编辑商铺申请, 删除商铺申请, 编辑集团管理员, 删除集团管理员, 编辑商场管理员角色, 删除商场管理员角色, 编辑商场管理员, 删除商场管理员, 编辑顾客, 删除顾客, 编辑订单, 删除订单, 编辑积分, 删除积分, 编辑商铺, 删除商铺, 编辑商户管理员, 删除商户管理员, 编辑商户, 删除商户, 编辑优惠券, 删除优惠券, 编辑C端数据, 删除C端数据, 编辑优惠券数据, 删除优惠券数据, 编辑场景数据, 删除场景数据, 新增商场管理员, 积分补录, } diff --git a/fumao-common/src/main/java/com/chilunyc/fumao/common/request/AssignsRequest.java b/fumao-common/src/main/java/com/chilunyc/fumao/common/request/AssignsRequest.java index e9208d2..2b4fefb 100644 --- a/fumao-common/src/main/java/com/chilunyc/fumao/common/request/AssignsRequest.java +++ b/fumao-common/src/main/java/com/chilunyc/fumao/common/request/AssignsRequest.java @@ -3,6 +3,7 @@ package com.chilunyc.fumao.common.request; import lombok.Data; import org.hibernate.validator.constraints.NotBlank; +import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; import java.util.List; @@ -10,11 +11,11 @@ import java.util.List; * */ @Data -public class AssignsRequest { +public class AssignsRequest { @Size(min = 0, message = "目标不存在") - private List id; + private List ids; - @NotBlank(message = "分配数据为空") - private String targetId; + @NotNull(message = "分配数据为空") + private T targetId; } diff --git a/fumao-common/src/main/java/com/chilunyc/fumao/common/request/PageRequest.java b/fumao-common/src/main/java/com/chilunyc/fumao/common/request/PageRequest.java index 526c9a3..fa51593 100644 --- a/fumao-common/src/main/java/com/chilunyc/fumao/common/request/PageRequest.java +++ b/fumao-common/src/main/java/com/chilunyc/fumao/common/request/PageRequest.java @@ -2,8 +2,6 @@ package com.chilunyc.fumao.common.request; import lombok.Data; -import java.util.Date; - /** * */ @@ -14,16 +12,7 @@ public class PageRequest { private int page; - private Date[] timeRange; - - public Date getStartTime(){ - return timeRange != null && timeRange.length == 2 ? timeRange[0] : null; - } - - public Date getEndTime(){ - return timeRange != null && timeRange.length == 2 ? timeRange[1] : null; - } - + /** /** * @return */ diff --git a/fumao-common/src/main/java/com/chilunyc/fumao/common/request/TimeRangeRequest.java b/fumao-common/src/main/java/com/chilunyc/fumao/common/request/TimeRangeRequest.java new file mode 100644 index 0000000..cd68d91 --- /dev/null +++ b/fumao-common/src/main/java/com/chilunyc/fumao/common/request/TimeRangeRequest.java @@ -0,0 +1,16 @@ +package com.chilunyc.fumao.common.request; + +import lombok.Data; + +import javax.validation.constraints.Size; +import java.util.Date; + +/** + * on 2018/8/1. + */ +@Data +public class TimeRangeRequest { + + @Size(min = 2, max = 2, message = "请选择时间范围") + Date[] timeRange; +} diff --git a/fumao-common/src/main/java/com/chilunyc/fumao/common/shiro/AuthRoles.java b/fumao-common/src/main/java/com/chilunyc/fumao/common/shiro/AuthRoles.java index 63de492..c850346 100644 --- a/fumao-common/src/main/java/com/chilunyc/fumao/common/shiro/AuthRoles.java +++ b/fumao-common/src/main/java/com/chilunyc/fumao/common/shiro/AuthRoles.java @@ -1,7 +1,7 @@ package com.chilunyc.fumao.common.shiro; /** - * Created by Tkk on 2018/7/23. + * on 2018/7/23. */ public interface AuthRoles { @@ -20,6 +20,21 @@ public interface AuthRoles { /** * */ - String MarketAdmin = "MarketAdmin"; - String MarketAdminExp = "hasAuthority('MarketAdmin')"; + String PlaceAdmin = "PlaceAdmin"; + String PlaceAdminExp = "hasAuthority('PlaceAdmin')"; + + /** + * 业务管理员权限 + */ + String PlaceCustomerExp = "hasAuthority('customer')"; + String PlaceDataExp = "hasAuthority('data')"; + String PlaceCouponExp = "hasAuthority('coupon')"; + String PlaceMerchantExp = "hasAuthority('merchant')"; + String PlaceAccountExp = "hasAuthority('account')"; + + /** + * + */ + String MerchantAdmin = "MerchantAdmin"; + String MerchantAdminExp = "hasAuthority('MerchantAdmin')"; } diff --git a/fumao-common/src/main/java/com/chilunyc/fumao/common/shiro/AuthUser.java b/fumao-common/src/main/java/com/chilunyc/fumao/common/shiro/AuthUser.java index 9ba7632..1c87f73 100644 --- a/fumao-common/src/main/java/com/chilunyc/fumao/common/shiro/AuthUser.java +++ b/fumao-common/src/main/java/com/chilunyc/fumao/common/shiro/AuthUser.java @@ -14,7 +14,7 @@ import java.util.stream.Collectors; import java.util.stream.Stream; /** - * Created by Tkk on 2018/7/23. + * on 2018/7/23. */ @Data @AllArgsConstructor diff --git a/fumao-common/src/main/java/com/chilunyc/fumao/common/util/DateHelper.java b/fumao-common/src/main/java/com/chilunyc/fumao/common/util/DateHelper.java index cf7e77c..7bb2485 100644 --- a/fumao-common/src/main/java/com/chilunyc/fumao/common/util/DateHelper.java +++ b/fumao-common/src/main/java/com/chilunyc/fumao/common/util/DateHelper.java @@ -25,4 +25,14 @@ public class DateHelper { c2.setTime(date1); return c1.get(date2) == c2.get(date2); } + + public static Date toDate(int i) { + Calendar c1 = Calendar.getInstance(); + c1.add(Calendar.DATE, i); + c1.set(Calendar.HOUR, 0); + c1.set(Calendar.SECOND, 0); + c1.set(Calendar.MINUTE, 0); + c1.set(Calendar.MILLISECOND, 0); + return c1.getTime(); + } } diff --git a/fumao-common/src/main/java/com/chilunyc/fumao/common/util/jpa/query/QueryBuilder.java b/fumao-common/src/main/java/com/chilunyc/fumao/common/util/jpa/query/QueryBuilder.java index 63e1bb2..63d4b9e 100644 --- a/fumao-common/src/main/java/com/chilunyc/fumao/common/util/jpa/query/QueryBuilder.java +++ b/fumao-common/src/main/java/com/chilunyc/fumao/common/util/jpa/query/QueryBuilder.java @@ -2,21 +2,23 @@ package com.chilunyc.fumao.common.util.jpa.query; import lombok.AllArgsConstructor; import lombok.Data; +import lombok.extern.log4j.Log4j; import org.apache.commons.lang.StringUtils; import org.springframework.data.jpa.domain.Specification; import org.springframework.util.ReflectionUtils; -import javax.persistence.criteria.Predicate; -import java.lang.annotation.Annotation; +import javax.persistence.criteria.*; import java.lang.reflect.Field; import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; /** - * Created by Tkk on 2018/7/21. + * on 2018/7/21. */ +@Log4j public class QueryBuilder { @Data @@ -66,35 +68,35 @@ public class QueryBuilder { path = desc.field.getName(); } - // - switch (desc.queryItem.type()) { - case equal: - predicates.add(cb.equal(root.get(path), value)); - break; - case like: - predicates.add(cb.like(root.get(path), "%" + value + "%")); - break; - case gt: - predicates.add(cb.gt(root.get(path), (Number) value)); - break; - case lt: - predicates.add(cb.lt(root.get(path), (Number) value)); - break; - case ge: - predicates.add(cb.ge(root.get(path), (Number) value)); - break; - case le: - predicates.add(cb.le(root.get(path), (Number) value)); - break; - case notEqual: - predicates.add(cb.notEqual(root.get(path), value)); - break; - case notLike: - predicates.add(cb.notLike(root.get(path), "%" + value + "%")); - break; - case rightLike: - predicates.add(cb.like(root.get(path), value + "%")); - break; + // 有join查询 + if (!desc.queryItem.join().equals(QueryJoinType.None)) { + String[] split = StringUtils.split(path, "."); + Join join = null; + switch (desc.queryItem.join()) { + case Inner: + join = root.join(split[0], JoinType.INNER); + break; + case Left: + join = root.join(split[0], JoinType.LEFT); + break; + case Right: + join = root.join(split[0], JoinType.RIGHT); + break; + } + if (join != null) { + Predicate predicate = toCondition(desc.queryItem, value, cb, join.get(split[1])); + if (predicate != null) { + join.on(predicate); + } + } + } + + // 没有join, 直接加条件 + else { + Predicate predicate = toCondition(desc.queryItem, value, cb, root.get(path)); + if (predicate != null) { + predicates.add(predicate); + } } }); @@ -112,6 +114,62 @@ public class QueryBuilder { }; } + /** + * 转成条件 + * + * @param queryItem + * @param value + * @param cb + * @param expression + * @return + */ + private static Predicate toCondition(QueryItem queryItem, Object value, CriteriaBuilder cb, Expression expression) { + switch (queryItem.type()) { + case in: + CriteriaBuilder.In in = cb.in(expression); + List list = (List) value; + for (Object o : list) { + in.value(o); + } + return in; + case equal: + return cb.equal(expression, value); + case like: + return cb.like(expression, "%" + value + "%"); + case gt: + return cb.gt(expression, (Number) value); + case lt: + return cb.lt(expression, (Number) value); + case ge: + return cb.ge(expression, (Number) value); + case le: + return cb.le(expression, (Number) value); + case notEqual: + return cb.notEqual(expression, value); + case notLike: + return cb.notLike(expression, "%" + value + "%"); + case rightLike: + return cb.like(expression, value + "%"); + case betweenDate: + Date[] timeRange = (Date[]) value; + if (timeRange.length == 2) { + return cb.between(expression, timeRange[0], timeRange[1]); + } else { + log.warn("betweenDate 需要两个日期"); + } + case notNull: + if (Boolean.valueOf(value.toString())) { + return cb.isNotNull(expression); + } + } + return null; + } + + /** + * @param field + * @param src + * @return + */ private static Object getValue(Field field, Object src) { try { return field.get(src); @@ -120,6 +178,10 @@ public class QueryBuilder { } } + /** + * @param clazz + * @return + */ private static List getQueryDescMap(Class clazz) { List queryDescs = classQueryDescMap.get(clazz); if (queryDescs != null) { @@ -147,6 +209,10 @@ public class QueryBuilder { } } + /** + * @param field + * @return + */ private static QueryDesc getQueryDec(Field field) { QueryItem annotation = field.getAnnotation(QueryItem.class); if (annotation == null) { diff --git a/fumao-common/src/main/java/com/chilunyc/fumao/common/util/jpa/query/QueryItem.java b/fumao-common/src/main/java/com/chilunyc/fumao/common/util/jpa/query/QueryItem.java index 51f9276..e966c02 100644 --- a/fumao-common/src/main/java/com/chilunyc/fumao/common/util/jpa/query/QueryItem.java +++ b/fumao-common/src/main/java/com/chilunyc/fumao/common/util/jpa/query/QueryItem.java @@ -6,7 +6,7 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** - * Created by Tkk on 2018/7/21. + * on 2018/7/21. */ @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) @@ -21,10 +21,16 @@ public @interface QueryItem { /** + * 查询条件 * @return */ QueryType type() default QueryType.equal; + /** + * Join条件 + * @return + */ + QueryJoinType join() default QueryJoinType.None; /** * object是否可以为null diff --git a/fumao-common/src/main/java/com/chilunyc/fumao/common/util/jpa/query/QueryJoinType.java b/fumao-common/src/main/java/com/chilunyc/fumao/common/util/jpa/query/QueryJoinType.java new file mode 100644 index 0000000..104c7fc --- /dev/null +++ b/fumao-common/src/main/java/com/chilunyc/fumao/common/util/jpa/query/QueryJoinType.java @@ -0,0 +1,12 @@ +package com.chilunyc.fumao.common.util.jpa.query; + +/** + * on 2018/7/31. + */ +public enum QueryJoinType { + + None, + Left, + Right, + Inner +} diff --git a/fumao-common/src/main/java/com/chilunyc/fumao/common/util/jpa/query/QueryType.java b/fumao-common/src/main/java/com/chilunyc/fumao/common/util/jpa/query/QueryType.java index 4aa979a..c3b8cc2 100644 --- a/fumao-common/src/main/java/com/chilunyc/fumao/common/util/jpa/query/QueryType.java +++ b/fumao-common/src/main/java/com/chilunyc/fumao/common/util/jpa/query/QueryType.java @@ -1,7 +1,7 @@ package com.chilunyc.fumao.common.util.jpa.query; /** - * Created by Tkk on 2018/7/21. + * on 2018/7/21. */ public enum QueryType { @@ -33,8 +33,7 @@ public enum QueryType { notLike, // - bwtween, + betweenDate, - - ; + notNull, in; } diff --git a/fumao-common/src/main/java/com/chilunyc/fumao/common/util/jpa/query/SortItem.java b/fumao-common/src/main/java/com/chilunyc/fumao/common/util/jpa/query/SortItem.java index 2436303..d5e7ffa 100644 --- a/fumao-common/src/main/java/com/chilunyc/fumao/common/util/jpa/query/SortItem.java +++ b/fumao-common/src/main/java/com/chilunyc/fumao/common/util/jpa/query/SortItem.java @@ -6,7 +6,7 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** - * Created by Tkk on 2018/7/21. + * on 2018/7/21. */ @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) diff --git a/fumao-common/src/main/java/com/chilunyc/fumao/common/util/jpa/query/SortItems.java b/fumao-common/src/main/java/com/chilunyc/fumao/common/util/jpa/query/SortItems.java index 7ca9e2b..52965cf 100644 --- a/fumao-common/src/main/java/com/chilunyc/fumao/common/util/jpa/query/SortItems.java +++ b/fumao-common/src/main/java/com/chilunyc/fumao/common/util/jpa/query/SortItems.java @@ -6,7 +6,7 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** - * Created by Tkk on 2018/7/21. + * on 2018/7/21. */ @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) diff --git a/fumao-company/pom.xml b/fumao-company/pom.xml index 515fa5d..10e1dfc 100644 --- a/fumao-company/pom.xml +++ b/fumao-company/pom.xml @@ -4,7 +4,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> fumao - com.aki + com.chilunyc 0.0.1-SNAPSHOT 4.0.0 @@ -14,7 +14,7 @@ - com.aki + com.chilunyc fumao-common 0.0.1-SNAPSHOT diff --git a/fumao-company/src/main/java/com/chilunyc/fumao/company/config/CompanyConfiguration.java b/fumao-company/src/main/java/com/chilunyc/fumao/company/config/CompanyConfiguration.java new file mode 100644 index 0000000..6f460ee --- /dev/null +++ b/fumao-company/src/main/java/com/chilunyc/fumao/company/config/CompanyConfiguration.java @@ -0,0 +1,50 @@ +package com.chilunyc.fumao.company.config; + +import com.chilunyc.fumao.common.db.datasource.DynamicDataSource; +import com.chilunyc.fumao.common.db.flyway.FlywayService; +import com.chilunyc.fumao.company.model.Company; +import com.chilunyc.fumao.company.repository.CompanyRepository; +import com.chilunyc.fumao.company.service.CompanyService; +import lombok.extern.log4j.Log4j; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Configuration; +import org.springframework.stereotype.Component; + +import javax.sql.DataSource; +import java.util.List; + +/** + * on 2018/7/26. + */ +@Log4j +@Component +public class CompanyConfiguration implements InitializingBean { + + @Autowired + CompanyRepository companyRepository; + + @Autowired + FlywayService flywayService; + + @Autowired + DynamicDataSource dynamicDataSource; + + @Override + public void afterPropertiesSet() throws Exception { + //1. 从主库读取集团信息 + List all = companyRepository.findAll(); + + //2. 遍历创建主库 + for (Company company : all) { + init(company); + } + } + + public void init(Company company) { + String dbName = String.format("f_admin_%s", company.getId()); + DataSource init = flywayService.init(dbName, "classpath:/flyway/company"); + dynamicDataSource.addDataSource(company.getId().toString(), init, false); + log.info(String.format("集团库初始化 => [ %s ][ %s ]", dbName, company.getName())); + } +} diff --git a/fumao-company/src/main/java/com/chilunyc/fumao/company/model/PlaceAdmin.java b/fumao-company/src/main/java/com/chilunyc/fumao/company/model/PlaceAdmin.java index e23f770..03ef3d0 100644 --- a/fumao-company/src/main/java/com/chilunyc/fumao/company/model/PlaceAdmin.java +++ b/fumao-company/src/main/java/com/chilunyc/fumao/company/model/PlaceAdmin.java @@ -12,8 +12,6 @@ import lombok.Data; import lombok.NoArgsConstructor; import org.hibernate.annotations.*; import org.hibernate.annotations.Parameter; - -import org.redisson.mapreduce.Collector; import org.springframework.data.annotation.CreatedDate; import org.springframework.data.jpa.domain.support.AuditingEntityListener; @@ -24,8 +22,6 @@ import javax.persistence.Index; import javax.persistence.Table; import java.io.Serializable; import java.util.Date; -import java.lang.Long; -import java.lang.String; import java.util.List; import java.util.stream.Collectors; @@ -129,21 +125,23 @@ public class PlaceAdmin implements Serializable, LoginUser { @NotFound(action = NotFoundAction.IGNORE) private Place place; - private List placeAdminPermission; + @OneToMany(fetch = FetchType.EAGER) + @JoinColumn(name = "placeAdminId") + private List placeAdminPermissionList; @Override public String[] toRoles() { switch (type) { // 业务员获取权限 case Business: - return placeAdminPermission + return placeAdminPermissionList .stream() .map(PlaceAdminPermission::getName) .collect(Collectors.toList()) - .toArray(new String[placeAdminPermission.size()]); + .toArray(new String[placeAdminPermissionList.size()]); // 管理员所有权限 default: - return new String[]{AuthRoles.MarketAdmin}; + return new String[]{AuthRoles.PlaceAdmin}; } } diff --git a/fumao-company/src/main/java/com/chilunyc/fumao/company/model/PlaceAdminPermission.java b/fumao-company/src/main/java/com/chilunyc/fumao/company/model/PlaceAdminPermission.java index 586ef8f..05b0bdd 100644 --- a/fumao-company/src/main/java/com/chilunyc/fumao/company/model/PlaceAdminPermission.java +++ b/fumao-company/src/main/java/com/chilunyc/fumao/company/model/PlaceAdminPermission.java @@ -4,30 +4,27 @@ import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import org.hibernate.annotations.*; +import org.hibernate.annotations.GenericGenerator; import org.hibernate.annotations.Parameter; -import org.hibernate.validator.constraints.*; -import javax.validation.constraints.*; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; import javax.persistence.*; -import javax.persistence.Entity; -import javax.persistence.Index; -import javax.persistence.Table; import java.io.Serializable; -import java.lang.Long; -import java.lang.String; import java.util.Date; /** -* -*/ + * + */ @Data @AllArgsConstructor @NoArgsConstructor @Builder @Entity @Table(name = "fumao_place_admin_permission", indexes = { + @Index(name = "place_admin_id", columnList = "placeAdminId"), }) +@EntityListeners(AuditingEntityListener.class) public class PlaceAdminPermission implements Serializable { /** @@ -45,9 +42,22 @@ public class PlaceAdminPermission implements Serializable { @Column(columnDefinition = "varchar(32) comment '名称'") private String name; + /** + * + */ + @Column(columnDefinition = "int(1) comment '名称'") + private Boolean has; + + /** + * 管理员Id + */ + @Column(columnDefinition = "varchar(32) comment '名称'") + private Long placeAdminId; + /** * 创建时间 */ + @CreatedDate @Column(columnDefinition = "datetime comment '创建时间'") private Date createTime; } diff --git a/fumao-company/src/main/java/com/chilunyc/fumao/company/repository/PlaceAdminPermissionRepository.java b/fumao-company/src/main/java/com/chilunyc/fumao/company/repository/PlaceAdminPermissionRepository.java new file mode 100644 index 0000000..10f780b --- /dev/null +++ b/fumao-company/src/main/java/com/chilunyc/fumao/company/repository/PlaceAdminPermissionRepository.java @@ -0,0 +1,17 @@ +package com.chilunyc.fumao.company.repository; + +import com.chilunyc.fumao.company.model.PlaceAdminPermission; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; + +import java.util.List; + +/** +* +*/ +public interface PlaceAdminPermissionRepository extends JpaRepository, JpaSpecificationExecutor { + + void deleteByPlaceAdminId(Long id); + + List findByPlaceAdminId(Long placeAdminId); +} diff --git a/fumao-company/src/main/java/com/chilunyc/fumao/company/request/placeAdmin/PlaceAdminAddRequest.java b/fumao-company/src/main/java/com/chilunyc/fumao/company/request/placeAdmin/PlaceAdminAddRequest.java new file mode 100644 index 0000000..c1a06cc --- /dev/null +++ b/fumao-company/src/main/java/com/chilunyc/fumao/company/request/placeAdmin/PlaceAdminAddRequest.java @@ -0,0 +1,47 @@ +package com.chilunyc.fumao.company.request.placeAdmin; + +import com.chilunyc.fumao.company.model.PlaceAdminPermission; +import com.chilunyc.fumao.company.model.enums.PlaceAdminType; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.validator.constraints.NotBlank; + +import javax.validation.constraints.Pattern; +import java.util.List; + +/** + * + */ +@ApiModel +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class PlaceAdminAddRequest { + + + @NotBlank(message = "请输入名称") + @ApiModelProperty(value = "名称") + private String name; + + @NotBlank(message = "请输入密码") + @Pattern(regexp = "[\\w\\d]{6,18}", message = "长度6-18位的字母数字") + @ApiModelProperty(value = "密码") + private String password; + + @Pattern(regexp = "1[\\d]{10}", message = "请输入11位手机号") + @ApiModelProperty(value = "手机号") + private String mobile; + + private Long companyId; + + private Long placeId; + + private PlaceAdminType type; + + private List permissionList; +} diff --git a/fumao-company/src/main/java/com/chilunyc/fumao/company/request/placeAdmin/PlaceAdminEditRequest.java b/fumao-company/src/main/java/com/chilunyc/fumao/company/request/placeAdmin/PlaceAdminEditRequest.java index becef5b..ed5ed0b 100644 --- a/fumao-company/src/main/java/com/chilunyc/fumao/company/request/placeAdmin/PlaceAdminEditRequest.java +++ b/fumao-company/src/main/java/com/chilunyc/fumao/company/request/placeAdmin/PlaceAdminEditRequest.java @@ -1,16 +1,15 @@ package com.chilunyc.fumao.company.request.placeAdmin; +import com.chilunyc.fumao.company.model.PlaceAdminPermission; import com.chilunyc.fumao.company.model.enums.PlaceAdminType; -import org.hibernate.validator.constraints.*; - -import javax.validation.constraints.*; - import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; -import lombok.*; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; -import java.lang.Long; -import java.lang.String; +import java.util.List; /** * @@ -24,26 +23,14 @@ public class PlaceAdminEditRequest { private Long id; - @NotBlank(message = "请输入名称") @ApiModelProperty(value = "名称") private String name; - @NotBlank(message = "请输入密码") - @Pattern(regexp = "[\\w\\d]{6,18}", message = "长度6-18位的字母数字") - @ApiModelProperty(value = "密码") - private String password; - - @Pattern(regexp = "1[\\d]{10}", message = "请输入11位手机号") - @ApiModelProperty(value = "手机号") - private String mobile; - - @ApiModelProperty(value = "集团") private Long companyId; - @NotNull(message = "请选择商场") - @ApiModelProperty(value = "集团商场") private Long placeId; - private PlaceAdminType placeAdminType; + private PlaceAdminType type; + private List permissionList; } diff --git a/fumao-company/src/main/java/com/chilunyc/fumao/company/request/placeAdmin/PlaceAdminPageRequest.java b/fumao-company/src/main/java/com/chilunyc/fumao/company/request/placeAdmin/PlaceAdminPageRequest.java index f574887..e4d0e81 100644 --- a/fumao-company/src/main/java/com/chilunyc/fumao/company/request/placeAdmin/PlaceAdminPageRequest.java +++ b/fumao-company/src/main/java/com/chilunyc/fumao/company/request/placeAdmin/PlaceAdminPageRequest.java @@ -3,12 +3,9 @@ package com.chilunyc.fumao.company.request.placeAdmin; import com.chilunyc.fumao.common.request.PageRequest; import com.chilunyc.fumao.common.util.jpa.query.QueryItem; import com.chilunyc.fumao.common.util.jpa.query.QueryType; -import io.swagger.annotations.ApiModelProperty; +import com.chilunyc.fumao.company.model.enums.PlaceAdminType; import lombok.Data; -import java.lang.Long; -import java.lang.String; - /** * */ @@ -20,4 +17,7 @@ public class PlaceAdminPageRequest extends PageRequest { @QueryItem(type = QueryType.equal) private Long companyId; + + @QueryItem(type = QueryType.equal) + private PlaceAdminType type; } diff --git a/fumao-company/src/main/java/com/chilunyc/fumao/company/service/CompanyService.java b/fumao-company/src/main/java/com/chilunyc/fumao/company/service/CompanyService.java index 8574306..e34ca96 100644 --- a/fumao-company/src/main/java/com/chilunyc/fumao/company/service/CompanyService.java +++ b/fumao-company/src/main/java/com/chilunyc/fumao/company/service/CompanyService.java @@ -1,12 +1,14 @@ package com.chilunyc.fumao.company.service; import com.chilunyc.fumao.common.context.RequestHolder; +import com.chilunyc.fumao.common.db.datasource.DynamicDataSource; import com.chilunyc.fumao.common.log.model.EventTarget; import com.chilunyc.fumao.common.log.model.EventType; import com.chilunyc.fumao.common.log.service.EventService; import com.chilunyc.fumao.common.request.IdsRequest; import com.chilunyc.fumao.common.util.BeanHelper; import com.chilunyc.fumao.common.util.jpa.query.QueryBuilder; +import com.chilunyc.fumao.company.config.CompanyConfiguration; import com.chilunyc.fumao.company.model.Company; import com.chilunyc.fumao.company.repository.CompanyRepository; import com.chilunyc.fumao.company.request.company.CompanyEditRequest; @@ -35,10 +37,7 @@ public class CompanyService { private EventService eventService; @Autowired - private PlaceService placeService; - - @Autowired - private CompanyAdminService companyAdminService; + private CompanyConfiguration companyConfiguration; public Page page(CompanyPageRequest request) { return companyRepository.findAll(QueryBuilder.build(request), request.getPage()); @@ -62,6 +61,9 @@ public class CompanyService { // 调用flyway, 创建一个数据库实例 + if (request.getId() == null) { + companyConfiguration.init(company); + } eventService.add(RequestHolder.get(), EventTarget.System, EventType.编辑集团, company.getId(), request); return company; diff --git a/fumao-company/src/main/java/com/chilunyc/fumao/company/service/PlaceAdminPermissionService.java b/fumao-company/src/main/java/com/chilunyc/fumao/company/service/PlaceAdminPermissionService.java new file mode 100644 index 0000000..99ea891 --- /dev/null +++ b/fumao-company/src/main/java/com/chilunyc/fumao/company/service/PlaceAdminPermissionService.java @@ -0,0 +1,44 @@ +package com.chilunyc.fumao.company.service; + +import com.chilunyc.fumao.company.model.PlaceAdminPermission; +import com.chilunyc.fumao.company.repository.PlaceAdminPermissionRepository; +import lombok.extern.log4j.Log4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * + */ +@Log4j +@Service +@Transactional +public class PlaceAdminPermissionService { + + + @Autowired + private PlaceAdminPermissionRepository placeAdminPermissionRepository; + + + public void edit(Long id, List permissionList) { + //1. 删掉这个全部权限 + placeAdminPermissionRepository.deleteByPlaceAdminId(id); + + // + placeAdminPermissionRepository.save( + permissionList + .stream() + .peek(p -> p.setPlaceAdminId(id)) + .collect(Collectors.toList()) + ); + } + + public List findByPlaceAdmin(Long placeAdminId) { + List placeAdminList = placeAdminPermissionRepository.findByPlaceAdminId(placeAdminId); + return placeAdminList; + } + +} diff --git a/fumao-company/src/main/java/com/chilunyc/fumao/company/service/PlaceAdminService.java b/fumao-company/src/main/java/com/chilunyc/fumao/company/service/PlaceAdminService.java index d572776..11f672c 100644 --- a/fumao-company/src/main/java/com/chilunyc/fumao/company/service/PlaceAdminService.java +++ b/fumao-company/src/main/java/com/chilunyc/fumao/company/service/PlaceAdminService.java @@ -12,7 +12,10 @@ import com.chilunyc.fumao.common.util.jpa.query.QueryBuilder; import com.chilunyc.fumao.common.util.security.SaltHelper; import com.chilunyc.fumao.company.model.Place; import com.chilunyc.fumao.company.model.PlaceAdmin; +import com.chilunyc.fumao.company.model.enums.PlaceAdminType; +import com.chilunyc.fumao.company.repository.PlaceAdminPermissionRepository; import com.chilunyc.fumao.company.repository.PlaceAdminRepository; +import com.chilunyc.fumao.company.request.placeAdmin.PlaceAdminAddRequest; import com.chilunyc.fumao.company.request.placeAdmin.PlaceAdminEditRequest; import com.chilunyc.fumao.company.request.placeAdmin.PlaceAdminPageRequest; import lombok.extern.log4j.Log4j; @@ -35,9 +38,15 @@ public class PlaceAdminService { @Autowired private PlaceAdminRepository placeAdminRepository; + @Autowired + private PlaceAdminPermissionRepository placeAdminPermissionRepository; + @Autowired private EventService eventService; + @Autowired + private PlaceAdminPermissionService placeAdminPermissionService; + public Page page(PlaceAdminPageRequest request) { return placeAdminRepository.findAll(QueryBuilder.build(request), request.getPage()); } @@ -48,22 +57,32 @@ public class PlaceAdminService { return one; } - - public PlaceAdmin edit(PlaceAdminEditRequest request) { - if (request.getId() == null && - placeAdminRepository.existsByMobile(request.getMobile())) { + public PlaceAdmin add(PlaceAdminAddRequest request) { + if (placeAdminRepository.existsByMobile(request.getMobile())) { throw new SystemException("100000"); } - PlaceAdmin placeAdmin = new PlaceAdmin(); String salt = SaltHelper.salt(); BeanHelper.copyProperties(placeAdmin, request); placeAdmin.setOriginPassword(request.getPassword()); placeAdmin.setSalt(salt); placeAdmin.setPassword(SaltHelper.exec(request.getPassword(), salt)); - placeAdmin.setType(request.getPlaceAdminType()); + placeAdmin = placeAdminRepository.save(placeAdmin); + eventService.add(RequestHolder.get(), EventTarget.System, EventType.新增商场管理员, placeAdmin.getId(), request); + if (PlaceAdminType.Business.equals(request.getType()) && request.getPermissionList() != null) { + placeAdminPermissionService.edit(placeAdmin.getId(), request.getPermissionList()); + } + return placeAdmin; + } + + public PlaceAdmin edit(PlaceAdminEditRequest request) { + PlaceAdmin placeAdmin = placeAdminRepository.findOne(request.getId()); + BeanHelper.copyProperties(placeAdmin, request); placeAdmin = placeAdminRepository.save(placeAdmin); eventService.add(RequestHolder.get(), EventTarget.System, EventType.编辑商场管理员, placeAdmin.getId(), request); + if (PlaceAdminType.Business.equals(request.getType()) && request.getPermissionList() != null) { + placeAdminPermissionService.edit(placeAdmin.getId(), request.getPermissionList()); + } return placeAdmin; } @@ -72,6 +91,7 @@ public class PlaceAdminService { .getIds() .forEach((id) -> { placeAdminRepository.delete(id); + placeAdminPermissionRepository.deleteByPlaceAdminId(id); }); eventService.add(RequestHolder.get(), EventTarget.System, EventType.删除商场管理员, null, request.getIds()); } @@ -102,4 +122,10 @@ public class PlaceAdminService { } throw new SystemException("000004"); } + + public List all(PlaceAdminPageRequest request) { + return placeAdminRepository.findAll(QueryBuilder.build(request)); + } + + } diff --git a/fumao-company/src/main/java/com/chilunyc/fumao/company/service/PlaceFloorService.java b/fumao-company/src/main/java/com/chilunyc/fumao/company/service/PlaceFloorService.java index cbdde22..3cf3293 100644 --- a/fumao-company/src/main/java/com/chilunyc/fumao/company/service/PlaceFloorService.java +++ b/fumao-company/src/main/java/com/chilunyc/fumao/company/service/PlaceFloorService.java @@ -5,6 +5,7 @@ import com.chilunyc.fumao.common.log.model.EventTarget; import com.chilunyc.fumao.common.log.model.EventType; import com.chilunyc.fumao.common.log.service.EventService; import com.chilunyc.fumao.common.request.IdsRequest; +import com.chilunyc.fumao.common.response.NodeResponse; import com.chilunyc.fumao.common.util.BeanHelper; import com.chilunyc.fumao.common.util.jpa.query.QueryBuilder; import com.chilunyc.fumao.company.model.Place; @@ -18,7 +19,9 @@ import org.springframework.data.domain.Page; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; /** * @@ -73,4 +76,23 @@ public class PlaceFloorService { public List all(PlaceFloorPageRequest request) { return placeFloorRepository.findAll(QueryBuilder.build(request)); } + + public List group(PlaceFloorPageRequest request) { + List all = all(request); + List r = new ArrayList<>(); + all + .stream() + .collect(Collectors.groupingBy(PlaceFloor::getTower)) + .forEach((k, v) -> { + r.add( + new NodeResponse(k, k, + v + .stream() + .map(f -> new NodeResponse(f.getFloor() + "", f.getTower() + "", null)) + .collect(Collectors.toList()) + ) + ); + }); + return r; + } } diff --git a/fumao-place/pom.xml b/fumao-place/pom.xml new file mode 100644 index 0000000..254bac8 --- /dev/null +++ b/fumao-place/pom.xml @@ -0,0 +1,22 @@ + + + + fumao + com.chilunyc + 0.0.1-SNAPSHOT + + 4.0.0 + + fumao-place + + + + + com.chilunyc + fumao-common + 0.0.1-SNAPSHOT + + + \ No newline at end of file diff --git a/fumao-place/src/main/java/com/chilunyc/fumao/place/model/Coupon.java b/fumao-place/src/main/java/com/chilunyc/fumao/place/model/Coupon.java new file mode 100644 index 0000000..e9a6c2c --- /dev/null +++ b/fumao-place/src/main/java/com/chilunyc/fumao/place/model/Coupon.java @@ -0,0 +1,166 @@ +package com.chilunyc.fumao.place.model; + +import com.chilunyc.fumao.place.model.enums.CouponKind; +import com.chilunyc.fumao.place.model.enums.CouponSendWay; +import com.chilunyc.fumao.place.model.enums.CouponStatus; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.GenericGenerator; +import org.hibernate.annotations.Parameter; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import javax.persistence.*; +import java.io.Serializable; +import java.util.Date; + +/** + * + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +@Entity +@Table(name = "fumao_coupon", indexes = { +}) +@EntityListeners(AuditingEntityListener.class) +public class Coupon implements Serializable { + + /** + * 编号 + */ + @Id + @Column(length = 64) + @GeneratedValue(generator = "custom") + @GenericGenerator(name = "custom", strategy = "com.chilunyc.fumao.common.util.jpa.CustomIdentifierGenerator", parameters = {@Parameter(name = "type", value = "Number")}) + private Long id; + + /** + * 封面 + */ + @Column(columnDefinition = "text comment '封面'") + private String cover; + + /** + * 名称 + */ + @Column(columnDefinition = "varchar(30) comment '名称'") + private String title; + + /** + * 副标题 + */ + @Column(columnDefinition = "varchar(50) comment '副标题'") + private String subTitle; + + /** + * 库存 + */ + @Column(columnDefinition = "int(9) comment '库存'") + private Long stock; + + /** + * 发劵方式 + */ + @Column(columnDefinition = "int(1) comment '发劵方式'") + @Enumerated(EnumType.ORDINAL) + private CouponSendWay sendWay; + + /** + * 限领 + */ + @Column(columnDefinition = "text comment '限领'") + private Integer maxNum; + + /** + * 发放开始日期 + */ + @Column(columnDefinition = "date comment '发放开始日期'") + private Date openFrom; + + /** + * 发放结束日期 + */ + @Column(columnDefinition = "date comment '发放结束日期'") + private Date openEnd; + + /** + * 有效开始日期 + */ + @Column(columnDefinition = "date comment '有效开始日期'") + private Date validFrom; + + /** + * 有效结束日期 + */ + @Column(columnDefinition = "date comment '有效结束日期'") + private Date validEnd; + + /** + * 有效日 + */ + @Column(columnDefinition = "text comment '有效日'") + private Integer validDay; + + /** + * 使用须知 + */ + @Column(columnDefinition = "text comment '使用须知'") + private String description; + + /** + * 状态 + */ + @Column(columnDefinition = "int(1) comment '状态'") + @Enumerated(EnumType.ORDINAL) + private CouponStatus status; + + /** + * 商户 + */ + @Column(columnDefinition = "bigint(64) comment '商户'") + private Long merchantId; + + /** + * 剩余库存 + */ + @Column(columnDefinition = "int(9) comment '使用库存'") + private Long remain; + + /** + * 类型 + */ + @Column(columnDefinition = "int(1) comment '类型'") + @Enumerated(EnumType.ORDINAL) + private CouponKind kind; + + /** + * 商场 + */ + @Column(columnDefinition = "bigint(64) comment '商场'") + private Long placeId; + + /** + * + */ + @Column(columnDefinition = "double(9,2) comment '面额'") + private Double amount; + + /** + * + */ + @Column(columnDefinition = "double(9,2) comment '售价'") + private Double requireAmount; + + /** + * 创建时间 + */ + @CreatedDate + @Column(columnDefinition = "datetime comment '创建时间'") + private Date createTime; + + +} diff --git a/fumao-place/src/main/java/com/chilunyc/fumao/place/model/CouponChannel.java b/fumao-place/src/main/java/com/chilunyc/fumao/place/model/CouponChannel.java new file mode 100644 index 0000000..37923ab --- /dev/null +++ b/fumao-place/src/main/java/com/chilunyc/fumao/place/model/CouponChannel.java @@ -0,0 +1,74 @@ +package com.chilunyc.fumao.place.model; + +import com.chilunyc.fumao.place.model.enums.CouponPutWay; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.GenericGenerator; +import org.hibernate.annotations.Parameter; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import javax.persistence.*; +import java.io.Serializable; +import java.util.Date; + +/** + * + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +@Entity +@Table(name = "fumao_coupon_channel", indexes = { + @Index(name = "coupon_channel_couponId", columnList = "couponId"), + @Index(name = "coupon_channel_channel", columnList = "channel"), + @Index(name = "coupon_channel_placeId", columnList = "placeId"), + @Index(name = "coupon_channel_cate", columnList = "cate") +}) +@EntityListeners(AuditingEntityListener.class) +public class CouponChannel implements Serializable { + + /** + * 编号 + */ + @Id + @Column(length = 64) + @GeneratedValue(generator = "custom") + @GenericGenerator(name = "custom", strategy = "com.chilunyc.fumao.common.util.jpa.CustomIdentifierGenerator", parameters = {@Parameter(name = "type", value = "Number")}) + private Long id; + + /** + * 优惠卷 + */ + @Column(columnDefinition = "bigint(64) comment '优惠卷'") + private Long couponId; + + /** + * 渠道 + */ + @Column(columnDefinition = "int(1) comment '渠道'") + @Enumerated(EnumType.ORDINAL) + private CouponPutWay channel; + + /** + * 商场 + */ + @Column(columnDefinition = "bigint(64) comment '商场'") + private Long placeId; + + /** + * 分类 + */ + @Column(columnDefinition = "varchar(16) comment '分类'") + private String cate; + + /** + * 创建时间 + */ + @CreatedDate + @Column(columnDefinition = "datetime comment '创建时间'") + private Date createTime; +} diff --git a/fumao-place/src/main/java/com/chilunyc/fumao/place/model/Customer.java b/fumao-place/src/main/java/com/chilunyc/fumao/place/model/Customer.java new file mode 100644 index 0000000..0168410 --- /dev/null +++ b/fumao-place/src/main/java/com/chilunyc/fumao/place/model/Customer.java @@ -0,0 +1,102 @@ +package com.chilunyc.fumao.place.model; + +import com.chilunyc.fumao.place.model.enums.Sex; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.GenericGenerator; +import org.hibernate.annotations.Parameter; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import javax.persistence.*; +import java.io.Serializable; +import java.util.Date; + +/** + * + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +@Entity +@Table(name = "fumao_customer", indexes = { + @Index(name = "customer_mobile", columnList = "mobile"), +}) +@EntityListeners(AuditingEntityListener.class) +public class Customer implements Serializable { + + /** + * 编号 + */ + @Id + @Column(length = 64) + @GeneratedValue(generator = "custom") + @GenericGenerator(name = "custom", strategy = "com.chilunyc.fumao.common.util.jpa.CustomIdentifierGenerator", parameters = {@Parameter(name = "type", value = "Number")}) + private Long id; + + /** + * 名称 + */ + @Column(columnDefinition = "varchar(64) comment '名称'") + private String name; + + /** + * 手机号 + */ + @Column(columnDefinition = "varchar(20) comment '手机号'") + private String mobile; + + /** + * 出生日期 + */ + @Column(columnDefinition = "date comment '出生日期'") + private Date birth; + + /** + * 学历 + */ + @Column(columnDefinition = "text comment '学历'") + private String education; + + /** + * 性别 + */ + @Column(columnDefinition = "int(1) comment '性别'") + @Enumerated(EnumType.ORDINAL) + private Sex sex; + + /** + * 邮箱 + */ + @Column(columnDefinition = "varchar(64) comment '邮箱'") + private String email; + + /** + * 积分 + */ + @Column(columnDefinition = "int(9) comment '积分'") + private Integer score; + + /** + * 住址 + */ + @Column(columnDefinition = "varchar(64) comment '住址'") + private String address; + + /** + * 注册渠道 + */ + @Column(columnDefinition = "varchar(64) comment '注册渠道'") + private String channel; + + /** + * 创建时间 + */ + @CreatedDate + @Column(columnDefinition = "datetime comment '创建时间'") + private Date createTime; + +} diff --git a/fumao-place/src/main/java/com/chilunyc/fumao/place/model/Merchant.java b/fumao-place/src/main/java/com/chilunyc/fumao/place/model/Merchant.java new file mode 100644 index 0000000..73c2ca9 --- /dev/null +++ b/fumao-place/src/main/java/com/chilunyc/fumao/place/model/Merchant.java @@ -0,0 +1,72 @@ +package com.chilunyc.fumao.place.model; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.GenericGenerator; +import org.hibernate.annotations.Parameter; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import javax.persistence.*; +import java.io.Serializable; +import java.util.Date; +import java.util.List; + + +/** + * + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +@Entity +@Table(name = "fumao_merchant", indexes = { + @Index(name = "merchant_mobile", columnList = "mobile") +}) +@EntityListeners(AuditingEntityListener.class) +public class Merchant implements Serializable { + + /** + * 编号 + */ + @Id + @Column(length = 64) + @GeneratedValue(generator = "custom") + @GenericGenerator(name = "custom", strategy = "com.chilunyc.fumao.common.util.jpa.CustomIdentifierGenerator", parameters = {@Parameter(name = "type", value = "Number")}) + private Long id; + + /** + * 图片 + */ + @Column(columnDefinition = "varchar(128) comment '图片'") + private String image; + + /** + * 名称 + */ + @Column(columnDefinition = "varchar(64) comment '名称'") + private String name; + + /** + * 联系方式 + */ + @Column(columnDefinition = "varchar(20) comment '联系方式'") + private String mobile; + + /** + * 创建时间 + */ + @CreatedDate + @Column(columnDefinition = "datetime comment '创建时间'") + private Date createTime; + + @JsonIgnore + @JoinColumn(name = "merchantId") + @OneToMany(fetch = FetchType.LAZY) + private List shopList; + +} diff --git a/fumao-place/src/main/java/com/chilunyc/fumao/place/model/MerchantAdmin.java b/fumao-place/src/main/java/com/chilunyc/fumao/place/model/MerchantAdmin.java new file mode 100644 index 0000000..a66c498 --- /dev/null +++ b/fumao-place/src/main/java/com/chilunyc/fumao/place/model/MerchantAdmin.java @@ -0,0 +1,109 @@ +package com.chilunyc.fumao.place.model; + +import com.chilunyc.fumao.common.context.LoginUser; +import com.chilunyc.fumao.common.shiro.AuthRoles; +import com.fasterxml.jackson.annotation.JsonIgnore; +import io.jsonwebtoken.Claims; +import io.jsonwebtoken.JwtBuilder; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.GenericGenerator; +import org.hibernate.annotations.Parameter; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import javax.persistence.*; +import java.io.Serializable; +import java.util.Date; + +/** + * + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +@Entity +@Table(name = "fumao_merchant_admin", indexes = { + @Index(name = "merchant_admin_mobile", columnList = "mobile"), + @Index(name = "merchant_admin_merchantId", columnList = "merchantId") +}) +@EntityListeners(AuditingEntityListener.class) +public class MerchantAdmin implements Serializable, LoginUser { + + /** + * 编号 + */ + @Id + @Column(length = 64) + @GeneratedValue(generator = "custom") + @GenericGenerator(name = "custom", strategy = "com.chilunyc.fumao.common.util.jpa.CustomIdentifierGenerator", parameters = {@Parameter(name = "type", value = "Number")}) + private Long id; + + /** + * 名称 + */ + @Column(columnDefinition = "text comment '名称'") + private String name; + + /** + * 密码 + */ + @Column(columnDefinition = "varchar(32) comment '原始密码'") + private String originPassword; + + /** + * 密码 + */ + @JsonIgnore + @Column(columnDefinition = "varchar(32) comment '密码'") + private String password; + + /** + * 盐值 + */ + @JsonIgnore + @Column(columnDefinition = "varchar(32) comment '盐值'") + private String salt; + + /** + * 手机号 + */ + @Column(columnDefinition = "varchar(20) comment '手机号'") + private String mobile; + + /** + * 商户 + */ + @Column(columnDefinition = "bigint(64) comment '商户'") + private Long merchantId; + + + /** + * 创建时间 + */ + @CreatedDate + @Column(columnDefinition = "datetime comment '创建时间'") + private Date createTime; + + @Override + public String[] toRoles() { + return new String[]{AuthRoles.MerchantAdmin}; + } + + @Override + public void fromJwt(Claims claims) { + this.id = Long.parseLong(claims.getSubject()); + this.merchantId = claims.get("mid", Long.class); + this.name = claims.get("n", String.class); + } + + @Override + public void toJwt(JwtBuilder claims) { + claims.setSubject(this.id.toString()); + claims.claim("mid", this.merchantId); + claims.claim("n", this.name); + } +} diff --git a/fumao-place/src/main/java/com/chilunyc/fumao/place/model/PlaceSetting.java b/fumao-place/src/main/java/com/chilunyc/fumao/place/model/PlaceSetting.java new file mode 100644 index 0000000..f30ae9d --- /dev/null +++ b/fumao-place/src/main/java/com/chilunyc/fumao/place/model/PlaceSetting.java @@ -0,0 +1,65 @@ +package com.chilunyc.fumao.place.model; + +import com.chilunyc.fumao.place.model.enums.PlaceSettingType; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.GenericGenerator; +import org.hibernate.annotations.Parameter; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import javax.persistence.*; +import java.io.Serializable; +import java.util.Date; + +/** + * + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +@Entity +@Table(name = "fumao_place_setting", indexes = { + @Index(name = "place_setting_placeId", columnList = "placeId") +}) +@EntityListeners(AuditingEntityListener.class) +public class PlaceSetting implements Serializable { + + /** + * 编号 + */ + @Id + @Column(length = 64) + @GeneratedValue(generator = "custom") + @GenericGenerator(name = "custom", strategy = "com.chilunyc.fumao.common.util.jpa.CustomIdentifierGenerator", parameters = {@Parameter(name = "type", value = "Number")}) + private Long id; + + /** + * 类型 + */ + @Column(columnDefinition = "int(1) comment '类型'") + @Enumerated(EnumType.ORDINAL) + private PlaceSettingType type; + + /** + * 数值 + */ + @Column(columnDefinition = "text comment '数值'") + private String value; + + /** + * 商场 + */ + @Column(columnDefinition = "bigint(64) comment '商场'") + private Long placeId; + + /** + * 创建时间 + */ + @CreatedDate + @Column(columnDefinition = "datetime comment '创建时间'") + private Date createTime; +} diff --git a/fumao-place/src/main/java/com/chilunyc/fumao/place/model/PointTransaction.java b/fumao-place/src/main/java/com/chilunyc/fumao/place/model/PointTransaction.java new file mode 100644 index 0000000..6478d90 --- /dev/null +++ b/fumao-place/src/main/java/com/chilunyc/fumao/place/model/PointTransaction.java @@ -0,0 +1,95 @@ +package com.chilunyc.fumao.place.model; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.GenericGenerator; +import org.hibernate.annotations.Parameter; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import javax.persistence.*; +import java.io.Serializable; +import java.util.Date; + +/** + * + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +@Entity +@Table(name = "fumao_point_transaction", indexes = { + @Index(name = "point_transaction_tradeId", columnList = "tradeId"), + @Index(name = "point_transaction_customerId", columnList = "customerId"), + @Index(name = "point_transaction_placeId", columnList = "placeId"), +}) +@EntityListeners(AuditingEntityListener.class) +public class PointTransaction implements Serializable { + + /** + * 编号 + */ + @Id + @Column(length = 64) + @GeneratedValue(generator = "custom") + @GenericGenerator(name = "custom", strategy = "com.chilunyc.fumao.common.util.jpa.CustomIdentifierGenerator", parameters = {@Parameter(name = "type", value = "Number")}) + private Long id; + + /** + * 订单ID + */ + @Column(columnDefinition = "varchar(32) comment '订单ID'") + private String tradeId; + + /** + * 客户 + */ + @Column(columnDefinition = "bigint(64) comment '客户'") + private Long customerId; + + /** + * 手机号 + */ + @Column(columnDefinition = "varchar(20) comment '手机号'") + private String customerMobile; + + /** + * 操作积分 + */ + @Column(columnDefinition = "int(9) comment '操作积分'") + private Integer oper; + + /** + * 原始积分 + */ + @Column(columnDefinition = "int(9) comment '原始积分'") + private Integer origin; + + /** + * 现在积分 + */ + @Column(columnDefinition = "int(9) comment '现在积分'") + private Integer dest; + + /** + * 操作人 + */ + @Column(columnDefinition = "bigint(64) comment '操作人'") + private Long adminId; + + /** + * 场地 + */ + @Column(columnDefinition = "bigint(64) comment '操作人'") + private Long placeId; + + /** + * 创建时间 + */ + @CreatedDate + @Column(columnDefinition = "datetime comment '创建时间'") + private Date createTime; +} diff --git a/fumao-place/src/main/java/com/chilunyc/fumao/place/model/Shop.java b/fumao-place/src/main/java/com/chilunyc/fumao/place/model/Shop.java new file mode 100644 index 0000000..8f01e37 --- /dev/null +++ b/fumao-place/src/main/java/com/chilunyc/fumao/place/model/Shop.java @@ -0,0 +1,144 @@ +package com.chilunyc.fumao.place.model; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.*; +import org.hibernate.annotations.Parameter; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import javax.persistence.*; +import javax.persistence.Entity; +import javax.persistence.ForeignKey; +import javax.persistence.Index; +import javax.persistence.Table; +import java.io.Serializable; +import java.util.Date; + +/** + * + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +@Entity +@Table(name = "fumao_shop", indexes = { + @Index(name = "shop_number", columnList = "number"), + @Index(name = "shop_merchantId", columnList = "merchantId"), + @Index(name = "shop_placeId", columnList = "placeId") +}) +@EntityListeners(AuditingEntityListener.class) +public class Shop implements Serializable { + + /** + * 编号 + */ + @Id + @Column(length = 64) + @GeneratedValue(generator = "custom") + @GenericGenerator(name = "custom", strategy = "com.chilunyc.fumao.common.util.jpa.CustomIdentifierGenerator", parameters = {@Parameter(name = "type", value = "Number")}) + private Long id; + + /** + * 城市 + */ + @Column(columnDefinition = "varchar(10) comment '省份'") + private String province; + + /** + * 城市 + */ + @Column(columnDefinition = "varchar(10) comment '地区'") + private String area; + + /** + * 城市 + */ + @Column(columnDefinition = "varchar(10) comment '城市'") + private String city; + + /** + * POI + */ + @Column(columnDefinition = "varchar(64) comment 'POI'") + private String poi; + + /** + * 经度 + */ + @Column(columnDefinition = "varchar(12) comment '经度'") + private String lat; + + /** + * 纬度 + */ + @Column(columnDefinition = "varchar(12) comment '纬度'") + private String lng; + + /** + * 地址 + */ + @Column(columnDefinition = "varchar(64) comment '地址'") + private String address; + + /** + * 建筑面积 + */ + @Column(columnDefinition = "double(9,2) comment '建筑面积'") + private Double totalArea; + + /** + * 营业面积 + */ + @Column(columnDefinition = "double(9,2) comment '营业面积'") + private Double sellingArea; + + /** + * 商铺号 + */ + @Column(columnDefinition = "varchar(32) comment '商铺号'") + private String number; + + /** + * 楼层 + */ + @Column(columnDefinition = "bigint(64) comment '楼层'") + private Long floor; + + /** + * 封面 + */ + @Column(columnDefinition = "varchar(255) comment '封面'") + private String cover; + + /** + * 商户 + */ + @Column(columnDefinition = "bigint(64) comment '商户'") + private Long merchantId; + + /** + * 商场 + */ + @Column(columnDefinition = "bigint(64) comment '商场'") + private Long placeId; + + /** + * 创建时间 + */ + @CreatedDate + @Column(columnDefinition = "datetime comment '创建时间'") + private Date createTime; + + /** + * + */ + @ManyToOne() + @Fetch(FetchMode.JOIN) + @JoinColumn(name = "merchantId", insertable = false, updatable = false, foreignKey = @ForeignKey(name = "none", value = ConstraintMode.NO_CONSTRAINT)) + @NotFound(action = NotFoundAction.IGNORE) + private Merchant merchant; +} diff --git a/fumao-place/src/main/java/com/chilunyc/fumao/place/model/Tag.java b/fumao-place/src/main/java/com/chilunyc/fumao/place/model/Tag.java new file mode 100644 index 0000000..9688bf1 --- /dev/null +++ b/fumao-place/src/main/java/com/chilunyc/fumao/place/model/Tag.java @@ -0,0 +1,71 @@ +package com.chilunyc.fumao.place.model; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.GenericGenerator; +import org.hibernate.annotations.Parameter; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import javax.persistence.*; +import java.io.Serializable; +import java.util.Date; + +/** + * + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +@Entity +@Table(name = "fumao_tag", indexes = { + @Index(name = "tag_name", columnList = "name"), + @Index(name = "tag_cate", columnList = "cate"), + @Index(name = "tag_targetId", columnList = "targetId") +}) +@EntityListeners(AuditingEntityListener.class) +public class Tag implements Serializable { + + /** + * 编号 + */ + @Id + @Column(length = 64) + @GeneratedValue(generator = "custom") + @GenericGenerator(name = "custom", strategy = "com.chilunyc.fumao.common.util.jpa.CustomIdentifierGenerator", parameters = {@Parameter(name = "type", value = "Number")}) + private Long id; + + /** + * 名称 + */ + @Column(columnDefinition = "varchar(32) comment '名称'") + private String name; + + /** + * 数值 + */ + @Column(columnDefinition = "varchar(64) comment '数值'") + private String value; + + /** + * 组 + */ + @Column(columnDefinition = "varchar(32) comment '组'") + private String cate; + + /** + * 目标 + */ + @Column(columnDefinition = "bigint(64) comment '目标'") + private Long targetId; + + /** + * 创建时间 + */ + @CreatedDate + @Column(columnDefinition = "datetime comment '创建时间'") + private Date createTime; +} diff --git a/fumao-place/src/main/java/com/chilunyc/fumao/place/model/Trade.java b/fumao-place/src/main/java/com/chilunyc/fumao/place/model/Trade.java new file mode 100644 index 0000000..6e1e64c --- /dev/null +++ b/fumao-place/src/main/java/com/chilunyc/fumao/place/model/Trade.java @@ -0,0 +1,122 @@ +package com.chilunyc.fumao.place.model; + +import com.chilunyc.fumao.place.model.enums.TradeStatus; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.GenericGenerator; +import org.hibernate.annotations.Parameter; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import javax.persistence.*; +import java.io.Serializable; +import java.util.Date; + +/** + * + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +@Entity +@Table(name = "fumao_trade", indexes = { + @Index(name = "trade_couponId", columnList = "couponId"), + @Index(name = "trade_customerId", columnList = "customerId"), + @Index(name = "trade_shopId", columnList = "shopId"), + @Index(name = "trade_merchantId", columnList = "merchantId"), + @Index(name = "trade_placeId", columnList = "placeId"), +}) +@EntityListeners(AuditingEntityListener.class) +public class Trade implements Serializable { + + /** + * 编号 + */ + @Id + @Column(length = 64) + @GeneratedValue(generator = "custom") + @GenericGenerator(name = "custom", strategy = "com.chilunyc.fumao.common.util.jpa.CustomIdentifierGenerator", parameters = {@Parameter(name = "type", value = "Number")}) + private Long id; + + /** + * 优惠券 + */ + @Column(columnDefinition = "bigint(64) comment '优惠券'") + private Long couponId; + + /** + * 客户 + */ + @Column(columnDefinition = "bigint(64) comment '客户'") + private Long customerId; + + /** + * 金额 + */ + @Column(columnDefinition = "decimal(9,2) comment '金额'") + private Double requireAmount; + + /** + * 优惠券名称 + */ + @Column(columnDefinition = "varchar(64) comment '优惠券名称'") + private String couponName; + + /** + * 面额 + */ + @Column(columnDefinition = "decimal(9,2) comment '面额'") + private Double amount; + + /** + * 状态 + */ + @Column(columnDefinition = "int(1) comment '状态'") + private TradeStatus status; + + /** + * 使用时间 + */ + @Column(columnDefinition = "date comment '使用时间'") + private Date useTime; + + /** + * 商铺 + */ + @Column(columnDefinition = "bigint(64) comment '商铺'") + private Long shopId; + + /** + * 商户 + */ + @Column(columnDefinition = "bigint(64) comment '商户'") + private Long merchantId; + + /** + * 商场 + */ + @Column(columnDefinition = "bigint(64) comment '商场'") + private Long placeId; + + /** + * 过期时间 + */ + @Column(columnDefinition = "date comment '过期时间'") + private Date expiredTime; + + /** + * 支付时间 + */ + @Column(columnDefinition = "date comment '支付时间'") + private Date payTime; + + /** + * 创建时间 + */ + @CreatedDate + @Column(columnDefinition = "datetime comment '创建时间'") + private Date createTime; +} diff --git a/fumao-place/src/main/java/com/chilunyc/fumao/place/model/enums/CouponKind.java b/fumao-place/src/main/java/com/chilunyc/fumao/place/model/enums/CouponKind.java new file mode 100644 index 0000000..145cb3f --- /dev/null +++ b/fumao-place/src/main/java/com/chilunyc/fumao/place/model/enums/CouponKind.java @@ -0,0 +1,13 @@ +package com.chilunyc.fumao.place.model.enums; + + +/** +* +*/ +public enum CouponKind { + fullcash, + cash, + group, + gift, + parking, +} diff --git a/fumao-place/src/main/java/com/chilunyc/fumao/place/model/enums/CouponPutWay.java b/fumao-place/src/main/java/com/chilunyc/fumao/place/model/enums/CouponPutWay.java new file mode 100644 index 0000000..f6c9923 --- /dev/null +++ b/fumao-place/src/main/java/com/chilunyc/fumao/place/model/enums/CouponPutWay.java @@ -0,0 +1,10 @@ +package com.chilunyc.fumao.place.model.enums; + + +/** +* +*/ +public enum CouponPutWay { + FlashSale, + List, +} diff --git a/fumao-place/src/main/java/com/chilunyc/fumao/place/model/enums/CouponSendWay.java b/fumao-place/src/main/java/com/chilunyc/fumao/place/model/enums/CouponSendWay.java new file mode 100644 index 0000000..45557c9 --- /dev/null +++ b/fumao-place/src/main/java/com/chilunyc/fumao/place/model/enums/CouponSendWay.java @@ -0,0 +1,10 @@ +package com.chilunyc.fumao.place.model.enums; + + +/** +* +*/ +public enum CouponSendWay { + Get, + Put, +} diff --git a/fumao-place/src/main/java/com/chilunyc/fumao/place/model/enums/CouponStatus.java b/fumao-place/src/main/java/com/chilunyc/fumao/place/model/enums/CouponStatus.java new file mode 100644 index 0000000..f009d25 --- /dev/null +++ b/fumao-place/src/main/java/com/chilunyc/fumao/place/model/enums/CouponStatus.java @@ -0,0 +1,13 @@ +package com.chilunyc.fumao.place.model.enums; + + +/** +* +*/ +public enum CouponStatus { + Draft, + NotOpen, + Open, + Invalid, + Drop, +} diff --git a/fumao-place/src/main/java/com/chilunyc/fumao/place/model/enums/PlaceSettingType.java b/fumao-place/src/main/java/com/chilunyc/fumao/place/model/enums/PlaceSettingType.java new file mode 100644 index 0000000..84f1fac --- /dev/null +++ b/fumao-place/src/main/java/com/chilunyc/fumao/place/model/enums/PlaceSettingType.java @@ -0,0 +1,30 @@ +package com.chilunyc.fumao.place.model.enums; + + +/** + * + */ +public enum PlaceSettingType { + + // + fatigue("疲劳度"), + + // + scoreClean("积分清零"), + + // + scoreStrategy("积分策略"), + + // + ; + + private String msg; + + PlaceSettingType(String msg) { + this.msg = msg; + } + + public String getMsg() { + return msg; + } +} diff --git a/fumao-place/src/main/java/com/chilunyc/fumao/place/model/enums/Sex.java b/fumao-place/src/main/java/com/chilunyc/fumao/place/model/enums/Sex.java new file mode 100644 index 0000000..700a67f --- /dev/null +++ b/fumao-place/src/main/java/com/chilunyc/fumao/place/model/enums/Sex.java @@ -0,0 +1,11 @@ +package com.chilunyc.fumao.place.model.enums; + + +/** +* +*/ +public enum Sex { + Man, + Woman, + None, +} diff --git a/fumao-place/src/main/java/com/chilunyc/fumao/place/model/enums/TradeStatus.java b/fumao-place/src/main/java/com/chilunyc/fumao/place/model/enums/TradeStatus.java new file mode 100644 index 0000000..d0f333e --- /dev/null +++ b/fumao-place/src/main/java/com/chilunyc/fumao/place/model/enums/TradeStatus.java @@ -0,0 +1,11 @@ +package com.chilunyc.fumao.place.model.enums; + +/** + * on 2018/7/27. + */ +public enum TradeStatus { + Init, //初始化 + Paid, //已支付 + Writeoff, //核销 + Expired, //过期 +} diff --git a/fumao-place/src/main/java/com/chilunyc/fumao/place/model/setting/FatigueSetting.java b/fumao-place/src/main/java/com/chilunyc/fumao/place/model/setting/FatigueSetting.java new file mode 100644 index 0000000..e6557e5 --- /dev/null +++ b/fumao-place/src/main/java/com/chilunyc/fumao/place/model/setting/FatigueSetting.java @@ -0,0 +1,12 @@ +package com.chilunyc.fumao.place.model.setting; + +import lombok.Data; + +/** + * on 2018/7/31. + */ +@Data +public class FatigueSetting { + + +} diff --git a/fumao-place/src/main/java/com/chilunyc/fumao/place/model/setting/ScoreCleanSetting.java b/fumao-place/src/main/java/com/chilunyc/fumao/place/model/setting/ScoreCleanSetting.java new file mode 100644 index 0000000..99e7e8a --- /dev/null +++ b/fumao-place/src/main/java/com/chilunyc/fumao/place/model/setting/ScoreCleanSetting.java @@ -0,0 +1,16 @@ +package com.chilunyc.fumao.place.model.setting; + +import lombok.Data; + +/** + * on 2018/7/31. + */ +@Data +public class ScoreCleanSetting { + + private boolean clean; + + private Integer month; + + private Integer date; +} diff --git a/fumao-place/src/main/java/com/chilunyc/fumao/place/model/setting/ScoreStrategySetting.java b/fumao-place/src/main/java/com/chilunyc/fumao/place/model/setting/ScoreStrategySetting.java new file mode 100644 index 0000000..7f1c61a --- /dev/null +++ b/fumao-place/src/main/java/com/chilunyc/fumao/place/model/setting/ScoreStrategySetting.java @@ -0,0 +1,14 @@ +package com.chilunyc.fumao.place.model.setting; + +import lombok.Data; + +/** + * on 2018/7/31. + */ +@Data +public class ScoreStrategySetting { + + private Double amount; + + private Double score; +} diff --git a/fumao-place/src/main/java/com/chilunyc/fumao/place/repository/CouponChannelRepository.java b/fumao-place/src/main/java/com/chilunyc/fumao/place/repository/CouponChannelRepository.java new file mode 100644 index 0000000..03c83de --- /dev/null +++ b/fumao-place/src/main/java/com/chilunyc/fumao/place/repository/CouponChannelRepository.java @@ -0,0 +1,34 @@ +package com.chilunyc.fumao.place.repository; + +import com.chilunyc.fumao.place.model.CouponChannel; +import com.chilunyc.fumao.place.model.enums.CouponPutWay; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; + +import java.util.List; + +/** + * + */ +public interface CouponChannelRepository extends JpaRepository, JpaSpecificationExecutor { + + List findByChannel(String channel); + + boolean existsByChannel(String channel); + + boolean existsByCouponIdAndChannel(Long id, CouponPutWay channel); + + void deleteByCouponIdAndCateIsNotNull(Long id); + + List findByCouponIdAndCateIsNotNull(Long id); + + List findByCouponId(Long id); + + @Modifying + @Query( + "Update CouponChannel set channel = ?2 where couponId = ?1 and cate is not null" + ) + void updateCate(Long couponId, CouponPutWay channel); +} diff --git a/fumao-place/src/main/java/com/chilunyc/fumao/place/repository/CouponRepository.java b/fumao-place/src/main/java/com/chilunyc/fumao/place/repository/CouponRepository.java new file mode 100644 index 0000000..dc91314 --- /dev/null +++ b/fumao-place/src/main/java/com/chilunyc/fumao/place/repository/CouponRepository.java @@ -0,0 +1,14 @@ +package com.chilunyc.fumao.place.repository; + +import com.chilunyc.fumao.place.model.Coupon; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; + +import java.util.List; + +/** +* +*/ +public interface CouponRepository extends JpaRepository, JpaSpecificationExecutor { + +} diff --git a/fumao-place/src/main/java/com/chilunyc/fumao/place/repository/CustomerRepository.java b/fumao-place/src/main/java/com/chilunyc/fumao/place/repository/CustomerRepository.java new file mode 100644 index 0000000..914ef1c --- /dev/null +++ b/fumao-place/src/main/java/com/chilunyc/fumao/place/repository/CustomerRepository.java @@ -0,0 +1,20 @@ +package com.chilunyc.fumao.place.repository; + +import com.chilunyc.fumao.place.model.Customer; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; + +import java.util.Date; +import java.util.List; + +/** +* +*/ +public interface CustomerRepository extends JpaRepository, JpaSpecificationExecutor { + + Customer findByMobile(String mobile); + + boolean existsByMobile(String mobile); + + Long countByCreateTimeAfter(Date date); +} diff --git a/fumao-place/src/main/java/com/chilunyc/fumao/place/repository/MerchantAdminRepository.java b/fumao-place/src/main/java/com/chilunyc/fumao/place/repository/MerchantAdminRepository.java new file mode 100644 index 0000000..b5df2a7 --- /dev/null +++ b/fumao-place/src/main/java/com/chilunyc/fumao/place/repository/MerchantAdminRepository.java @@ -0,0 +1,13 @@ +package com.chilunyc.fumao.place.repository; + +import com.chilunyc.fumao.place.model.MerchantAdmin; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; + +/** +* +*/ +public interface MerchantAdminRepository extends JpaRepository, JpaSpecificationExecutor { + + boolean existsByMobile(String mobile); +} diff --git a/fumao-place/src/main/java/com/chilunyc/fumao/place/repository/MerchantRepository.java b/fumao-place/src/main/java/com/chilunyc/fumao/place/repository/MerchantRepository.java new file mode 100644 index 0000000..39a3e4c --- /dev/null +++ b/fumao-place/src/main/java/com/chilunyc/fumao/place/repository/MerchantRepository.java @@ -0,0 +1,14 @@ +package com.chilunyc.fumao.place.repository; + +import com.chilunyc.fumao.place.model.Merchant; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; + +import java.util.List; + +/** +* +*/ +public interface MerchantRepository extends JpaRepository, JpaSpecificationExecutor { + +} diff --git a/fumao-place/src/main/java/com/chilunyc/fumao/place/repository/PlaceSettingRepository.java b/fumao-place/src/main/java/com/chilunyc/fumao/place/repository/PlaceSettingRepository.java new file mode 100644 index 0000000..30774c1 --- /dev/null +++ b/fumao-place/src/main/java/com/chilunyc/fumao/place/repository/PlaceSettingRepository.java @@ -0,0 +1,21 @@ +package com.chilunyc.fumao.place.repository; + +import com.chilunyc.fumao.place.model.PlaceSetting; +import com.chilunyc.fumao.place.model.enums.PlaceSettingType; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; + +import java.util.List; + +/** +* +*/ +public interface PlaceSettingRepository extends JpaRepository, JpaSpecificationExecutor { + + List findByPlaceId(Long placeId); + + boolean existsByPlaceId(Long placeId); + + + PlaceSetting findByPlaceIdAndType(Long placeId, PlaceSettingType type); +} diff --git a/fumao-place/src/main/java/com/chilunyc/fumao/place/repository/PointTransactionRepository.java b/fumao-place/src/main/java/com/chilunyc/fumao/place/repository/PointTransactionRepository.java new file mode 100644 index 0000000..952feeb --- /dev/null +++ b/fumao-place/src/main/java/com/chilunyc/fumao/place/repository/PointTransactionRepository.java @@ -0,0 +1,14 @@ +package com.chilunyc.fumao.place.repository; + +import com.chilunyc.fumao.place.model.PointTransaction; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; + +import java.util.List; + +/** +* +*/ +public interface PointTransactionRepository extends JpaRepository, JpaSpecificationExecutor { + +} diff --git a/fumao-place/src/main/java/com/chilunyc/fumao/place/repository/ShopRepository.java b/fumao-place/src/main/java/com/chilunyc/fumao/place/repository/ShopRepository.java new file mode 100644 index 0000000..93a23eb --- /dev/null +++ b/fumao-place/src/main/java/com/chilunyc/fumao/place/repository/ShopRepository.java @@ -0,0 +1,21 @@ +package com.chilunyc.fumao.place.repository; + +import com.chilunyc.fumao.place.model.Shop; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; + +import java.util.List; + +/** + * + */ +public interface ShopRepository extends JpaRepository, JpaSpecificationExecutor { + + @Modifying + @Query( + "Update Shop set merchantId = ?2 where id in ?1" + ) + void updateMerchant(List ids, Long targetId); +} diff --git a/fumao-place/src/main/java/com/chilunyc/fumao/place/repository/TagRepository.java b/fumao-place/src/main/java/com/chilunyc/fumao/place/repository/TagRepository.java new file mode 100644 index 0000000..5b536e9 --- /dev/null +++ b/fumao-place/src/main/java/com/chilunyc/fumao/place/repository/TagRepository.java @@ -0,0 +1,19 @@ +package com.chilunyc.fumao.place.repository; + +import com.chilunyc.fumao.place.model.Tag; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; + +import java.util.List; + +/** + * + */ +public interface TagRepository extends JpaRepository, JpaSpecificationExecutor { + + List findByTargetId(Long targetId); + + boolean existsByTargetId(Long targetId); + + void deleteByTargetId(Long targetId); +} diff --git a/fumao-place/src/main/java/com/chilunyc/fumao/place/repository/TradeRepository.java b/fumao-place/src/main/java/com/chilunyc/fumao/place/repository/TradeRepository.java new file mode 100644 index 0000000..c4fce32 --- /dev/null +++ b/fumao-place/src/main/java/com/chilunyc/fumao/place/repository/TradeRepository.java @@ -0,0 +1,28 @@ +package com.chilunyc.fumao.place.repository; + +import com.chilunyc.fumao.place.model.Trade; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; +import org.springframework.data.jpa.repository.Query; + +import java.util.Date; +import java.util.List; + +/** + * + */ +public interface TradeRepository extends JpaRepository, JpaSpecificationExecutor { + + List findByCouponId(Long couponId); + + boolean existsByCouponId(Long couponId); + + List findByCustomerId(Long customerId); + + boolean existsByCustomerId(Long customerId); + + @Query( + "select sum(requireAmount) from Trade where createTime >= ?1" + ) + Double sumAfterCreateTime(Date date); +} diff --git a/fumao-place/src/main/java/com/chilunyc/fumao/place/request/coupon/CouponEditRequest.java b/fumao-place/src/main/java/com/chilunyc/fumao/place/request/coupon/CouponEditRequest.java new file mode 100644 index 0000000..0f9607c --- /dev/null +++ b/fumao-place/src/main/java/com/chilunyc/fumao/place/request/coupon/CouponEditRequest.java @@ -0,0 +1,90 @@ +package com.chilunyc.fumao.place.request.coupon; + +import com.chilunyc.fumao.place.model.enums.CouponKind; +import com.chilunyc.fumao.place.model.enums.CouponSendWay; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.validator.constraints.NotBlank; + +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import java.util.Date; +import java.util.List; + +/** + * + */ +@ApiModel +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class CouponEditRequest { + + private Long id; + + @ApiModelProperty(value = "封面") + private String cover; + + @NotBlank(message = "请输入名称") + @ApiModelProperty(value = "名称") + private String title; + + @ApiModelProperty(value = "副标题") + private String subTitle; + + @NotNull(message = "请输入库存") + @ApiModelProperty(value = "库存") + private Long stock; + + @NotNull(message = "请选择限额") + @ApiModelProperty(value = "限领") + private Integer maxNum; + + @Size(min = 2, max = 2, message = "请选择发放日期") + @ApiModelProperty(value = "发放日期") + private Date[] open; + + @NotBlank(message = "请选择有效期类型") + private String validType; + + @ApiModelProperty(value = "有效日期") + private Date[] valid; + + @ApiModelProperty(value = "有效日") + private Integer validDay; + + @NotBlank(message = "请输入使用须知") + @ApiModelProperty(value = "使用须知") + private String description; + + @ApiModelProperty(value = "商户") + private Long merchantId; + + @NotNull(message = "请输入面额") + @ApiModelProperty(value = "面值") + private Double amount; + + @NotNull(message = "请输入使用条件") + @ApiModelProperty(value = "售价") + private Double requireAmount; + + @NotNull(message = "请选择卷类型") + private CouponKind kind; + + @NotNull(message = "请选择发劵方式") + private CouponSendWay sendWay; + + private Long placeId; + + @ApiModelProperty("是否草稿") + private boolean draft; + + @ApiModelProperty("分类") + @Size(min = 1, message = "请选择业态") + private List cateList; +} diff --git a/fumao-place/src/main/java/com/chilunyc/fumao/place/request/coupon/CouponPageRequest.java b/fumao-place/src/main/java/com/chilunyc/fumao/place/request/coupon/CouponPageRequest.java new file mode 100644 index 0000000..d2961cc --- /dev/null +++ b/fumao-place/src/main/java/com/chilunyc/fumao/place/request/coupon/CouponPageRequest.java @@ -0,0 +1,32 @@ +package com.chilunyc.fumao.place.request.coupon; + +import com.chilunyc.fumao.common.request.PageRequest; +import com.chilunyc.fumao.common.util.jpa.query.QueryItem; +import com.chilunyc.fumao.common.util.jpa.query.QueryType; +import com.chilunyc.fumao.common.util.jpa.query.SortItem; +import com.chilunyc.fumao.common.util.jpa.query.SortItems; +import com.chilunyc.fumao.place.model.enums.CouponKind; +import com.chilunyc.fumao.place.model.enums.CouponStatus; +import lombok.Data; + +import java.util.List; + +/** + * + */ +@SortItems({ + @SortItem(column = "createTime") +}) +@Data +public class CouponPageRequest extends PageRequest { + + + @QueryItem(type = QueryType.equal) + private CouponKind kind; + + @QueryItem(type = QueryType.equal) + private CouponStatus status; + + @QueryItem(type = QueryType.in, column = "status") + private List statusList; +} diff --git a/fumao-place/src/main/java/com/chilunyc/fumao/place/request/couponChannel/CouponChannelEditRequest.java b/fumao-place/src/main/java/com/chilunyc/fumao/place/request/couponChannel/CouponChannelEditRequest.java new file mode 100644 index 0000000..cec4760 --- /dev/null +++ b/fumao-place/src/main/java/com/chilunyc/fumao/place/request/couponChannel/CouponChannelEditRequest.java @@ -0,0 +1,36 @@ +package com.chilunyc.fumao.place.request.couponChannel; + +import com.chilunyc.fumao.place.model.enums.CouponPutWay; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import java.util.List; + +/** + * + */ +@ApiModel +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class CouponChannelEditRequest { + + @ApiModelProperty(value = "优惠卷") + @Size(min = 1, message = "请选择投放的优惠券") + private List couponIdList; + + @ApiModelProperty(value = "渠道") + @NotNull(message = "请选择投放的渠道") + private CouponPutWay channel; + + @ApiModelProperty(value = "商场") + private Long placeId; + +} diff --git a/fumao-place/src/main/java/com/chilunyc/fumao/place/request/couponChannel/CouponChannelPageRequest.java b/fumao-place/src/main/java/com/chilunyc/fumao/place/request/couponChannel/CouponChannelPageRequest.java new file mode 100644 index 0000000..c6c7da7 --- /dev/null +++ b/fumao-place/src/main/java/com/chilunyc/fumao/place/request/couponChannel/CouponChannelPageRequest.java @@ -0,0 +1,35 @@ +package com.chilunyc.fumao.place.request.couponChannel; + +import com.chilunyc.fumao.common.request.PageRequest; +import com.chilunyc.fumao.common.util.jpa.query.QueryItem; +import com.chilunyc.fumao.common.util.jpa.query.QueryType; +import com.chilunyc.fumao.common.util.jpa.query.SortItem; +import com.chilunyc.fumao.common.util.jpa.query.SortItems; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * + */ +@SortItems({ + @SortItem(column = "createTime") +}) +@Data +public class CouponChannelPageRequest extends PageRequest { + + @ApiModelProperty(value = "优惠卷") + @QueryItem(type = QueryType.equal) + private Long couponId; + + @ApiModelProperty(value = "渠道") + @QueryItem(type = QueryType.equal) + private String channel; + + @ApiModelProperty(value = "商场") + @QueryItem(type = QueryType.equal) + private Long placeId; + + @ApiModelProperty(value = "分类") + @QueryItem(type = QueryType.equal) + private String cate; +} diff --git a/fumao-place/src/main/java/com/chilunyc/fumao/place/request/customer/CustomerEditRequest.java b/fumao-place/src/main/java/com/chilunyc/fumao/place/request/customer/CustomerEditRequest.java new file mode 100644 index 0000000..d03a937 --- /dev/null +++ b/fumao-place/src/main/java/com/chilunyc/fumao/place/request/customer/CustomerEditRequest.java @@ -0,0 +1,46 @@ +package com.chilunyc.fumao.place.request.customer; + +import com.chilunyc.fumao.place.model.Tag; +import com.chilunyc.fumao.place.model.enums.Sex; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; +import java.util.List; + +/** + * + */ +@ApiModel +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class CustomerEditRequest { + + private Long id; + + @ApiModelProperty(value = "名称") + private String name; + + @ApiModelProperty(value = "出生日期") + private Date birth; + + @ApiModelProperty(value = "学历") + private String education; + + @ApiModelProperty(value = "性别") + private Sex sex; + + @ApiModelProperty(value = "邮箱") + private String email; + + @ApiModelProperty(value = "住址") + private String address; + + private List tagList; +} diff --git a/fumao-place/src/main/java/com/chilunyc/fumao/place/request/customer/CustomerPageRequest.java b/fumao-place/src/main/java/com/chilunyc/fumao/place/request/customer/CustomerPageRequest.java new file mode 100644 index 0000000..14c6e91 --- /dev/null +++ b/fumao-place/src/main/java/com/chilunyc/fumao/place/request/customer/CustomerPageRequest.java @@ -0,0 +1,27 @@ +package com.chilunyc.fumao.place.request.customer; + +import com.chilunyc.fumao.common.request.PageRequest; +import com.chilunyc.fumao.common.util.jpa.query.QueryItem; +import com.chilunyc.fumao.common.util.jpa.query.QueryType; +import com.chilunyc.fumao.common.util.jpa.query.SortItem; +import com.chilunyc.fumao.common.util.jpa.query.SortItems; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * + */ +@SortItems({ + @SortItem(column = "createTime") +}) +@Data +public class CustomerPageRequest extends PageRequest { + + @ApiModelProperty(value = "名称") + @QueryItem(type = QueryType.like) + private String name; + + @ApiModelProperty(value = "手机号") + @QueryItem(type = QueryType.like) + private String mobile; +} diff --git a/fumao-place/src/main/java/com/chilunyc/fumao/place/request/merchant/MerchantEditRequest.java b/fumao-place/src/main/java/com/chilunyc/fumao/place/request/merchant/MerchantEditRequest.java new file mode 100644 index 0000000..c9f28f4 --- /dev/null +++ b/fumao-place/src/main/java/com/chilunyc/fumao/place/request/merchant/MerchantEditRequest.java @@ -0,0 +1,35 @@ +package com.chilunyc.fumao.place.request.merchant; + +import org.hibernate.validator.constraints.*; +import javax.validation.constraints.*; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.*; +import java.lang.Long; +import java.lang.String; +import java.lang.String; +import java.lang.String; + +/** +* +*/ +@ApiModel +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class MerchantEditRequest { + + private Long id; + + + @ApiModelProperty(value = "图片") + private String image; + + @ApiModelProperty(value = "名称") + private String name; + + @ApiModelProperty(value = "联系方式") + private String mobile; + +} diff --git a/fumao-place/src/main/java/com/chilunyc/fumao/place/request/merchant/MerchantPageRequest.java b/fumao-place/src/main/java/com/chilunyc/fumao/place/request/merchant/MerchantPageRequest.java new file mode 100644 index 0000000..676a2e8 --- /dev/null +++ b/fumao-place/src/main/java/com/chilunyc/fumao/place/request/merchant/MerchantPageRequest.java @@ -0,0 +1,29 @@ +package com.chilunyc.fumao.place.request.merchant; + +import com.chilunyc.fumao.common.request.PageRequest; +import com.chilunyc.fumao.common.util.jpa.query.*; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +; + +/** + * + */ +@SortItems({ + @SortItem(column = "createTime") +}) +@Data +public class MerchantPageRequest extends PageRequest { + + @ApiModelProperty(value = "名称") + @QueryItem(type = QueryType.like) + private String name; + + @ApiModelProperty(value = "联系方式") + @QueryItem(type = QueryType.like) + private String mobile; + + @QueryItem(join = QueryJoinType.Inner, column = "shopList.number", type = QueryType.equal) + private String number; +} diff --git a/fumao-place/src/main/java/com/chilunyc/fumao/place/request/merchantAdmin/MerchantAdminEditRequest.java b/fumao-place/src/main/java/com/chilunyc/fumao/place/request/merchantAdmin/MerchantAdminEditRequest.java new file mode 100644 index 0000000..bf3cc08 --- /dev/null +++ b/fumao-place/src/main/java/com/chilunyc/fumao/place/request/merchantAdmin/MerchantAdminEditRequest.java @@ -0,0 +1,39 @@ +package com.chilunyc.fumao.place.request.merchantAdmin; + +import org.hibernate.validator.constraints.*; +import javax.validation.constraints.*; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.*; +import java.lang.Long; +import java.lang.String; +import java.lang.String; +import java.lang.String; +import java.lang.String; +import java.lang.Long; + +/** +* +*/ +@ApiModel +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class MerchantAdminEditRequest { + + private Long id; + + + @ApiModelProperty(value = "名称") + private String name; + + @ApiModelProperty(value = "密码") + private String password; + + @ApiModelProperty(value = "手机号") + private String mobile; + + @ApiModelProperty(value = "商户") + private Long merchantId; +} diff --git a/fumao-place/src/main/java/com/chilunyc/fumao/place/request/merchantAdmin/MerchantAdminPageRequest.java b/fumao-place/src/main/java/com/chilunyc/fumao/place/request/merchantAdmin/MerchantAdminPageRequest.java new file mode 100644 index 0000000..fd25639 --- /dev/null +++ b/fumao-place/src/main/java/com/chilunyc/fumao/place/request/merchantAdmin/MerchantAdminPageRequest.java @@ -0,0 +1,41 @@ +package com.chilunyc.fumao.place.request.merchantAdmin; + +import com.chilunyc.fumao.common.request.PageRequest; +import com.chilunyc.fumao.common.util.jpa.query.QueryItem; +import com.chilunyc.fumao.common.util.jpa.query.QueryType; +import com.chilunyc.fumao.common.util.jpa.query.SortItem; +import com.chilunyc.fumao.common.util.jpa.query.SortItems; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.apache.commons.lang3.StringUtils; + +import java.util.ArrayList; +import java.util.List; +import java.lang.Long; +import java.lang.String; +import java.lang.String; +import java.lang.String; +import java.lang.String; +import java.lang.Long; + +/** +* +*/ +@SortItems({ + @SortItem(column = "createTime") +}) +@Data +public class MerchantAdminPageRequest extends PageRequest { + + @ApiModelProperty(value = "名称") + @QueryItem(type = QueryType.equal) + private String name; + + @ApiModelProperty(value = "商户") + @QueryItem(type = QueryType.equal) + private Long merchantId; +} diff --git a/fumao-place/src/main/java/com/chilunyc/fumao/place/request/placeSetting/PlaceSettingEditRequest.java b/fumao-place/src/main/java/com/chilunyc/fumao/place/request/placeSetting/PlaceSettingEditRequest.java new file mode 100644 index 0000000..ede6107 --- /dev/null +++ b/fumao-place/src/main/java/com/chilunyc/fumao/place/request/placeSetting/PlaceSettingEditRequest.java @@ -0,0 +1,32 @@ +package com.chilunyc.fumao.place.request.placeSetting; + +import com.chilunyc.fumao.place.model.enums.PlaceSettingType; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.validation.constraints.NotNull; + +/** + * + */ +@ApiModel +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class PlaceSettingEditRequest { + + @NotNull(message = "请选择类型") + @ApiModelProperty(value = "类型") + private PlaceSettingType type; + + @ApiModelProperty(value = "数值") + private String value; + + @ApiModelProperty(value = "商场") + private Long placeId; +} diff --git a/fumao-place/src/main/java/com/chilunyc/fumao/place/request/pointTransaction/PointTransactionPaddedRequest.java b/fumao-place/src/main/java/com/chilunyc/fumao/place/request/pointTransaction/PointTransactionPaddedRequest.java new file mode 100644 index 0000000..28c1f69 --- /dev/null +++ b/fumao-place/src/main/java/com/chilunyc/fumao/place/request/pointTransaction/PointTransactionPaddedRequest.java @@ -0,0 +1,40 @@ +package com.chilunyc.fumao.place.request.pointTransaction; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.validator.constraints.NotBlank; + +import javax.validation.constraints.NotNull; + +/** + * + */ +@ApiModel +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class PointTransactionPaddedRequest { + + @NotBlank(message = "请输入单据号") + @ApiModelProperty(value = "订单ID") + private String tradeId; + + @NotNull(message = "请选择客户") + @ApiModelProperty(value = "客户") + private Long customerId; + + @NotNull(message = "请输入金额") + @ApiModelProperty(value = "操作金额") + private Double amount; + + @ApiModelProperty(value = "操作人") + private Long adminId; + + @ApiModelProperty(value = "商场") + private Long placeId; +} diff --git a/fumao-place/src/main/java/com/chilunyc/fumao/place/request/pointTransaction/PointTransactionPageRequest.java b/fumao-place/src/main/java/com/chilunyc/fumao/place/request/pointTransaction/PointTransactionPageRequest.java new file mode 100644 index 0000000..bc02668 --- /dev/null +++ b/fumao-place/src/main/java/com/chilunyc/fumao/place/request/pointTransaction/PointTransactionPageRequest.java @@ -0,0 +1,24 @@ +package com.chilunyc.fumao.place.request.pointTransaction; + +import com.chilunyc.fumao.common.request.PageRequest; +import com.chilunyc.fumao.common.util.jpa.query.QueryItem; +import com.chilunyc.fumao.common.util.jpa.query.QueryType; +import com.chilunyc.fumao.common.util.jpa.query.SortItem; +import com.chilunyc.fumao.common.util.jpa.query.SortItems; +import lombok.Data; + +/** + * + */ +@SortItems({ + @SortItem(column = "createTime") +}) +@Data +public class PointTransactionPageRequest extends PageRequest { + + /** + * 查询是人工补录, 有admin的就是人工补录 + */ + @QueryItem(type = QueryType.notNull, column = "adminId") + private boolean admin; +} diff --git a/fumao-place/src/main/java/com/chilunyc/fumao/place/request/shop/ShopEditRequest.java b/fumao-place/src/main/java/com/chilunyc/fumao/place/request/shop/ShopEditRequest.java new file mode 100644 index 0000000..f68a415 --- /dev/null +++ b/fumao-place/src/main/java/com/chilunyc/fumao/place/request/shop/ShopEditRequest.java @@ -0,0 +1,75 @@ +package com.chilunyc.fumao.place.request.shop; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.validator.constraints.NotBlank; + +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; + +/** + * + */ +@ApiModel +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class ShopEditRequest { + + private Long id; + + + @ApiModelProperty(value = "名称") + private String name; + + @ApiModelProperty(value = "省份") + private String province; + + @ApiModelProperty(value = "城市") + private String city; + + @ApiModelProperty(value = "经度") + private String lat; + + @ApiModelProperty(value = "纬度") + private String lng; + + @ApiModelProperty(value = "地址") + private String address; + + @ApiModelProperty(value = "集团") + private Long companyId; + + @ApiModelProperty(value = "建筑面积") + private Double totalArea; + + @ApiModelProperty(value = "营业面积") + private Double sellingArea; + + @ApiModelProperty(value = "商铺号") + private String number; + + @ApiModelProperty(value = "楼层") + private Long floor; + + @ApiModelProperty(value = "封面") + private String cover; + + @ApiModelProperty(value = "商户") + private Long merchantId; + + @ApiModelProperty(value = "省份") + private String[] region; + + @NotBlank(message = "请输入POI") + @ApiModelProperty(value = "POI") + private String poi; + + + private Long placeId; +} diff --git a/fumao-place/src/main/java/com/chilunyc/fumao/place/request/shop/ShopPageRequest.java b/fumao-place/src/main/java/com/chilunyc/fumao/place/request/shop/ShopPageRequest.java new file mode 100644 index 0000000..aa03caa --- /dev/null +++ b/fumao-place/src/main/java/com/chilunyc/fumao/place/request/shop/ShopPageRequest.java @@ -0,0 +1,27 @@ +package com.chilunyc.fumao.place.request.shop; + +import com.chilunyc.fumao.common.request.PageRequest; +import com.chilunyc.fumao.common.util.jpa.query.QueryItem; +import com.chilunyc.fumao.common.util.jpa.query.QueryType; +import com.chilunyc.fumao.common.util.jpa.query.SortItem; +import com.chilunyc.fumao.common.util.jpa.query.SortItems; +import lombok.Data; + +/** + * + */ +@SortItems({ + @SortItem(column = "createTime") +}) +@Data +public class ShopPageRequest extends PageRequest { + + @QueryItem(type = QueryType.like) + private String number; + + @QueryItem(type = QueryType.equal) + private Long placeId; + + @QueryItem(type = QueryType.equal) + private Long merchantId; +} diff --git a/fumao-place/src/main/java/com/chilunyc/fumao/place/request/trade/TradeEditRequest.java b/fumao-place/src/main/java/com/chilunyc/fumao/place/request/trade/TradeEditRequest.java new file mode 100644 index 0000000..76509ee --- /dev/null +++ b/fumao-place/src/main/java/com/chilunyc/fumao/place/request/trade/TradeEditRequest.java @@ -0,0 +1,43 @@ +package com.chilunyc.fumao.place.request.trade; + +import org.hibernate.validator.constraints.*; +import javax.validation.constraints.*; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.*; +import java.lang.Long; +import java.lang.Long; +import java.lang.Long; +import java.lang.Double; +import java.lang.String; +import java.lang.Double; +import java.lang.String; +import java.util.Date; + +/** +* +*/ +@ApiModel +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class TradeEditRequest { + + private Long id; + + @ApiModelProperty(value = "优惠券") + private Long couponId; + + @ApiModelProperty(value = "客户") + private Long customerId; + + @ApiModelProperty(value = "金额") + private Double requireAmount; + + @ApiModelProperty(value = "优惠券名称") + private String couponName; + + @ApiModelProperty(value = "面额") + private Double amount; +} diff --git a/fumao-place/src/main/java/com/chilunyc/fumao/place/request/trade/TradePageRequest.java b/fumao-place/src/main/java/com/chilunyc/fumao/place/request/trade/TradePageRequest.java new file mode 100644 index 0000000..4102794 --- /dev/null +++ b/fumao-place/src/main/java/com/chilunyc/fumao/place/request/trade/TradePageRequest.java @@ -0,0 +1,30 @@ +package com.chilunyc.fumao.place.request.trade; + +import com.chilunyc.fumao.common.request.PageRequest; +import com.chilunyc.fumao.common.util.jpa.query.QueryItem; +import com.chilunyc.fumao.common.util.jpa.query.QueryType; +import com.chilunyc.fumao.common.util.jpa.query.SortItem; +import com.chilunyc.fumao.common.util.jpa.query.SortItems; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * + */ +@SortItems({ + @SortItem(column = "createTime") +}) +@Data +public class TradePageRequest extends PageRequest { + + @ApiModelProperty(value = "优惠券名称") + @QueryItem(type = QueryType.equal) + private String couponName; + + @ApiModelProperty(value = "状态") + @QueryItem(type = QueryType.equal) + private String status; + + @QueryItem(type = QueryType.equal) + private String customerId; +} diff --git a/fumao-place/src/main/java/com/chilunyc/fumao/place/service/CouponChannelService.java b/fumao-place/src/main/java/com/chilunyc/fumao/place/service/CouponChannelService.java new file mode 100644 index 0000000..b7461de --- /dev/null +++ b/fumao-place/src/main/java/com/chilunyc/fumao/place/service/CouponChannelService.java @@ -0,0 +1,112 @@ +package com.chilunyc.fumao.place.service; + +import com.chilunyc.fumao.common.request.IdsRequest; +import com.chilunyc.fumao.common.util.jpa.query.QueryBuilder; +import com.chilunyc.fumao.place.model.Coupon; +import com.chilunyc.fumao.place.model.CouponChannel; +import com.chilunyc.fumao.place.model.enums.CouponPutWay; +import com.chilunyc.fumao.place.repository.CouponChannelRepository; +import com.chilunyc.fumao.place.request.couponChannel.CouponChannelEditRequest; +import com.chilunyc.fumao.place.request.couponChannel.CouponChannelPageRequest; +import lombok.extern.log4j.Log4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * + */ +@Log4j +@Service +@Transactional +public class CouponChannelService { + + + @Autowired + private CouponChannelRepository couponChannelRepository; + + public Page page(CouponChannelPageRequest request) { + return couponChannelRepository.findAll(QueryBuilder.build(request), request.getPage()); + } + + + public CouponChannel find(Long id) { + CouponChannel one = couponChannelRepository.findOne(id); + return one; + } + + + public void edit(CouponChannelEditRequest request) { + request + .getCouponIdList() + .forEach(couponId -> { + switch (request.getChannel()) { + case FlashSale: + // 判断是否加过限时抢购 + if (!couponChannelRepository.existsByCouponIdAndChannel(couponId, CouponPutWay.FlashSale)) { + couponChannelRepository.save( + CouponChannel + .builder() + .placeId(request.getPlaceId()) + .channel(request.getChannel()) + .couponId(couponId) + .build()); + } + break; + case List: + // 直接更新有分类的渠道 + couponChannelRepository.updateCate(couponId, CouponPutWay.List); + break; + } + }); + } + + public void remove(IdsRequest request) { + request + .getIds() + .forEach((id) -> { + couponChannelRepository.delete(id); + }); + } + + + public void updateCoupon(Coupon coupon, List cateList) { + //1. 获取一条看看是否已经分配到列表渠道 + boolean hasList = couponChannelRepository.existsByCouponIdAndChannel(coupon.getId(), CouponPutWay.List); + + //2. 删掉分类, 重新加 + couponChannelRepository.deleteByCouponIdAndCateIsNotNull(coupon.getId()); + + //3. 批量加 + if (cateList == null) { + return; + } + + couponChannelRepository.save( + cateList + .stream() + .map(s -> + CouponChannel + .builder() + .couponId(coupon.getId()) + .placeId(coupon.getPlaceId()) + .channel(hasList ? CouponPutWay.List : null) + .cate(s) + .build() + ) + .collect(Collectors.toList()) + ); + } + + public List findByCouponId(Long id, boolean hasCate) { + if (hasCate) { + return couponChannelRepository.findByCouponIdAndCateIsNotNull(id); + } else { + return couponChannelRepository.findByCouponId(id); + } + } +} diff --git a/fumao-place/src/main/java/com/chilunyc/fumao/place/service/CouponService.java b/fumao-place/src/main/java/com/chilunyc/fumao/place/service/CouponService.java new file mode 100644 index 0000000..1be3b8a --- /dev/null +++ b/fumao-place/src/main/java/com/chilunyc/fumao/place/service/CouponService.java @@ -0,0 +1,134 @@ +package com.chilunyc.fumao.place.service; + +import com.chilunyc.fumao.common.context.RequestHolder; +import com.chilunyc.fumao.common.exception.SystemException; +import com.chilunyc.fumao.common.log.model.EventTarget; +import com.chilunyc.fumao.common.log.model.EventType; +import com.chilunyc.fumao.common.log.service.EventService; +import com.chilunyc.fumao.common.request.IdsRequest; +import com.chilunyc.fumao.common.util.BeanHelper; +import com.chilunyc.fumao.common.util.jpa.query.QueryBuilder; +import com.chilunyc.fumao.place.model.Coupon; +import com.chilunyc.fumao.place.model.enums.CouponStatus; +import com.chilunyc.fumao.place.repository.CouponRepository; +import com.chilunyc.fumao.place.request.coupon.CouponEditRequest; +import com.chilunyc.fumao.place.request.coupon.CouponPageRequest; +import lombok.extern.log4j.Log4j; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Arrays; +import java.util.Date; +import java.util.List; + +/** + * + */ +@Log4j +@Service +@Transactional +public class CouponService { + + + @Autowired + private CouponRepository couponRepository; + + @Autowired + private EventService eventService; + + @Autowired + private CouponChannelService couponChannelService; + + public Page page(CouponPageRequest request) { + return couponRepository.findAll(QueryBuilder.build(request), request.getPage()); + } + + + public Coupon find(Long id) { + Coupon one = couponRepository.findOne(id); + return one; + } + + + public List cates() { + return Arrays.asList("餐饮", "超市", "娱乐", "服装", "亲子", "鞋包", "其他"); + } + + public Coupon edit(CouponEditRequest request) { + Coupon coupon = new Coupon(); + if (request.getId() != null) { + coupon = couponRepository.findOne(request.getId()); + } + BeanHelper.copyProperties(coupon, request); + Date now = new Date(); + + boolean isDraft = request.isDraft(); + + // 发放日期 + Date[] open = request.getOpen(); + coupon.setOpenFrom(open[0]); + coupon.setOpenEnd(open[1]); + // 草稿 + if (isDraft) { + coupon.setStatus(CouponStatus.Draft); + } + // 根据发放日期计算状态 + else { + // 小于发放日期 + if (now.before(open[0])) { + coupon.setStatus(CouponStatus.NotOpen); + } + // 在发放日期内 + else if (now.after(open[0]) && now.before(open[1])) { + coupon.setStatus(CouponStatus.Open); + } + // 发放日期外, 无效了 + else if (now.after(open[1])) { + coupon.setStatus(CouponStatus.Invalid); + } + } + + // 客户拿到优惠券的有效期 + if (StringUtils.equalsIgnoreCase(request.getValidType(), "0")) { + Date[] valid = request.getValid(); + if (valid != null && valid.length == 2) { + coupon.setValidFrom(valid[0]); + coupon.setValidEnd(valid[1]); + coupon.setValidDay(null); + } else { + throw new SystemException("000003", "请选择有效期"); + } + } else { + if (request.getValidDay() == null) { + throw new SystemException("000003", "请输入有效日"); + } + coupon.setValidDay(request.getValidDay()); + } + + // 使用库存 + if (coupon.getRemain() == null) { + coupon.setRemain(0L); + } + + // 更新优惠券分类 + couponChannelService.updateCoupon(coupon, request.getCateList()); + + + coupon = couponRepository.save(coupon); + eventService.add(RequestHolder.get(), EventTarget.Place, EventType.编辑优惠券, coupon.getId(), request); + return coupon; + } + + public void remove(IdsRequest request) { + request + .getIds() + .forEach((id) -> { + couponRepository.delete(id); + }); + eventService.add(RequestHolder.get(), EventTarget.Place, EventType.删除优惠券, null, request.getIds()); + } + +} diff --git a/fumao-place/src/main/java/com/chilunyc/fumao/place/service/CustomerService.java b/fumao-place/src/main/java/com/chilunyc/fumao/place/service/CustomerService.java new file mode 100644 index 0000000..30c2dba --- /dev/null +++ b/fumao-place/src/main/java/com/chilunyc/fumao/place/service/CustomerService.java @@ -0,0 +1,76 @@ +package com.chilunyc.fumao.place.service; + +import com.chilunyc.fumao.common.context.RequestHolder; +import com.chilunyc.fumao.common.log.model.EventTarget; +import com.chilunyc.fumao.common.log.model.EventType; +import com.chilunyc.fumao.common.log.service.EventService; +import com.chilunyc.fumao.common.request.IdsRequest; +import com.chilunyc.fumao.common.util.BeanHelper; +import com.chilunyc.fumao.common.util.jpa.query.QueryBuilder; +import com.chilunyc.fumao.place.model.Customer; +import com.chilunyc.fumao.place.repository.CustomerRepository; +import com.chilunyc.fumao.place.request.customer.CustomerEditRequest; +import com.chilunyc.fumao.place.request.customer.CustomerPageRequest; +import lombok.extern.log4j.Log4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +/** + * + */ +@Log4j +@Service +@Transactional +public class CustomerService { + + + @Autowired + private CustomerRepository customerRepository; + + @Autowired + private EventService eventService; + + @Autowired + private TagService tagService; + + public Page page(CustomerPageRequest request) { + return customerRepository.findAll(QueryBuilder.build(request), request.getPage()); + } + + + public Customer find(Long id) { + Customer one = customerRepository.findOne(id); + return one; + } + + + public Customer edit(CustomerEditRequest request) { + Customer customer = new Customer(); + if (request.getId() != null) { + customer = customerRepository.findOne(request.getId()); + } + BeanHelper.copyProperties(customer, request); + customer = customerRepository.save(customer); + eventService.add(RequestHolder.get(), EventTarget.Place, EventType.编辑顾客, customer.getId(), request); + if (request.getTagList() != null){ + tagService.assign(customer.getId(), request.getTagList()); + } + return customer; + } + + public void remove(IdsRequest request) { + request + .getIds() + .forEach((id) -> { + customerRepository.delete(id); + }); + eventService.add(RequestHolder.get(), EventTarget.Place, EventType.删除顾客, null, request.getIds()); + } + + + public Customer findByMobile(String mobile) { + return customerRepository.findByMobile(mobile); + } +} diff --git a/fumao-place/src/main/java/com/chilunyc/fumao/place/service/MerchantAdminService.java b/fumao-place/src/main/java/com/chilunyc/fumao/place/service/MerchantAdminService.java new file mode 100644 index 0000000..37a6294 --- /dev/null +++ b/fumao-place/src/main/java/com/chilunyc/fumao/place/service/MerchantAdminService.java @@ -0,0 +1,91 @@ +package com.chilunyc.fumao.place.service; + +import com.chilunyc.fumao.common.context.RequestHolder; +import com.chilunyc.fumao.common.exception.SystemException; +import com.chilunyc.fumao.common.log.model.EventTarget; +import com.chilunyc.fumao.common.log.model.EventType; +import com.chilunyc.fumao.common.log.service.EventService; +import com.chilunyc.fumao.common.request.IdsRequest; +import com.chilunyc.fumao.common.util.BeanHelper; +import com.chilunyc.fumao.common.util.jpa.query.QueryBuilder; +import com.chilunyc.fumao.common.util.security.SaltHelper; +import com.chilunyc.fumao.place.model.MerchantAdmin; +import com.chilunyc.fumao.place.repository.MerchantAdminRepository; +import com.chilunyc.fumao.place.request.merchantAdmin.MerchantAdminEditRequest; +import com.chilunyc.fumao.place.request.merchantAdmin.MerchantAdminPageRequest; +import lombok.extern.log4j.Log4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * + */ +@Log4j +@Service +@Transactional +public class MerchantAdminService { + + + @Autowired + private MerchantAdminRepository merchantAdminRepository; + + @Autowired + private EventService eventService; + + public Page page(MerchantAdminPageRequest request) { + return merchantAdminRepository.findAll(QueryBuilder.build(request), request.getPage()); + } + + + public MerchantAdmin find(Long id) { + MerchantAdmin one = merchantAdminRepository.findOne(id); + return one; + } + + + public MerchantAdmin edit(MerchantAdminEditRequest request) { + MerchantAdmin merchantAdmin = new MerchantAdmin(); + if (request.getId() != null) { + merchantAdmin = merchantAdminRepository.findOne(request.getId()); + merchantAdmin.setName(request.getName()); + } else { + if (merchantAdminRepository.existsByMobile(request.getMobile())) { + throw new SystemException("100000"); + } + BeanHelper.copyProperties(merchantAdmin, request); + String salt = SaltHelper.salt(); + merchantAdmin.setOriginPassword(request.getPassword()); + merchantAdmin.setSalt(salt); + merchantAdmin.setPassword(SaltHelper.exec(request.getPassword(), salt)); + } + merchantAdmin = merchantAdminRepository.save(merchantAdmin); + eventService.add(RequestHolder.get(), EventTarget.Place, EventType.编辑商户管理员, merchantAdmin.getId(), request); + return merchantAdmin; + } + + public void remove(IdsRequest request) { + request + .getIds() + .forEach((id) -> { + merchantAdminRepository.delete(id); + }); + eventService.add(RequestHolder.get(), EventTarget.Place, EventType.删除商户管理员, null, request.getIds()); + } + + + public List all(MerchantAdminPageRequest request) { + return merchantAdminRepository.findAll(QueryBuilder.build(request)); + } + + public void resetPassword(Long id) { + MerchantAdmin one = merchantAdminRepository.findOne(id); + if (one != null) { + one.setPassword(SaltHelper.exec(one.getOriginPassword(), one.getSalt())); + merchantAdminRepository.save(one); + } + } +} diff --git a/fumao-place/src/main/java/com/chilunyc/fumao/place/service/MerchantService.java b/fumao-place/src/main/java/com/chilunyc/fumao/place/service/MerchantService.java new file mode 100644 index 0000000..50efc6e --- /dev/null +++ b/fumao-place/src/main/java/com/chilunyc/fumao/place/service/MerchantService.java @@ -0,0 +1,64 @@ +package com.chilunyc.fumao.place.service; + +import com.chilunyc.fumao.common.context.RequestHolder; +import com.chilunyc.fumao.common.log.model.EventTarget; +import com.chilunyc.fumao.common.log.model.EventType; +import com.chilunyc.fumao.common.log.service.EventService; +import com.chilunyc.fumao.common.request.IdsRequest; +import com.chilunyc.fumao.common.util.BeanHelper; +import com.chilunyc.fumao.common.util.jpa.query.QueryBuilder; +import com.chilunyc.fumao.place.model.Merchant; +import com.chilunyc.fumao.place.repository.MerchantRepository; +import com.chilunyc.fumao.place.request.merchant.MerchantEditRequest; +import com.chilunyc.fumao.place.request.merchant.MerchantPageRequest; +import lombok.extern.log4j.Log4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +/** + * + */ +@Log4j +@Service +@Transactional +public class MerchantService { + + + @Autowired + private MerchantRepository merchantRepository; + + @Autowired + private EventService eventService; + + public Page page(MerchantPageRequest request) { + return merchantRepository.findAll(QueryBuilder.build(request), request.getPage()); + } + + + public Merchant find(Long id) { + Merchant one = merchantRepository.findOne(id); + return one; + } + + + public Merchant edit(MerchantEditRequest request) { + Merchant merchant = new Merchant(); + BeanHelper.copyProperties(merchant, request); + merchant = merchantRepository.save(merchant); + eventService.add(RequestHolder.get(), EventTarget.Place, EventType.编辑商户, merchant.getId(), request); + return merchant; + } + + public void remove(IdsRequest request) { + request + .getIds() + .forEach((id) -> { + merchantRepository.delete(id); + }); + eventService.add(RequestHolder.get(), EventTarget.Place, EventType.删除商户, null, request.getIds()); + } + + +} diff --git a/fumao-place/src/main/java/com/chilunyc/fumao/place/service/PlaceSettingService.java b/fumao-place/src/main/java/com/chilunyc/fumao/place/service/PlaceSettingService.java new file mode 100644 index 0000000..988f641 --- /dev/null +++ b/fumao-place/src/main/java/com/chilunyc/fumao/place/service/PlaceSettingService.java @@ -0,0 +1,53 @@ +package com.chilunyc.fumao.place.service; + +import com.alibaba.fastjson.JSON; +import com.chilunyc.fumao.common.exception.SystemException; +import com.chilunyc.fumao.common.util.BeanHelper; +import com.chilunyc.fumao.place.model.PlaceSetting; +import com.chilunyc.fumao.place.model.enums.PlaceSettingType; +import com.chilunyc.fumao.place.repository.PlaceSettingRepository; +import com.chilunyc.fumao.place.request.placeSetting.PlaceSettingEditRequest; +import lombok.extern.log4j.Log4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +/** + * + */ +@Log4j +@Service +@Transactional +public class PlaceSettingService { + + + @Autowired + private PlaceSettingRepository placeSettingRepository; + + + public PlaceSetting get(Long placeId, PlaceSettingType type) { + PlaceSetting placeSetting = placeSettingRepository.findByPlaceIdAndType(placeId, type); + if (placeSetting != null) { + return placeSetting; + } + return null; + } + + + public void set(PlaceSettingEditRequest request) { + PlaceSetting placeSetting = get(request.getPlaceId(), request.getType()); + if (placeSetting == null) { + placeSetting = new PlaceSetting(); + } + BeanHelper.copyProperties(placeSetting, request); + placeSettingRepository.save(placeSetting); + } + + public T get(Long placeId, PlaceSettingType type, Class tClass) { + PlaceSetting placeSetting = get(placeId, type); + if (placeSetting != null) { + return JSON.parseObject(placeSetting.getValue(), tClass); + } + throw new SystemException("100002", type.getMsg()); + } +} diff --git a/fumao-place/src/main/java/com/chilunyc/fumao/place/service/PointTransactionService.java b/fumao-place/src/main/java/com/chilunyc/fumao/place/service/PointTransactionService.java new file mode 100644 index 0000000..500c102 --- /dev/null +++ b/fumao-place/src/main/java/com/chilunyc/fumao/place/service/PointTransactionService.java @@ -0,0 +1,95 @@ +package com.chilunyc.fumao.place.service; + +import com.chilunyc.fumao.common.context.RequestHolder; +import com.chilunyc.fumao.common.log.model.EventTarget; +import com.chilunyc.fumao.common.log.model.EventType; +import com.chilunyc.fumao.common.log.service.EventService; +import com.chilunyc.fumao.common.request.IdsRequest; +import com.chilunyc.fumao.common.util.jpa.query.QueryBuilder; +import com.chilunyc.fumao.place.model.Customer; +import com.chilunyc.fumao.place.model.PointTransaction; +import com.chilunyc.fumao.place.model.enums.PlaceSettingType; +import com.chilunyc.fumao.place.model.setting.ScoreStrategySetting; +import com.chilunyc.fumao.place.repository.CustomerRepository; +import com.chilunyc.fumao.place.repository.PointTransactionRepository; +import com.chilunyc.fumao.place.request.pointTransaction.PointTransactionPaddedRequest; +import com.chilunyc.fumao.place.request.pointTransaction.PointTransactionPageRequest; +import lombok.extern.log4j.Log4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +/** + * + */ +@Log4j +@Service +@Transactional +public class PointTransactionService { + + + @Autowired + private PointTransactionRepository pointTransactionRepository; + + @Autowired + private CustomerRepository customerRepository; + + @Autowired + private EventService eventService; + + @Autowired + private CustomerService customerService; + + @Autowired + private PlaceSettingService placeSettingService; + + public Page page(PointTransactionPageRequest request) { + return pointTransactionRepository.findAll(QueryBuilder.build(request), request.getPage()); + } + + + public PointTransaction find(Long id) { + PointTransaction one = pointTransactionRepository.findOne(id); + return one; + } + + + public void remove(IdsRequest request) { + request + .getIds() + .forEach((id) -> { + pointTransactionRepository.delete(id); + }); + eventService.add(RequestHolder.get(), EventTarget.Place, EventType.删除积分, null, request.getIds()); + } + + + public void padded(PointTransactionPaddedRequest request) { + // + ScoreStrategySetting strategySetting = placeSettingService.get(request.getPlaceId(), PlaceSettingType.scoreStrategy, ScoreStrategySetting.class); + Integer score = (int) (request.getAmount() / strategySetting.getAmount() * strategySetting.getScore()); + Customer customer = customerService.find(request.getCustomerId()); + Integer origin = customer.getScore(); + pointTransactionRepository + .save( + PointTransaction + .builder() + .adminId(request.getAdminId()) + .placeId(request.getPlaceId()) + .customerId(request.getCustomerId()) + .customerMobile(customer.getMobile()) + .origin(origin) + .oper(score) + .dest(origin + score) + .tradeId(request.getTradeId()) + .build() + ); + + // + customer.setScore(score + origin); + customerRepository.save(customer); + + eventService.add(RequestHolder.get(), EventTarget.Place, EventType.积分补录, request.getAdminId(), request); + } +} diff --git a/fumao-place/src/main/java/com/chilunyc/fumao/place/service/ShopService.java b/fumao-place/src/main/java/com/chilunyc/fumao/place/service/ShopService.java new file mode 100644 index 0000000..288c7c9 --- /dev/null +++ b/fumao-place/src/main/java/com/chilunyc/fumao/place/service/ShopService.java @@ -0,0 +1,96 @@ +package com.chilunyc.fumao.place.service; + +import com.chilunyc.fumao.common.context.RequestHolder; +import com.chilunyc.fumao.common.log.model.EventTarget; +import com.chilunyc.fumao.common.log.model.EventType; +import com.chilunyc.fumao.common.log.service.EventService; +import com.chilunyc.fumao.common.request.AssignsRequest; +import com.chilunyc.fumao.common.request.IdsRequest; +import com.chilunyc.fumao.common.util.BeanHelper; +import com.chilunyc.fumao.common.util.jpa.query.QueryBuilder; +import com.chilunyc.fumao.place.model.Shop; +import com.chilunyc.fumao.place.repository.ShopRepository; +import com.chilunyc.fumao.place.request.shop.ShopEditRequest; +import com.chilunyc.fumao.place.request.shop.ShopPageRequest; +import lombok.extern.log4j.Log4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * + */ +@Log4j +@Service +@Transactional +public class ShopService { + + + @Autowired + private ShopRepository shopRepository; + + @Autowired + private EventService eventService; + + public Page page(ShopPageRequest request) { + return shopRepository.findAll(QueryBuilder.build(request), request.getPage()); + } + + + public Shop find(Long id) { + Shop one = shopRepository.findOne(id); + return one; + } + + + public Shop edit(ShopEditRequest request) { + Shop shop = new Shop(); + if (request.getId() != null) { + shop = shopRepository.findOne(request.getId()); + } + BeanHelper.copyProperties(shop, request); + String[] region = request.getRegion(); + if (region != null && region.length == 3) { + shop.setProvince(region[0]); + shop.setCity(region[1]); + shop.setArea(region[2]); + } + shop = shopRepository.save(shop); + eventService.add(RequestHolder.get(), EventTarget.Place, EventType.编辑商铺, shop.getId(), request); + return shop; + } + + public void remove(IdsRequest request) { + request + .getIds() + .forEach((id) -> { + shopRepository.delete(id); + }); + eventService.add(RequestHolder.get(), EventTarget.Place, EventType.删除商铺, null, request.getIds()); + } + + + public List all(ShopPageRequest request) { + if (request == null) { + request = new ShopPageRequest(); + } + List all = shopRepository.findAll(QueryBuilder.build(request)); + return all; + } + + + public void assign(AssignsRequest request) { + shopRepository.updateMerchant(request.getIds(), request.getTargetId()); + } + + public void unbindMerchant(Long shopId) { + Shop shop = shopRepository.findOne(shopId); + if (shop != null) { + shop.setMerchantId(null); + shopRepository.save(shop); + } + } +} diff --git a/fumao-place/src/main/java/com/chilunyc/fumao/place/service/TagService.java b/fumao-place/src/main/java/com/chilunyc/fumao/place/service/TagService.java new file mode 100644 index 0000000..7d2845b --- /dev/null +++ b/fumao-place/src/main/java/com/chilunyc/fumao/place/service/TagService.java @@ -0,0 +1,35 @@ +package com.chilunyc.fumao.place.service; + +import com.chilunyc.fumao.place.model.Tag; +import com.chilunyc.fumao.place.repository.TagRepository; +import lombok.extern.log4j.Log4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * + */ +@Log4j +@Service +@Transactional +public class TagService { + + + @Autowired + private TagRepository tagRepository; + + + public void assign(Long targetId, List tagList) { + tagRepository.deleteByTargetId(targetId); + tagRepository.save( + tagList + .stream() + .peek(tag -> tag.setTargetId(targetId)) + .collect(Collectors.toList()) + ); + } +} diff --git a/fumao-place/src/main/java/com/chilunyc/fumao/place/service/TradeService.java b/fumao-place/src/main/java/com/chilunyc/fumao/place/service/TradeService.java new file mode 100644 index 0000000..bf213d6 --- /dev/null +++ b/fumao-place/src/main/java/com/chilunyc/fumao/place/service/TradeService.java @@ -0,0 +1,62 @@ +package com.chilunyc.fumao.place.service; + +import com.chilunyc.fumao.common.context.RequestHolder; +import com.chilunyc.fumao.common.log.model.EventTarget; +import com.chilunyc.fumao.common.log.model.EventType; +import com.chilunyc.fumao.common.log.service.EventService; +import com.chilunyc.fumao.common.request.IdsRequest; +import com.chilunyc.fumao.common.util.jpa.query.QueryBuilder; +import com.chilunyc.fumao.place.model.Trade; +import com.chilunyc.fumao.place.repository.TradeRepository; +import com.chilunyc.fumao.place.request.trade.TradeEditRequest; +import com.chilunyc.fumao.place.request.trade.TradePageRequest; +import lombok.extern.log4j.Log4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +/** + * + */ +@Log4j +@Service +@Transactional +public class TradeService { + + + @Autowired + private TradeRepository tradeRepository; + + @Autowired + private EventService eventService; + + public Page page(TradePageRequest request) { + return tradeRepository.findAll(QueryBuilder.build(request), request.getPage()); + } + + + public Trade find(Long id) { + Trade one = tradeRepository.findOne(id); + return one; + } + + + public Trade edit(TradeEditRequest request) { + Trade trade = new Trade(); + trade = tradeRepository.save(trade); + eventService.add(RequestHolder.get(), EventTarget.Place, EventType.编辑订单, trade.getId(), request); + return trade; + } + + public void remove(IdsRequest request) { + request + .getIds() + .forEach((id) -> { + tradeRepository.delete(id); + }); + eventService.add(RequestHolder.get(), EventTarget.Place, EventType.删除订单, null, request.getIds()); + } + + +} diff --git a/fumao-place/src/main/resources/com/chilunyc/fumao/bi/repository/.gitkeep b/fumao-place/src/main/resources/com/chilunyc/fumao/bi/repository/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/fumao-service/pom.xml b/fumao-service/pom.xml index bb76861..843ebbb 100644 --- a/fumao-service/pom.xml +++ b/fumao-service/pom.xml @@ -4,7 +4,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> fumao - com.aki + com.chilunyc 0.0.1-SNAPSHOT 4.0.0 @@ -14,19 +14,34 @@ - com.aki + com.chilunyc fumao-common 0.0.1-SNAPSHOT - com.aki + com.chilunyc fumao-system ${project.version} - com.aki + com.chilunyc fumao-company ${project.version} + + + com.chilunyc + fumao-place + ${project.version} + + + com.chilunyc + fumao-bi + ${project.version} + + + com.chilunyc + fumao-job + ${project.version} \ No newline at end of file diff --git a/fumao-service/src/main/java/com/chilunyc/fumao/service/service/CustomerDashboardService.java b/fumao-service/src/main/java/com/chilunyc/fumao/service/service/CustomerDashboardService.java new file mode 100644 index 0000000..64e46f0 --- /dev/null +++ b/fumao-service/src/main/java/com/chilunyc/fumao/service/service/CustomerDashboardService.java @@ -0,0 +1,46 @@ +package com.chilunyc.fumao.service.service; + +import com.chilunyc.fumao.common.util.DateHelper; +import com.chilunyc.fumao.common.util.MapBuilder; +import com.chilunyc.fumao.place.repository.CustomerRepository; +import com.chilunyc.fumao.place.repository.TradeRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Map; + +/** + * on 2018/8/1. + */ +@Service +public class CustomerDashboardService { + + @Autowired + CustomerRepository customerRepository; + + @Autowired + TradeRepository tradeRepository; + + + public Map add() { + Long all = customerRepository.count(); + Long today = customerRepository.countByCreateTimeAfter(DateHelper.toDate(0)); + Long week = customerRepository.countByCreateTimeAfter(DateHelper.toDate(-7)); + return MapBuilder + .builder() + .put("today", today) + .put("all", all) + .put("week", week) + .getMap(); + } + + public Map money() { + Double today = tradeRepository.sumAfterCreateTime(DateHelper.toDate(0)); + Double month = tradeRepository.sumAfterCreateTime(DateHelper.toDate(-30)); + return MapBuilder + .builder() + .put("today", today == null ? 0 : today) + .put("month", month == null ? 0 : month) + .getMap(); + } +} diff --git a/fumao-service/src/main/resources/com/chilunyc/fumao/bi/repository/.gitkeep b/fumao-service/src/main/resources/com/chilunyc/fumao/bi/repository/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/fumao-system/pom.xml b/fumao-system/pom.xml index f58dbcf..491317a 100644 --- a/fumao-system/pom.xml +++ b/fumao-system/pom.xml @@ -4,7 +4,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> fumao - com.aki + com.chilunyc 0.0.1-SNAPSHOT 4.0.0 @@ -14,7 +14,7 @@ - com.aki + com.chilunyc fumao-common 0.0.1-SNAPSHOT diff --git a/fumao-system/src/main/java/com/chilunyc/fumao/system/service/SystemAdminService.java b/fumao-system/src/main/java/com/chilunyc/fumao/system/service/SystemAdminService.java index bf98a55..0ba9076 100644 --- a/fumao-system/src/main/java/com/chilunyc/fumao/system/service/SystemAdminService.java +++ b/fumao-system/src/main/java/com/chilunyc/fumao/system/service/SystemAdminService.java @@ -73,7 +73,7 @@ public class SystemAdminService implements InitializingBean { SystemAdmin .builder() .mobile("13888888888") - .name("Tkk") + .name("admin") .salt(salt) .password(SaltHelper.exec("!admin123", salt)) .build() diff --git a/pom.xml b/pom.xml index f403325..42445c3 100644 --- a/pom.xml +++ b/pom.xml @@ -3,15 +3,18 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - com.aki + com.chilunyc fumao 0.0.1-SNAPSHOT fumao-app fumao-common fumao-service - fumao-system - fumao-company + fumao-system + fumao-company + fumao-place + fumao-bi + fumao-job pom @@ -68,9 +71,13 @@ jackson-databind 2.6.7 - - - + + com.amazonaws + aws-java-sdk-bom + 1.11.376 + pom + import +