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