Эх сурвалжийг харах

Merge branch 'dev' into 'mp-server-test'

Dev

See merge request quanshu/mp-server!17
zhong chunping 3 жил өмнө
parent
commit
a61ed296fb
45 өөрчлөгдсөн 1321 нэмэгдсэн , 213 устгасан
  1. 3 3
      mp-admin/src/main/java/com/qs/mp/web/controller/api/callback/PayCallBackController.java
  2. 218 5
      mp-admin/src/main/java/com/qs/mp/web/controller/api/channel/ChannelController.java
  3. 1 1
      mp-admin/src/main/java/com/qs/mp/web/controller/api/channel/mall/ChannelAddrController.java
  4. 2 2
      mp-admin/src/main/java/com/qs/mp/web/controller/api/channel/mall/ChannelCartController.java
  5. 198 0
      mp-admin/src/main/java/com/qs/mp/web/controller/api/channel/mall/ChannelOrderController.java
  6. 1 1
      mp-admin/src/main/java/com/qs/mp/web/controller/api/channel/mall/ChannelTicketController.java
  7. 3 8
      mp-admin/src/main/java/com/qs/mp/web/controller/common/FileUploadController.java
  8. 2 5
      mp-admin/src/main/resources/application.yml
  9. 46 0
      mp-admin/src/test/java/com/qs/mp/service/ChannelServiceTest.java
  10. 4 3
      mp-common/src/main/java/com/qs/mp/common/enums/BizTypeEnum.java
  11. 3 0
      mp-common/src/main/java/com/qs/mp/common/enums/ChannelCertifyStatusEnum.java
  12. 32 0
      mp-common/src/main/java/com/qs/mp/common/enums/ChannelOrderStatusEnum.java
  13. 3 0
      mp-common/src/main/java/com/qs/mp/common/enums/ChannelVerifyStatusEnum.java
  14. 3 0
      mp-common/src/main/java/com/qs/mp/common/enums/TicketTypeEnum.java
  15. 52 0
      mp-common/src/main/java/com/qs/mp/common/exception/DataOperationException.java
  16. 18 6
      mp-service/src/main/java/com/qs/mp/admin/domain/TicketBox.java
  17. 2 2
      mp-service/src/main/java/com/qs/mp/channel/domain/ChannelCommission.java
  18. 5 1
      mp-service/src/main/java/com/qs/mp/channel/domain/ChannelOrder.java
  19. 24 0
      mp-service/src/main/java/com/qs/mp/channel/domain/param/ChannelOrderParam.java
  20. 20 0
      mp-service/src/main/java/com/qs/mp/channel/domain/param/ChannelOrderPayParam.java
  21. 66 0
      mp-service/src/main/java/com/qs/mp/channel/domain/param/VerifyParam.java
  22. 42 0
      mp-service/src/main/java/com/qs/mp/channel/domain/vo/ChannelOrderSettleVO.java
  23. 15 0
      mp-service/src/main/java/com/qs/mp/channel/domain/vo/ChannelOrderVO.java
  24. 10 0
      mp-service/src/main/java/com/qs/mp/channel/mapper/ChannelCommissionMapper.java
  25. 7 0
      mp-service/src/main/java/com/qs/mp/channel/mapper/ChannelUserRelMapper.java
  26. 6 0
      mp-service/src/main/java/com/qs/mp/channel/service/IChannelCommissionService.java
  27. 17 0
      mp-service/src/main/java/com/qs/mp/channel/service/IChannelOrderService.java
  28. 34 1
      mp-service/src/main/java/com/qs/mp/channel/service/IChannelService.java
  29. 6 0
      mp-service/src/main/java/com/qs/mp/channel/service/IChannelUserRelService.java
  30. 4 0
      mp-service/src/main/java/com/qs/mp/channel/service/impl/ChannelCommissionServiceImpl.java
  31. 117 0
      mp-service/src/main/java/com/qs/mp/channel/service/impl/ChannelOrderServiceImpl.java
  32. 136 4
      mp-service/src/main/java/com/qs/mp/channel/service/impl/ChannelServiceImpl.java
  33. 4 0
      mp-service/src/main/java/com/qs/mp/channel/service/impl/ChannelUserRelServiceImpl.java
  34. 24 29
      mp-service/src/main/java/com/qs/mp/pay/domain/PayOrder.java
  35. 3 3
      mp-service/src/main/java/com/qs/mp/pay/mapper/PayOrderMapper.java
  36. 4 4
      mp-service/src/main/java/com/qs/mp/pay/service/IPayOrderService.java
  37. 15 8
      mp-service/src/main/java/com/qs/mp/pay/service/IWalletService.java
  38. 4 79
      mp-service/src/main/java/com/qs/mp/pay/service/impl/PayOrderServiceImpl.java
  39. 87 21
      mp-service/src/main/java/com/qs/mp/pay/service/impl/WalletServiceImpl.java
  40. 0 1
      mp-service/src/main/java/com/qs/mp/system/service/id/BizIdGenerator.java
  41. 6 4
      mp-service/src/main/resources/mapper/admin/TicketBoxMapper.xml
  42. 14 2
      mp-service/src/main/resources/mapper/channel/ChannelCommissionMapper.xml
  43. 48 8
      mp-service/src/main/resources/mapper/channel/ChannelMapper.xml
  44. 4 3
      mp-service/src/main/resources/mapper/channel/ChannelUserRelMapper.xml
  45. 8 9
      mp-service/src/main/resources/mapper/pay/PayOrderMapper.xml

+ 3 - 3
mp-admin/src/main/java/com/qs/mp/web/controller/api/callback/PayCallBackController.java

@@ -65,7 +65,7 @@ public class PayCallBackController {
 
     //回调金额与订单金额一致性校验
     PayOrder order = payOrderService.getById(shopOrderNo);
-    if(order.getTransactionAmount() != payMoney){
+    if(order.getTransAmt() != payMoney){
       //Todo 告警
       logger.error("回调金额与订单金额不一致");
       responseWrite(response,"error");
@@ -76,10 +76,10 @@ public class PayCallBackController {
     payOrder.setOrderNo(orderNo);
     payOrder.setCompleteDate(completeDate);
     payOrder.setChannelNo(channelNo);
-    payOrder.setOrderstatus(orderStatus);
+    payOrder.setStatus(orderStatus);
     // 订单支付状态单独保存
     LambdaUpdateWrapper<PayOrder> updateWrapper = new LambdaUpdateWrapper<>();
-    updateWrapper.eq(PayOrder::getOrderstatus,2);
+    updateWrapper.eq(PayOrder::getStatus,2);
     updateWrapper.eq(PayOrder::getOrderId,shopOrderNo);
     boolean ret = payOrderService.update(payOrder,updateWrapper);
     if(ret){

+ 218 - 5
mp-admin/src/main/java/com/qs/mp/web/controller/api/channel/ChannelController.java

@@ -6,6 +6,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.qs.mp.channel.domain.Channel;
 import com.qs.mp.channel.domain.ChannelAddr;
 import com.qs.mp.channel.domain.param.ChannelParam;
+import com.qs.mp.channel.domain.param.VerifyParam;
+import com.qs.mp.channel.domain.vo.ChannelOperDataVO;
 import com.qs.mp.channel.domain.vo.ChannelVO;
 import com.qs.mp.channel.service.IChannelService;
 import com.qs.mp.common.core.domain.AjaxResult;
@@ -54,12 +56,12 @@ public class ChannelController extends BaseApiController {
 	private MapperFacade mapperFacade;
 
 	/**
-	 * 子渠道列表查询
+	 * 获取我的下级渠道列表信息,支持翻页
 	 *
 	 * @return
 	 */
 	@PostMapping("subchannel/list")
-	public TableDataInfo list(@RequestBody Channel channel) {
+	public TableDataInfo listChannel(@RequestBody Channel channel) {
 		Long channelId = SecurityUtils.getLoginUser().getChannelId();
 		List<ChannelVO> list = new ArrayList<ChannelVO>();
 		if(null != channelId) {
@@ -78,7 +80,7 @@ public class ChannelController extends BaseApiController {
 	 * @return
 	 */
 	@PostMapping(value = "subchannel/detail")
-	public AjaxResult getInfo(@RequestBody Channel channel) {
+	public AjaxResult getChannelDetail(@RequestBody Channel channel) {
 		if (null == channel || null == channel.getChannelId()) {
 			return error(ErrorCodeEnum.ERROR_CODE_1001);
 		}
@@ -86,6 +88,9 @@ public class ChannelController extends BaseApiController {
 		ChannelVO channelVO = new ChannelVO();
 		Channel queryChannel = channelService.getById(channelId);
 	    BeanUtils.copyProperties(queryChannel, channelVO);
+	    // 查询今日的销售额、佣金收入、新增用户数
+	    ChannelOperDataVO channelOperDataVO = channelService.getChannelOperData(channelVO.getChannelNo(), 1);
+	    channelVO.setOperData(channelOperDataVO);
 		return AjaxResult.success(channelVO);
 	}
 
@@ -96,7 +101,7 @@ public class ChannelController extends BaseApiController {
 	 */
 	@ApiOperation(value = "新增子渠道信息", notes = "渠道端新增子渠道")
 	@PostMapping("subchannel/create")
-	public AjaxResult addChannel(@Validated @RequestBody ChannelParam channelParam) {
+	public AjaxResult channelCreate(@Validated @RequestBody ChannelParam channelParam) {
 		if (channelParam.getChannelId() != null && channelParam.getChannelId() != 0) {
 			return AjaxResult.error("该渠道已存在");
 		}
@@ -119,7 +124,7 @@ public class ChannelController extends BaseApiController {
 	 */
 	@ApiOperation(value = "编辑子渠道信息", notes = "渠道端编辑子渠道")
 	@PostMapping("subchannel/update")
-	public AjaxResult editChannel(@Validated @RequestBody ChannelParam channelParam) {
+	public AjaxResult channelUpdate(@Validated @RequestBody ChannelParam channelParam) {
 
 		if (null == channelParam || null == channelParam.getChannelId()) {
 			return error(ErrorCodeEnum.ERROR_CODE_1001);
@@ -132,5 +137,213 @@ public class ChannelController extends BaseApiController {
 		}
 		return AjaxResult.success("编辑子渠道信息'" + channel.getName() + "'成功");
 	}
+	
+	
+	/**
+	 *获取当前用户渠道或者某个子渠道的经营数据
+	 *
+	 * @param
+	 * @return
+	 */
+	@PostMapping(value = "subchannel/operdata/query")
+	public AjaxResult getOperData(@RequestBody JSONObject jsonObject) {
+		if (null == jsonObject) {
+			return error(ErrorCodeEnum.ERROR_CODE_1001);
+		}
+		Long channelId = SecurityUtils.getLoginUser().getChannelId();
+		int days = jsonObject.getIntValue("days");;
+		if(StringUtils.isNotBlank(jsonObject.getString("channelId"))) {
+			channelId = jsonObject.getLong("channelId");
+		}
+		days = days > 0?days:1;
+		days = days > 0?days:1;
+		Channel channel = channelService.getById(channelId);
+	    // 查询今日的销售额、佣金收入、新增用户数
+	    ChannelOperDataVO channelOperDataVO = channelService.getChannelOperData(channel.getChannelNo(), 1);
+		return AjaxResult.success(channelOperDataVO);
+	}
+	
+	/**
+	 * 获取子渠道的经营数据列表
+	 *
+	 * @param
+	 * @return
+	 */
+	@PostMapping(value = "subchannel/operdata/list")
+	public TableDataInfo getOperDataList(@RequestBody JSONObject jsonObject) {
+		Long channelId = SecurityUtils.getLoginUser().getChannelId();
+		int days = jsonObject.getIntValue("days");;
+		if(StringUtils.isNotBlank(jsonObject.getString("channelId"))) {
+			channelId = jsonObject.getLong("channelId");
+		}
+		days = days > 0?days:1;
+		List<Channel> list = channelService.list(
+		        new LambdaQueryWrapper<Channel>().eq(Channel::getParentId, channelId)
+		            .orderByDesc(Channel::getChannelId));
+		
+		List<ChannelOperDataVO> dataList = new ArrayList<ChannelOperDataVO>();
+		if(null != list && list.size() > 0) {
+			for(Channel channel : list) {
+				if(null != channel && null != channel.getChannelNo()) {
+				    // 查询今日的销售额、佣金收入、新增用户数
+				    ChannelOperDataVO channelOperDataVO = channelService.getChannelOperData(channel.getChannelNo(), days);
+				    if(null != channelOperDataVO) {
+				    	channelOperDataVO.setName(channel.getName());
+				    	dataList.add(channelOperDataVO);
+				    }
+				}
+			}
+		}
+		return getDataTable(dataList);
+	}
+	
+	
+	/**
+	 * 获取我的经销商列表信息,支持翻页
+	 *
+	 * @return
+	 */
+	@PostMapping("site/list")
+	public TableDataInfo listSite(@RequestBody Channel channel) {
+		Long channelId = SecurityUtils.getLoginUser().getChannelId();
+		List<ChannelVO> list = new ArrayList<ChannelVO>();
+		if(null != channelId) {
+			channel.setParentId(channelId);
+			startPage();
+			// List<Channel> list = channelService.list(new LambdaQueryWrapper<Channel>());
+			list = channelService.selectSiteVoList(channel);
+		}
+		return getDataTable(list);
+	}
+
+	/**
+	 * 获取我的下级渠道详情信息
+	 *
+	 * @param
+	 * @return
+	 */
+	@PostMapping(value = "site/detail")
+	public AjaxResult getSiteDetail(@RequestBody Channel channel) {
+		if (null == channel || null == channel.getChannelId()) {
+			return error(ErrorCodeEnum.ERROR_CODE_1001);
+		}
+		Long channelId = channel.getChannelId();
+		ChannelVO channelVO = new ChannelVO();
+		Channel queryChannel = channelService.getById(channelId);
+	    BeanUtils.copyProperties(queryChannel, channelVO);
+	    // 查询今日的销售额、佣金收入、新增用户数
+	    ChannelOperDataVO channelOperDataVO = channelService.getChannelOperData(channelVO.getChannelNo(), 1);
+	    channelVO.setOperData(channelOperDataVO);
+		return AjaxResult.success(channelVO);
+	}
+
+	/**
+	 * 新增经销商信息
+	 * @param
+	 * @return
+	 */
+	@ApiOperation(value = "渠道端新增经销商", notes = "渠道端新增经销商")
+	@PostMapping("site/create")
+	public AjaxResult siteCreate(@Validated @RequestBody ChannelParam channelParam) {
+		if (channelParam.getChannelId() != null && channelParam.getChannelId() != 0) {
+			return AjaxResult.error("该经销商已存在");
+		}
+		Long channelId = SecurityUtils.getLoginUser().getChannelId();
 
+		Channel channel = mapperFacade.map(channelParam, Channel.class);
+		channel.setParentId(channelId);
+		try {
+			channelService.saveSite(channel);
+		} catch (Exception e) {
+			return AjaxResult.error("新增经销商信息'" + channel.getName() + "'失败");
+		}
+		return AjaxResult.success("新增经销商信息'" + channel.getName() + "'成功");
+	}
+
+	/**
+	 * 编辑经销商信息
+	 * @param
+	 * @return
+	 */
+	@ApiOperation(value = "编辑经销商信息", notes = "渠道端编辑经销商")
+	@PostMapping("site/update")
+	public AjaxResult siteUpdate(@Validated @RequestBody ChannelParam channelParam) {
+
+		if (null == channelParam || null == channelParam.getChannelId()) {
+			return error(ErrorCodeEnum.ERROR_CODE_1001);
+		}
+		Channel channel = mapperFacade.map(channelParam, Channel.class);
+		try {
+			channelService.updateSite(channel);
+		} catch (Exception e) {
+			return AjaxResult.error("编辑经销商信息'" + channel.getName() + "'失败");
+		}
+		return AjaxResult.success("编辑经销商信息'" + channel.getName() + "'成功");
+	}
+	
+	
+	/**
+	 * 经销商认证审核
+	 * @param
+	 * @return
+	 */
+	@ApiOperation(value = "经销商认证审核", notes = "经销商认证审核")
+	@PostMapping("site/verify")
+	public AjaxResult siteVerify(@RequestBody Channel channel) {
+
+		if (null == channel || null == channel.getChannelId() || null == channel.getVerifyStatus()) {
+			return error(ErrorCodeEnum.ERROR_CODE_1001);
+		}
+		try {
+			channelService.updateById(channel);
+		} catch (Exception e) {
+			return AjaxResult.error("经销商'" + channel.getName() + "'认证审核失败");
+		}
+		return AjaxResult.success("经销商'" + channel.getName() + "'认证审核成功");
+	}
+	
+	/**
+	 * 经销商认证页面点提交
+	 * @param
+	 * @return
+	 */
+	@ApiOperation(value = "经销商认证信息提交", notes = "经销商认证页面点提交")
+	@PostMapping("site/verify/submit")
+	public AjaxResult siteVerifySubmit(@Validated @RequestBody VerifyParam verifyParam) {
+
+		if (null == verifyParam || null == verifyParam.getChannelId()) {
+			return error(ErrorCodeEnum.ERROR_CODE_1001);
+		}
+		Channel channel = mapperFacade.map(verifyParam, Channel.class);
+		try {
+			channelService.updateById(channel);
+		} catch (Exception e) {
+			return AjaxResult.error("经销商'" + channel.getName() + "'提交认证信息失败");
+		}
+		return AjaxResult.success("经销商'" + channel.getName() + "'提交认证信息成功");
+	}
+	
+	
+	/**
+	 * 查看我的渠道信息
+	 *
+	 * @param
+	 * @return
+	 */
+	@PostMapping(value = "min/detail")
+	@ApiOperation(value = "查看我的渠道信息", notes = "渠道端我的里面点击佣金比例")
+	public AjaxResult getMinInfo() {
+		
+		Long channelId = SecurityUtils.getLoginUser().getChannelId();
+		if (null == channelId) {
+			return error(ErrorCodeEnum.ERROR_CODE_1001);
+		}
+		ChannelVO channelVO = new ChannelVO();
+		Channel queryChannel = channelService.getById(channelId);
+	    BeanUtils.copyProperties(queryChannel, channelVO);
+	    // 查询今日的销售额、佣金收入、新增用户数
+	    Channel parentChannel = channelService.getById(queryChannel.getParentId());
+	    channelVO.setParentName(parentChannel.getName());
+		return AjaxResult.success(channelVO);
+	}
 }

+ 1 - 1
mp-admin/src/main/java/com/qs/mp/web/controller/api/channel/ChannelAddrController.java → mp-admin/src/main/java/com/qs/mp/web/controller/api/channel/mall/ChannelAddrController.java

@@ -8,7 +8,7 @@
  * 版权所有,侵权必究!
  */
 
-package com.qs.mp.web.controller.api.channel;
+package com.qs.mp.web.controller.api.channel.mall;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.qs.mp.channel.domain.ChannelAddr;

+ 2 - 2
mp-admin/src/main/java/com/qs/mp/web/controller/api/channel/ChannelCartController.java → mp-admin/src/main/java/com/qs/mp/web/controller/api/channel/mall/ChannelCartController.java

@@ -8,7 +8,7 @@
  * 版权所有,侵权必究!
  */
 
-package com.qs.mp.web.controller.api.channel;
+package com.qs.mp.web.controller.api.channel.mall;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.qs.mp.admin.domain.TicketBox;
@@ -39,7 +39,7 @@ import org.springframework.web.bind.annotation.RestController;
 
 @RestController
 @RequestMapping("/api/v1/mp/channel/mall")
-@Api(tags = "渠道盲票商城接口")
+@Api(tags = "渠道盲票商城购物车接口")
 @AllArgsConstructor
 public class ChannelCartController extends BaseApiController {
 

+ 198 - 0
mp-admin/src/main/java/com/qs/mp/web/controller/api/channel/mall/ChannelOrderController.java

@@ -0,0 +1,198 @@
+/*
+ * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved.
+ *
+ * https://www.mall4j.com/
+ *
+ * 未经允许,不可做商业用途!
+ *
+ * 版权所有,侵权必究!
+ */
+
+package com.qs.mp.web.controller.api.channel.mall;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.qs.mp.admin.domain.TicketBox;
+import com.qs.mp.admin.service.ITicketBoxService;
+import com.qs.mp.channel.domain.ChannelAddr;
+import com.qs.mp.channel.domain.ChannelCart;
+import com.qs.mp.channel.domain.ChannelOrder;
+import com.qs.mp.channel.domain.ChannelOrderItem;
+import com.qs.mp.channel.domain.param.ChannelCartParam;
+import com.qs.mp.channel.domain.param.ChannelOrderParam;
+import com.qs.mp.channel.domain.param.ChannelOrderPayParam;
+import com.qs.mp.channel.domain.vo.ChannelCartVO;
+import com.qs.mp.channel.domain.vo.ChannelOrderSettleVO;
+import com.qs.mp.channel.domain.vo.ChannelOrderVO;
+import com.qs.mp.channel.service.IChannelAddrService;
+import com.qs.mp.channel.service.IChannelCartService;
+import com.qs.mp.channel.service.IChannelOrderItemService;
+import com.qs.mp.channel.service.IChannelOrderService;
+import com.qs.mp.common.core.domain.AjaxResult;
+import com.qs.mp.common.core.redis.RedisCache;
+import com.qs.mp.common.domain.param.BatchLongIdsParam;
+import com.qs.mp.common.enums.BizTypeEnum;
+import com.qs.mp.pay.service.IWalletService;
+import com.qs.mp.utils.SecurityUtils;
+import com.qs.mp.web.controller.common.BaseApiController;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import java.util.Collection;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+import lombok.AllArgsConstructor;
+import ma.glasnost.orika.MapperFacade;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.CollectionUtils;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+
+@RestController
+@RequestMapping("/api/v1/mp/channel/mall")
+@Api(tags = "渠道盲票商城订单接口")
+@AllArgsConstructor
+public class ChannelOrderController extends BaseApiController {
+
+
+  @Autowired
+  private IChannelCartService channelCartService;
+
+  @Autowired
+  private IChannelOrderService channelOrderService;
+
+  @Autowired
+  private IChannelOrderItemService channelOrderItemService;
+
+  @Autowired
+  private ITicketBoxService ticketBoxService;
+
+  @Autowired
+  private IChannelAddrService channelAddrService;
+
+  @Autowired
+  private MapperFacade mapperFacade;
+
+  @Autowired
+  private IWalletService walletService;
+
+  @Autowired
+  private RedisCache redisCache;
+
+  private final String CHANNEL_ORDER_CACHE_KEY = "channel_settle_order_";
+
+  /**
+   * 订单列表
+   */
+  @PostMapping("/order/list")
+  @ApiOperation(value = "订单列表" , notes = "获取所有订单信息")
+  public AjaxResult list(@RequestBody ChannelOrder param) {
+    Long channelId = SecurityUtils.getLoginUser().getChannelId();
+    startPage();
+    List<ChannelOrder> channelOrders = channelOrderService.list(
+        new LambdaQueryWrapper<ChannelOrder>().eq(ChannelOrder::getChannelId, channelId)
+            .eq(null != param.getStatus(), ChannelOrder::getStatus, param.getStatus())
+            .orderByDesc(ChannelOrder::getCreatedTime));
+    List<ChannelOrderVO> channelOrderVOList = mapperFacade.mapAsList(channelOrders, ChannelOrderVO.class);
+    for (ChannelOrderVO channelOrderVO : channelOrderVOList) {
+      channelOrderVO.setItems(channelOrderItemService.list(new LambdaQueryWrapper<ChannelOrderItem>()
+          .eq(ChannelOrderItem::getOrderId, channelOrderVO.getOrderId())));
+    }
+    return AjaxResult.success(channelOrderVOList);
+  }
+
+
+  /**
+   * 订单结算,每次更换地址或优惠券时需重新请求此接口
+   */
+  @PostMapping("/order/settle")
+  @ApiOperation(value = "订单结算" , notes = "购物车里点结算或者单个盲票组商品上点立即购买")
+  public AjaxResult settle(@RequestBody ChannelOrderParam param) {
+    Long channelId = SecurityUtils.getLoginUser().getChannelId();
+    ChannelOrderSettleVO orderSettleVO = new ChannelOrderSettleVO();
+
+    // 收货地址,如果用户选了地址,则此处不做处理
+    if (null == param.getAddrId() || 0 == param.getAddrId()) {
+      //读取默认地址
+      ChannelAddr addr = channelAddrService.getDefaultChannelAddr(channelId);
+      if (null != addr) {
+        orderSettleVO.setAddr(addr);
+      }
+    }
+
+    // 订单金额计算
+    Integer orderAmt = 0;
+    if (!CollectionUtils.isEmpty(param.getCartIds())){
+      // 购物车里下单的
+      List<ChannelCart> channelCarts = channelCartService.listByIds(param.getCartIds());
+      for (ChannelCart channelCart : channelCarts) {
+        TicketBox ticketBox = ticketBoxService.getById(channelCart.getBoxId());
+        orderAmt += ticketBox.getPkgSalePrice() * channelCart.getOrderNum();
+        ChannelCartVO cartVO = mapperFacade.map(ticketBox, ChannelCartVO.class);
+        cartVO.setCartId(channelCart.getCartId());
+        cartVO.setOrderNum(channelCart.getOrderNum());
+        orderSettleVO.getItems().add(cartVO);
+      }
+    } else {
+      TicketBox ticketBox = ticketBoxService.getById(param.getBoxId());
+      orderAmt += ticketBox.getPkgSalePrice() * param.getOrderNum();
+      ChannelCartVO cartVO = mapperFacade.map(ticketBox, ChannelCartVO.class);
+      cartVO.setOrderNum(param.getOrderNum());
+      orderSettleVO.getItems().add(cartVO);
+    }
+    orderSettleVO.setOrderAmt(orderAmt);
+    // 当前没有运费和优惠,实付金额=订单金额
+    orderSettleVO.setPayAmt(orderAmt);
+
+    // 缓存订单结算对象
+    redisCache.setCacheObject(CHANNEL_ORDER_CACHE_KEY + channelId, orderSettleVO, 10, TimeUnit.MINUTES);
+    return AjaxResult.success(orderSettleVO);
+  }
+
+  /**
+   * 提交订单
+   */
+  @PostMapping("/order/submit")
+  @ApiOperation(value = "提交订单" , notes = "在订单确认页面提交")
+  public AjaxResult submit(@RequestBody ChannelOrder order) {
+    Long channelId = SecurityUtils.getLoginUser().getChannelId();
+    ChannelOrderSettleVO orderSettleVO = redisCache.getCacheObject(CHANNEL_ORDER_CACHE_KEY + channelId);
+    if (null == orderSettleVO) {
+      return AjaxResult.error("订单已过期,请重新下单");
+    }
+    if (null == orderSettleVO.getAddr()) {
+      return AjaxResult.error("收货地址缺失,请重新下单");
+    }
+    String orderId = channelOrderService.submitOrder(channelId, order.getMemo(), orderSettleVO);
+
+    // 清除缓存的订单
+    redisCache.deleteObject(CHANNEL_ORDER_CACHE_KEY + channelId);
+
+    return AjaxResult.success(orderId);
+  }
+
+  /**
+   * 取消订单
+   */
+  @PostMapping("/order/cancel")
+  @ApiOperation(value = "取消订单" , notes = "在订单列表页面取消")
+  public AjaxResult cancel(@RequestBody ChannelOrder order) {
+    Long channelId = SecurityUtils.getLoginUser().getChannelId();
+    channelOrderService.cancelOrder(channelId, order.getOrderId());
+    return AjaxResult.success("取消成功");
+  }
+
+  /**
+   * 订单支付
+   */
+  @PostMapping("/order/pay")
+  @ApiOperation(value = "订单支付" , notes = "在订单列表页面支付")
+  public AjaxResult pay(@RequestBody ChannelOrderPayParam param) {
+    String openId = SecurityUtils.getLoginUser().getUser().getOpenId();
+    ChannelOrder channelOrder = channelOrderService.getById(param.getOrderId());
+    JSONObject jsonObject = walletService.channelPay(BizTypeEnum.CHANNEL_ORDER, param.getOrderId(), openId, channelOrder.getPayAmt());
+    return AjaxResult.success(jsonObject);
+  }
+}

+ 1 - 1
mp-admin/src/main/java/com/qs/mp/web/controller/api/channel/ChannelTicketController.java → mp-admin/src/main/java/com/qs/mp/web/controller/api/channel/mall/ChannelTicketController.java

@@ -8,7 +8,7 @@
  * 版权所有,侵权必究!
  */
 
-package com.qs.mp.web.controller.api.channel;
+package com.qs.mp.web.controller.api.channel.mall;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.qs.mp.admin.domain.TicketBox;

+ 3 - 8
mp-admin/src/main/java/com/qs/mp/web/controller/common/FileUploadController.java

@@ -52,11 +52,6 @@ public class FileUploadController extends BaseApiController {
     @Value("${cloud.private-bucket-name}")
     private String privateBucketName;
 
-    /**
-     * 模板原稿文件目录
-     */
-    @Value("${cloud.template-dir}")
-    private String tempSrcDir;
 
     @Autowired
     protected HostHolder hostHolder;
@@ -81,9 +76,9 @@ public class FileUploadController extends BaseApiController {
             LogUtil.info(log, "文件上传,fileName:{0}, ContentType:{1}", new Object[]{file.getOriginalFilename(), mimeType});
             String fileName = file.getOriginalFilename();
             String saveAs = fileName;
-            // 模板原稿文件保存到指定目录
-            if ("template".equals(fileType)){
-                saveAs = tempSrcDir + fileName;
+            // 指定目录
+            if (StringUtils.isNotBlank(fileType)){
+                saveAs = fileType + "/" + fileName;
             }
             QcloudFileUtils.putStream(file.getInputStream(), saveAs,
                 privateBucketName, mimeType);

+ 2 - 5
mp-admin/src/main/resources/application.yml

@@ -9,7 +9,7 @@ mp:
   # 实例演示开关
   demoEnabled: true
   # 文件路径 示例( Windows配置D:/ygp/uploadPath,Linux配置 /home/ygp/uploadPath)
-  profile: /Users/steven/Documents
+  profile: /home/quanshu/mp-server
   # 获取ip地址开关
   addressEnabled: false
   # 验证码类型 math 数组计算 char 字符验证
@@ -121,10 +121,7 @@ cloud:
   #public-bucket-name: ygp-public
   # 存储对象公开不可访问,需要通过应用下载
   #private-bucket-name: ygp-auth
-  # 合同模板存放目录
-  template-dir: files/template/
-  # 签署好的合同文件存放目录
-  contract-dir: files/contract/
+
 
 #小程序appid和密钥
 wx:

+ 46 - 0
mp-admin/src/test/java/com/qs/mp/service/ChannelServiceTest.java

@@ -0,0 +1,46 @@
+package com.qs.mp.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.qs.mp.MpApplication;
+import com.qs.mp.channel.domain.Channel;
+import com.qs.mp.channel.service.IChannelService;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.ActiveProfiles;
+import org.springframework.test.context.TestPropertySource;
+
+@AutoConfigureMockMvc
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = MpApplication.class)
+@TestPropertySource(locations = "classpath:application-dev.yml")
+@ActiveProfiles("dev")
+public class ChannelServiceTest {
+
+	@Autowired
+	private IChannelService channelService;
+
+	@Test
+	public void testListChannel() {
+		Channel channel = new Channel();
+
+	}
+	
+	@Test
+	public void testAddChannel() {
+		Channel channel = new Channel();
+
+	}
+	
+	
+	@Test
+	public void testEditChannel() {
+		Channel channel = new Channel();
+
+	}
+	
+	
+
+}

+ 4 - 3
mp-common/src/main/java/com/qs/mp/common/enums/PayOrderTypeEnum.java → mp-common/src/main/java/com/qs/mp/common/enums/BizTypeEnum.java

@@ -7,15 +7,16 @@ import com.baomidou.mybatisplus.annotation.IEnum;
  * 支付订单枚举类型
  *
  */
-public enum PayOrderTypeEnum implements IEnum<Integer> {
+public enum BizTypeEnum implements IEnum<Integer> {
 
-  ORDER_MERCH_RECHARGE(1, "商户充值");
+  CHANNEL_ORDER(1, "渠道订单"),
+  USER_ORDER(2, "用户订单");
 
 
   private final int value;
   private final String desc;
 
-  PayOrderTypeEnum(final int value, final String desc) {
+  BizTypeEnum(final int value, final String desc) {
     this.value = value;
     this.desc = desc;
   }

+ 3 - 0
mp-common/src/main/java/com/qs/mp/common/enums/ChannelCertifyStatusEnum.java

@@ -1,12 +1,15 @@
 package com.qs.mp.common.enums;
 
+import com.alibaba.fastjson.annotation.JSONType;
 import com.baomidou.mybatisplus.annotation.IEnum;
+import com.qs.mp.common.json.EnumValueDeserializer;
 
 /**
  *
  * 渠道认证状态
  *
  */
+@JSONType(deserializer = EnumValueDeserializer.class)
 public enum ChannelCertifyStatusEnum implements IEnum<String> {
 
   NOT_CERTIFIED("n", "未认证"),

+ 32 - 0
mp-common/src/main/java/com/qs/mp/common/enums/ChannelOrderStatusEnum.java

@@ -0,0 +1,32 @@
+package com.qs.mp.common.enums;
+
+import com.alibaba.fastjson.annotation.JSONType;
+import com.baomidou.mybatisplus.annotation.IEnum;
+import com.qs.mp.common.json.EnumValueDeserializer;
+
+/**
+ *
+ * 渠道订单状态
+ *
+ */
+@JSONType(deserializer = EnumValueDeserializer.class)
+public enum ChannelOrderStatusEnum implements IEnum<Integer> {
+  CANCELED(-1, "已取消"),
+  NOT_PAY(0, "待付款"),
+  NOT_DELIVER(1, "待发货"),
+  NOT_CONFIRM(2, "待收货"),
+  FINISHED(3, "已完成");
+
+  private final int value;
+  private final String desc;
+
+  ChannelOrderStatusEnum(final int value, final String desc) {
+    this.value = value;
+    this.desc = desc;
+  }
+
+  @Override
+  public Integer getValue() {
+    return value;
+  }
+}

+ 3 - 0
mp-common/src/main/java/com/qs/mp/common/enums/ChannelVerifyStatusEnum.java

@@ -1,12 +1,15 @@
 package com.qs.mp.common.enums;
 
+import com.alibaba.fastjson.annotation.JSONType;
 import com.baomidou.mybatisplus.annotation.IEnum;
+import com.qs.mp.common.json.EnumValueDeserializer;
 
 /**
  *
  * 渠道认证审核状态
  *
  */
+@JSONType(deserializer = EnumValueDeserializer.class)
 public enum ChannelVerifyStatusEnum implements IEnum<String> {
 
   WAIT("wait", "待审核"),

+ 3 - 0
mp-common/src/main/java/com/qs/mp/common/enums/TicketTypeEnum.java

@@ -1,12 +1,15 @@
 package com.qs.mp.common.enums;
 
+import com.alibaba.fastjson.annotation.JSONType;
 import com.baomidou.mybatisplus.annotation.IEnum;
+import com.qs.mp.common.json.EnumValueDeserializer;
 
 /**
  *
  * 盲票实体形式
  *
  */
+@JSONType(deserializer = EnumValueDeserializer.class)
 public enum TicketTypeEnum implements IEnum<String> {
 
   ONLINE("online", "线上票"),

+ 52 - 0
mp-common/src/main/java/com/qs/mp/common/exception/DataOperationException.java

@@ -0,0 +1,52 @@
+package com.qs.mp.common.exception;
+
+import com.qs.mp.common.enums.ErrorCodeEnum;
+
+/**
+ * 
+ * 数据库接口访问异常,所有涉及到service事物调用接口都统一抛异常为失败操作。
+ * 
+ * @author duota
+ *
+ */
+public class DataOperationException extends RuntimeException {
+
+    /**
+     * 
+     */
+    private static final long serialVersionUID = 1L;
+
+    protected final int code;
+    protected final String message;
+
+    public DataOperationException() {
+        this.code = 1001; // 系统错误
+        this.message = "数据操作失败.";
+    }
+
+    public DataOperationException(ErrorCodeEnum errorCodeEnum){
+        this.code = errorCodeEnum.getCode();
+        this.message = errorCodeEnum.getMsg();
+    }
+
+    public DataOperationException(int code, String message) {
+        this.code = code;
+        this.message = message;
+    }
+
+    public DataOperationException(int code, String message, Throwable e) {
+        super(message, e);
+        this.code = code;
+        this.message = message;
+    }
+
+    @Override
+    public String getMessage() {
+        return message;
+    }
+
+    public int getCode() {
+        return code;
+    }
+
+}

+ 18 - 6
mp-service/src/main/java/com/qs/mp/admin/domain/TicketBox.java

@@ -77,14 +77,14 @@ public class TicketBox implements Serializable {
   /**
    * 盲票包原价
    */
-  @TableField("box_price")
-  private Integer boxPrice;
+  @TableField("pkg_price")
+  private Integer pkgPrice;
 
   /**
    * 盲票包售价
    */
-  @TableField("box_sale_price")
-  private Integer boxSalePrice;
+  @TableField("pkg_sale_price")
+  private Integer pkgSalePrice;
 
   /**
    * 每包盲票张数
@@ -131,8 +131,20 @@ public class TicketBox implements Serializable {
   /**
    * 上架时间
    */
-  @TableField("puton_time")
-  private Date putonTime;
+  @TableField("on_time")
+  private Date onTime;
+
+  /**
+   * 下架时间
+   */
+  @TableField("off_time")
+  private Date offTime;
+
+  /**
+   * 人工下架标识
+   */
+  @TableField("manual_off")
+  private Integer manualOff;
 
   /**
    * 状态,上架/下架

+ 2 - 2
mp-service/src/main/java/com/qs/mp/channel/domain/ChannelCommission.java

@@ -47,8 +47,8 @@ public class ChannelCommission implements Serializable {
   /**
    * 销售金额
    */
-  @TableField("sale_price")
-  private Integer salePrice;
+  @TableField("sale_amt")
+  private Integer saleAmt;
 
   /**
    * 参与分佣的销售金额比例

+ 5 - 1
mp-service/src/main/java/com/qs/mp/channel/domain/ChannelOrder.java

@@ -1,9 +1,12 @@
 package com.qs.mp.channel.domain;
 
+import com.alibaba.fastjson.annotation.JSONField;
+import com.alibaba.fastjson.serializer.SerializerFeature;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.qs.mp.common.enums.ChannelOrderStatusEnum;
 import java.io.Serializable;
 import java.util.Date;
 import lombok.Data;
@@ -65,7 +68,8 @@ public class ChannelOrder implements Serializable {
    * 订单状态,-1 已取消 0:待付款 1:待发货 2:待收货 3:已完成
    */
   @TableField("status")
-  private Integer status;
+  @JSONField(serialzeFeatures = SerializerFeature.WriteEnumUsingToString)
+  private ChannelOrderStatusEnum status;
 
   /**
    * 商品总数

+ 24 - 0
mp-service/src/main/java/com/qs/mp/channel/domain/param/ChannelOrderParam.java

@@ -0,0 +1,24 @@
+package com.qs.mp.channel.domain.param;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import java.util.List;
+import javax.validation.constraints.NotNull;
+import lombok.Data;
+
+@ApiModel(value= "订单参数")
+@Data
+public class ChannelOrderParam {
+
+	@ApiModelProperty(value = "购物清单IDs",required=false)
+	private List<Long> cartIds;
+
+	@ApiModelProperty(value = "盲票组ID",required=false)
+	private String boxId;
+
+	@ApiModelProperty(value = "购买数量",required=false)
+	private Integer orderNum;
+
+	@ApiModelProperty(value = "收货地址ID",required=false)
+	private Long addrId;
+}

+ 20 - 0
mp-service/src/main/java/com/qs/mp/channel/domain/param/ChannelOrderPayParam.java

@@ -0,0 +1,20 @@
+package com.qs.mp.channel.domain.param;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import java.util.List;
+import javax.validation.constraints.NotNull;
+import lombok.Data;
+
+@ApiModel(value= "订单支付参数")
+@Data
+public class ChannelOrderPayParam {
+
+	@NotNull(message = "订单ID不能为空")
+	@ApiModelProperty(value = "订单ID",required=true)
+	private String orderId;
+
+	@NotNull(message = "支付方式不能为空")
+	@ApiModelProperty(value = "支付方式",required=true)
+	private Integer payType;
+}

+ 66 - 0
mp-service/src/main/java/com/qs/mp/channel/domain/param/VerifyParam.java

@@ -0,0 +1,66 @@
+package com.qs.mp.channel.domain.param;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.math.BigDecimal;
+
+import javax.validation.constraints.NotNull;
+
+import com.qs.mp.common.enums.SiteTypeEnum;
+
+import lombok.Data;
+
+@ApiModel(value= "地址参数")
+@Data
+public class VerifyParam {
+
+	@NotNull(message = "渠道ID不能为空")
+	@ApiModelProperty(value = "渠道ID",required=true)
+	private Long channelId;
+
+	@NotNull(message = "联系人不能为空")
+	@ApiModelProperty(value = "联系人",required=true)
+	private String contact;
+	
+	@NotNull(message = "门店类型不能为空")
+	@ApiModelProperty(value = "门店类型",required=true)
+	private SiteTypeEnum siteType;
+
+	@NotNull(message = "省ID不能为空")
+	@ApiModelProperty(value = "省ID",required=true)
+	private Long provinceId;
+
+	@NotNull(message = "城市ID不能为空")
+	@ApiModelProperty(value = "城市ID",required=true)
+	private Long cityId;
+
+	@NotNull(message = "区ID不能为空")
+	@ApiModelProperty(value = "区ID",required=true)
+	private Long areaId;
+
+	@NotNull(message = "省不能为空")
+	@ApiModelProperty(value = "省",required=true)
+	private String province;
+
+	@NotNull(message = "城市不能为空")
+	@ApiModelProperty(value = "城市",required=true)
+	private String city;
+
+	@NotNull(message = "区不能为空")
+	@ApiModelProperty(value = "区",required=true)
+	private String area;
+	
+	@NotNull(message = "详细地址不能为空")
+	@ApiModelProperty(value = "详细地址",required=true)
+	private String address;
+
+	@NotNull(message = "营业执照不能为空")
+	@ApiModelProperty(value = "营业执照",required=true)
+	private String bizLicensePic;
+	
+	@NotNull(message = "门店照片不能为空")
+	@ApiModelProperty(value = "门店照片",required=true)
+	private String doorPic;
+
+}

+ 42 - 0
mp-service/src/main/java/com/qs/mp/channel/domain/vo/ChannelOrderSettleVO.java

@@ -0,0 +1,42 @@
+package com.qs.mp.channel.domain.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.qs.mp.channel.domain.ChannelAddr;
+import java.util.ArrayList;
+import java.util.List;
+import lombok.Data;
+
+/**
+ * @author zhongcp
+ * @Date 2022/3/3
+ */
+@Data
+public class ChannelOrderSettleVO {
+
+  private ChannelAddr addr;
+
+  /**
+   * 订单金额
+   */
+  private Integer orderAmt = 0;
+
+  /**
+   * 优惠金额
+   */
+  private Integer discountAmt = 0;
+
+  /**
+   * 运费金额
+   */
+  private Integer freightAmt = 0;
+
+  /**
+   * 实付金额
+   */
+  private Integer payAmt = 0;
+
+  /**
+   * 订单明细
+   */
+  private List<ChannelCartVO> items = new ArrayList<>();
+}

+ 15 - 0
mp-service/src/main/java/com/qs/mp/channel/domain/vo/ChannelOrderVO.java

@@ -0,0 +1,15 @@
+package com.qs.mp.channel.domain.vo;
+
+import com.qs.mp.channel.domain.ChannelOrder;
+import com.qs.mp.channel.domain.ChannelOrderItem;
+import java.util.List;
+import lombok.Data;
+
+/**
+ * @author zhongcp
+ * @Date 2022/3/3
+ */
+@Data
+public class ChannelOrderVO extends ChannelOrder {
+  private List<ChannelOrderItem> items;
+}

+ 10 - 0
mp-service/src/main/java/com/qs/mp/channel/mapper/ChannelCommissionMapper.java

@@ -1,6 +1,9 @@
 package com.qs.mp.channel.mapper;
 
 import com.qs.mp.channel.domain.ChannelCommission;
+
+import org.apache.ibatis.annotations.Param;
+
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 
 /**
@@ -10,4 +13,11 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface ChannelCommissionMapper extends BaseMapper<ChannelCommission> {
 
+	/**
+	 * 根据渠道No查询渠道的经营数据
+	 * @param channelNo
+	 * @param days
+	 * @return
+	 */
+	public ChannelCommission getChannelCommissionCnt(@Param("channelNo") String channelNo,@Param("days") int days);
 }

+ 7 - 0
mp-service/src/main/java/com/qs/mp/channel/mapper/ChannelUserRelMapper.java

@@ -19,4 +19,11 @@ public interface ChannelUserRelMapper extends BaseMapper<ChannelUserRel> {
      * @return
      */
     int getChannelUserCnt(@Param("channelNo") String channelNo);
+    
+	/**
+	 * 根据渠道No查询渠道指定时间内新增的用户数量
+	 * @param channelNo
+	 * @return
+	 */
+	int getChannelUserCnt(@Param("channelNo") String channelNo, @Param("days") int days);
 }

+ 6 - 0
mp-service/src/main/java/com/qs/mp/channel/service/IChannelCommissionService.java

@@ -13,4 +13,10 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface IChannelCommissionService extends IService<ChannelCommission> {
 
+	/**
+	 * 根据渠道No查询渠道的经营数据
+	 * @param channelNo
+	 * @return
+	 */
+	public ChannelCommission getChannelCommissionCnt(String channelNo, int days);
 }

+ 17 - 0
mp-service/src/main/java/com/qs/mp/channel/service/IChannelOrderService.java

@@ -2,6 +2,7 @@ package com.qs.mp.channel.service;
 
 import com.qs.mp.channel.domain.ChannelOrder;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.qs.mp.channel.domain.vo.ChannelOrderSettleVO;
 
 /**
  * <p>
@@ -13,4 +14,20 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface IChannelOrderService extends IService<ChannelOrder> {
 
+  /**
+   * 提交订单
+   * @param channelId
+   * @param memo
+   * @param orderSettleVO
+   * @return
+   */
+  String submitOrder(Long channelId, String memo, ChannelOrderSettleVO orderSettleVO);
+
+  /**
+   * 取消订单
+   * @param channelId
+   * @param orderId
+   * @return
+   */
+  boolean cancelOrder(Long channelId, String orderId);
 }

+ 34 - 1
mp-service/src/main/java/com/qs/mp/channel/service/IChannelService.java

@@ -1,6 +1,7 @@
 package com.qs.mp.channel.service;
 
 import com.qs.mp.channel.domain.Channel;
+import com.qs.mp.channel.domain.vo.ChannelOperDataVO;
 import com.qs.mp.channel.domain.vo.ChannelVO;
 
 import java.util.List;
@@ -26,6 +27,14 @@ public interface IChannelService extends IService<Channel> {
 	 */
     public void saveChannel(Channel channel) throws Exception;
     
+	/**
+	 * 新增经销商
+	 * 
+	 * @param channel
+	 * @return
+	 */
+    public void saveSite(Channel channel) throws Exception;
+    
     
     /**
 	 * 编辑子渠道信息
@@ -35,6 +44,16 @@ public interface IChannelService extends IService<Channel> {
 	 */
     public void updateChannel(Channel channel) throws Exception;
     
+    
+    /**
+	 * 编辑经销商
+	 * 
+	 * @param channel
+	 * @return
+	 */
+    public void updateSite(Channel channel) throws Exception;
+    
+    
 
 	/**
 	 * 获取我的下级渠道列表信息,支持翻页
@@ -43,6 +62,14 @@ public interface IChannelService extends IService<Channel> {
 	 * @return
 	 */
 	public List<ChannelVO> selectChannelVoList(Channel channel);
+	
+	/**
+	 * 获取我的经销商列表信息,支持翻页
+	 * 
+	 * @param channel
+	 * @return
+	 */
+	public List<ChannelVO> selectSiteVoList(Channel channel);
 
 	/**
 	 * 根据用户ID查询渠道
@@ -50,5 +77,11 @@ public interface IChannelService extends IService<Channel> {
 	 * @param userId
 	 * @return
 	 */
-	Channel getChannelByUserId(Long userId);
+	public Channel getChannelByUserId(Long userId);
+	
+	
+	/**
+	 * 根据channelNo统计最近几天days的经营数据
+	 */
+	public ChannelOperDataVO getChannelOperData(String channelNo, int days);
 }

+ 6 - 0
mp-service/src/main/java/com/qs/mp/channel/service/IChannelUserRelService.java

@@ -13,4 +13,10 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface IChannelUserRelService extends IService<ChannelUserRel> {
 
+	/**
+	 * 根据渠道No查询渠道指定时间内新增的用户数量
+	 * @param channelNo
+	 * @return
+	 */
+	int getChannelUserCnt(String channelNo, int days);
 }

+ 4 - 0
mp-service/src/main/java/com/qs/mp/channel/service/impl/ChannelCommissionServiceImpl.java

@@ -17,4 +17,8 @@ import org.springframework.stereotype.Service;
 @Service
 public class ChannelCommissionServiceImpl extends ServiceImpl<ChannelCommissionMapper, ChannelCommission> implements IChannelCommissionService {
 
+	@Override
+	public ChannelCommission getChannelCommissionCnt(String channelNo, int days) {
+		return getBaseMapper().getChannelCommissionCnt(channelNo, days == 1?0: (~(days - 1)));
+	}
 }

+ 117 - 0
mp-service/src/main/java/com/qs/mp/channel/service/impl/ChannelOrderServiceImpl.java

@@ -1,10 +1,28 @@
 package com.qs.mp.channel.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.qs.mp.admin.domain.TicketBox;
+import com.qs.mp.admin.service.ITicketBoxService;
+import com.qs.mp.channel.domain.ChannelAddr;
 import com.qs.mp.channel.domain.ChannelOrder;
+import com.qs.mp.channel.domain.ChannelOrderItem;
+import com.qs.mp.channel.domain.vo.ChannelCartVO;
+import com.qs.mp.channel.domain.vo.ChannelOrderSettleVO;
 import com.qs.mp.channel.mapper.ChannelOrderMapper;
+import com.qs.mp.channel.service.IChannelAddrService;
+import com.qs.mp.channel.service.IChannelOrderItemService;
 import com.qs.mp.channel.service.IChannelOrderService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qs.mp.common.enums.ChannelOrderStatusEnum;
+import com.qs.mp.common.enums.TicketBoxStatusEnum;
+import com.qs.mp.common.exception.ServiceException;
+import com.qs.mp.system.service.id.BizIdGenerator;
+import java.util.ArrayList;
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 /**
  * <p>
@@ -17,4 +35,103 @@ import org.springframework.stereotype.Service;
 @Service
 public class ChannelOrderServiceImpl extends ServiceImpl<ChannelOrderMapper, ChannelOrder> implements IChannelOrderService {
 
+  @Autowired
+  private BizIdGenerator bizIdGenerator;
+
+  @Autowired
+  private IChannelAddrService channelAddrService;
+
+  @Autowired
+  private ITicketBoxService ticketBoxService;
+
+  @Autowired
+  private IChannelOrderItemService channelOrderItemService;
+
+  @Autowired
+  private IChannelOrderService channelOrderService;
+
+  @Override
+  @Transactional
+  public String submitOrder(Long channelId, String memo, ChannelOrderSettleVO orderSettleVO) {
+    ChannelAddr addr = orderSettleVO.getAddr();
+    String orderId = bizIdGenerator.newId();
+    int prodNum = 0;
+    StringBuilder title = new StringBuilder();
+    // 创建订单明细
+    List<ChannelOrderItem> orderItemList = new ArrayList<>();
+    for (ChannelCartVO channelCartVO : orderSettleVO.getItems()) {
+      TicketBox ticketBox = ticketBoxService.getById(channelCartVO.getBoxId());
+      if (ticketBox.getSalePkgQty() + channelCartVO.getOrderNum() > ticketBox.getPkgQty()) {
+        throw new ServiceException(ticketBox.getTitle() + "库存不足,请重新下单");
+      }
+      ChannelOrderItem item = new ChannelOrderItem();
+      item.setOrderId(orderId);
+      item.setChannelId(channelId);
+      item.setTitle(ticketBox.getTitle());
+      item.setPicUrl(ticketBox.getPicUrl());
+      item.setBoxId(channelCartVO.getBoxId());
+      item.setProperties(ticketBox.getProperties());
+      item.setFacePrice(ticketBox.getFacePrice());
+      item.setOrderNum(channelCartVO.getOrderNum());
+      item.setPkgSalePrice(ticketBox.getPkgSalePrice());
+      orderItemList.add(item);
+      // 累计商品数,拼接标题
+      prodNum += channelCartVO.getOrderNum();
+      title.append(ticketBox.getTitle()).append(",");
+      // 更新盲票组的已销售数和状态,乐观锁
+      ticketBoxService.update(new LambdaUpdateWrapper<TicketBox>()
+          .set(ticketBox.getPkgSalePrice() + channelCartVO.getOrderNum() == ticketBox.getPkgQty(), TicketBox::getStatus,
+              TicketBoxStatusEnum.PUT_OFF)
+          .set(TicketBox::getSalePkgQty, ticketBox.getSalePkgQty() + channelCartVO.getOrderNum())
+          .eq(TicketBox::getSalePkgQty, ticketBox.getSalePkgQty()).eq(TicketBox::getBoxId, ticketBox.getBoxId()));
+    }
+
+    // 创建订单
+    ChannelOrder channelOrder = new ChannelOrder();
+    channelOrder.setOrderId(orderId);
+    channelOrder.setChannelId(channelId);
+    channelOrder.setTitle(title.substring(0, title.length() - 1));
+    channelOrder.setOrderAmt(orderSettleVO.getOrderAmt());
+    channelOrder.setDiscountAmt(orderSettleVO.getDiscountAmt());
+    channelOrder.setFreightAmt(orderSettleVO.getFreightAmt());
+    channelOrder.setPayAmt(orderSettleVO.getPayAmt());
+    channelOrder.setStatus(ChannelOrderStatusEnum.NOT_PAY);
+    channelOrder.setProdNum(prodNum);
+    channelOrder.setMemo(memo);
+    channelOrder.setReceiver(addr.getReceiver());
+    channelOrder.setTel(addr.getMobile());
+    channelOrder.setProvince(addr.getProvince());
+    channelOrder.setCity(addr.getCity());
+    channelOrder.setArea(addr.getArea());
+    channelOrder.setAddress(addr.getAddr());
+
+    channelOrderService.save(channelOrder);
+    channelOrderItemService.saveBatch(orderItemList);
+    return channelOrder.getOrderId();
+  }
+
+  @Override
+  @Transactional
+  public boolean cancelOrder(Long channelId, String orderId) {
+    ChannelOrder channelOrder = channelOrderService.getOne(new LambdaQueryWrapper<ChannelOrder>()
+        .eq(ChannelOrder::getChannelId, channelId).eq(ChannelOrder::getOrderId, orderId));
+    if (channelOrder.getStatus() != ChannelOrderStatusEnum.NOT_PAY) {
+      throw new ServiceException("订单状态异常,不能取消");
+    }
+
+    List<ChannelOrderItem> orderItemList = channelOrderItemService.list(new LambdaQueryWrapper<ChannelOrderItem>()
+        .eq(ChannelOrderItem::getOrderId, orderId));
+    for (ChannelOrderItem orderItem : orderItemList) {
+      TicketBox ticketBox = ticketBoxService.getById(orderItem.getBoxId());
+      // 恢复盲票组的已销售数和状态,乐观锁
+      ticketBoxService.update(new LambdaUpdateWrapper<TicketBox>()
+          .set(ticketBox.getStatus() == TicketBoxStatusEnum.PUT_OFF && ticketBox.getManualOff() != 1, TicketBox::getStatus,
+              TicketBoxStatusEnum.PUT_ON)
+          .set(TicketBox::getSalePkgQty, ticketBox.getSalePkgQty() - orderItem.getOrderNum())
+          .eq(TicketBox::getSalePkgQty, ticketBox.getSalePkgQty()).eq(TicketBox::getBoxId, ticketBox.getBoxId()));
+    }
+    channelOrderService.update(new LambdaUpdateWrapper<ChannelOrder>().set(ChannelOrder::getStatus, ChannelOrderStatusEnum.CANCELED)
+        .eq(ChannelOrder::getOrderId, orderId));
+    return true;
+  }
 }

+ 136 - 4
mp-service/src/main/java/com/qs/mp/channel/service/impl/ChannelServiceImpl.java

@@ -3,9 +3,18 @@ package com.qs.mp.channel.service.impl;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.qs.mp.channel.domain.Channel;
+import com.qs.mp.channel.domain.ChannelAddr;
+import com.qs.mp.channel.domain.ChannelCommission;
+import com.qs.mp.channel.domain.vo.ChannelOperDataVO;
 import com.qs.mp.channel.domain.vo.ChannelVO;
 import com.qs.mp.channel.mapper.ChannelMapper;
+import com.qs.mp.channel.service.IChannelCommissionService;
 import com.qs.mp.channel.service.IChannelService;
+import com.qs.mp.channel.service.IChannelUserRelService;
+import com.qs.mp.common.core.domain.AjaxResult;
+import com.qs.mp.common.enums.ErrorCodeEnum;
+import com.qs.mp.common.exception.ServiceException;
+import com.qs.mp.system.domain.SysUser;
 import com.qs.mp.system.service.ISysUserService;
 import com.qs.mp.system.service.id.BizIdGenerator;
 import com.qs.mp.utils.SecurityUtils;
@@ -28,9 +37,16 @@ import org.springframework.transaction.annotation.Transactional;
 @Service
 public class ChannelServiceImpl extends ServiceImpl<ChannelMapper, Channel> implements IChannelService {
 
+	
 	@Autowired
 	private IChannelService channelService;
 	
+	@Autowired
+	private IChannelUserRelService channelUserRelService;
+	
+	@Autowired
+	private IChannelCommissionService channelCommissionService;
+	
     @Autowired
     private ISysUserService userService;
 
@@ -41,12 +57,87 @@ public class ChannelServiceImpl extends ServiceImpl<ChannelMapper, Channel> impl
 	@Transactional
 	public void saveChannel(Channel channel) throws Exception {
 		// 1、校验名称是否重复、手机号是否存在(渠道表)
-		
+		int nameCount = channelService.count(
+		        new LambdaQueryWrapper<Channel>().eq(Channel::getName, channel.getName()).gt(Channel::getLevel, 1));
+		if(nameCount > 0) {
+			 throw new ServiceException("渠道名称" + channel.getName() + "已存在!");
+		}
+		int mobileCount = channelService.count(
+		        new LambdaQueryWrapper<Channel>().eq(Channel::getMobile, channel.getMobile()));
+		if(mobileCount > 0) {
+			 throw new ServiceException("手机号码" + channel.getMobile() + "已注册!");
+		}
 		// 2.校验佣金比例,不能高于其父渠道的佣金比例
-		
+		Channel parentChannel = channelService.getById(channel.getParentId());
+		if(null != parentChannel && null != parentChannel.getCommRate()) {
+			 if(channel.getCommRate().compareTo(parentChannel.getCommRate()) > 0) {
+				 throw new ServiceException("渠道佣金比例不能高于父渠道的佣金比例");
+			 }
+		}
+		channel.setLevel(parentChannel.getLevel()+1);
 		// 3.插入数据
-		
-		// 4.发送账号创建成功短信
+		boolean res = channelService.save(channel);
+		if(res && null != channel.getChannelId()) {
+			channel.setChannelNo(parentChannel.getChannelNo()+"."+channel.getChannelId());
+			// 生成用户
+			SysUser sysUser = new SysUser();
+			sysUser.setUserName(channel.getMobile());
+		    sysUser.setPhonenumber(channel.getMobile());
+		    sysUser.setNickName(channel.getName());
+		    sysUser.setDeptId(SecurityUtils.getDeptId());
+			sysUser.setCreateBy(SecurityUtils.getUsername());
+			int userNum = userService.insertUser(sysUser);
+		    if (userNum == 0 || null == sysUser.getUserId()) {
+		        throw new ServiceException("新增渠道'" + channel.getName() + "'失败,请联系管理员");
+		    }
+		    channel.setUserId(sysUser.getUserId());
+		    channelService.updateById(channel);
+		    // 4.发送账号创建成功短信
+		}
+	}
+	
+	
+	@Override
+	@Transactional
+	public void saveSite(Channel channel) throws Exception {
+		// 1、校验名称是否重复、手机号是否存在(渠道表)
+		int nameCount = channelService.count(
+		        new LambdaQueryWrapper<Channel>().eq(Channel::getName, channel.getName()).eq(Channel::getLevel, 0));
+		if(nameCount > 0) {
+			 throw new ServiceException("经销商名称" + channel.getName() + "已存在!");
+		}
+		int mobileCount = channelService.count(
+		        new LambdaQueryWrapper<Channel>().eq(Channel::getMobile, channel.getMobile()));
+		if(mobileCount > 0) {
+			 throw new ServiceException("手机号码" + channel.getMobile() + "已注册!");
+		}
+		// 2.校验佣金比例,不能高于其父渠道的佣金比例
+		Channel parentChannel = channelService.getById(channel.getParentId());
+		if(null != parentChannel && null != parentChannel.getCommRate()) {
+			 if(channel.getCommRate().compareTo(parentChannel.getCommRate()) > 0) {
+				 throw new ServiceException("经销商佣金比例不能高于父渠道的佣金比例");
+			 }
+		}
+		channel.setLevel(0);
+		// 3.插入数据
+		boolean res = channelService.save(channel);
+		if(res && null != channel.getChannelId()) {
+			channel.setChannelNo(parentChannel.getChannelNo()+"."+channel.getChannelId());
+			// 生成用户
+			SysUser sysUser = new SysUser();
+			sysUser.setUserName(channel.getMobile());
+		    sysUser.setPhonenumber(channel.getMobile());
+		    sysUser.setNickName(channel.getName());
+		    sysUser.setDeptId(SecurityUtils.getDeptId());
+			sysUser.setCreateBy(SecurityUtils.getUsername());
+			int userNum = userService.insertUser(sysUser);
+		    if (userNum == 0 || null == sysUser.getUserId()) {
+		        throw new ServiceException("新增经销商'" + channel.getName() + "'失败,请联系管理员");
+		    }
+		    channel.setUserId(sysUser.getUserId());
+		    channelService.updateById(channel);
+		    // 4.发送账号创建成功短信
+		}
 	}
 	
 
@@ -61,16 +152,57 @@ public class ChannelServiceImpl extends ServiceImpl<ChannelMapper, Channel> impl
 		
 	    // 4.更新入库
 	}
+	
+	@Override
+	public void updateSite(Channel channel) throws Exception {
+		// 1、校验修改子渠道是否为当前用户的子渠道
+		Long channelId = SecurityUtils.getLoginUser().getChannelId();
+		
+		// 2.校验名称是否重复、手机号是否存在(渠道表);
+		
+		// 3.校验佣金比例,不能高于其父渠道的佣金比例,不能低于其子渠道的最大佣金比例
+		
+	    // 4.更新入库
+	}
 
 	@Override
 	public List<ChannelVO> selectChannelVoList(Channel channel) {
 		QueryWrapper<Channel> queryWrapper = new QueryWrapper<>();
 		queryWrapper.eq("t1.parent_id", channel.getParentId());
+		queryWrapper.gt("t1.level", 0);
 		return getBaseMapper().selectChannelVoList(queryWrapper);
 	}
+	
+	@Override
+	public List<ChannelVO> selectSiteVoList(Channel channel) {
+		QueryWrapper<Channel> queryWrapper = new QueryWrapper<>();
+		queryWrapper.eq("t1.parent_id", channel.getParentId());
+		queryWrapper.eq("t1.level", 0);
+		if(null != channel.getVerifyStatus()) {
+			queryWrapper.eq("t1.verify_status", channel.getVerifyStatus());
+		}
+		if(null != channel.getCertifyStatus()) {
+			queryWrapper.eq("t1.certify_status", channel.getCertifyStatus());
+		}
+		return getBaseMapper().selectSiteVoList(queryWrapper);
+	}
 
 	@Override
 	public Channel getChannelByUserId(Long userId) {
 		return getBaseMapper().selectOne(new LambdaQueryWrapper<Channel>().eq(Channel::getUserId, userId));
 	}
+
+
+	@Override
+	public ChannelOperDataVO getChannelOperData(String channelNo, int days) {
+		ChannelOperDataVO channelOperData = new ChannelOperDataVO();
+		ChannelCommission channelCommission = channelCommissionService.getChannelCommissionCnt(channelNo, days);
+		if(null != channelCommission) {
+			channelOperData.setSaleAmt(channelCommission.getSaleAmt());
+			channelOperData.setCommAmt(channelCommission.getCommAmt());
+		}
+		int newUserCnt = channelUserRelService.getChannelUserCnt(channelNo, days);
+		channelOperData.setNewUserCnt(newUserCnt);
+		return channelOperData;
+	}
 }

+ 4 - 0
mp-service/src/main/java/com/qs/mp/channel/service/impl/ChannelUserRelServiceImpl.java

@@ -17,4 +17,8 @@ import org.springframework.stereotype.Service;
 @Service
 public class ChannelUserRelServiceImpl extends ServiceImpl<ChannelUserRelMapper, ChannelUserRel> implements IChannelUserRelService {
 
+	@Override
+	public int getChannelUserCnt(String channelNo, int days) {
+		return getBaseMapper().getChannelUserCnt(channelNo, days == 1?0: (~(days - 1)));
+	}
 }

+ 24 - 29
mp-service/src/main/java/com/qs/mp/pay/domain/PayOrder.java

@@ -4,16 +4,17 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.qs.mp.common.enums.BizTypeEnum;
 import java.io.Serializable;
 import java.util.Date;
 import lombok.Data;
 
 /**
  * @describe 支付订单表实体类
- * @auther ygp
- * @create 2021-09-11 08:43:10
+ * @auther quanshu
+ * @create 2022-03-03 21:28:15
  */
-@TableName("qs_pay_order")
+@TableName("mp_pay_order")
 @Data
 public class PayOrder implements Serializable {
 
@@ -22,26 +23,20 @@ public class PayOrder implements Serializable {
   /**
    * 订单ID
    */
-  @TableId(value = "order_id", type = IdType.INPUT)
+  @TableId(value = "order_id" , type = IdType.INPUT)
   private String orderId;
 
   /**
-   * 客户ID
+   * 订单类型,1:渠道订单,2用户订单
    */
-  @TableField("cust_id")
-  private String custId;
+  @TableField("biz_type")
+  private BizTypeEnum bizType;
 
   /**
-   * 订单类型,1:商户充值,2:商户订单支付
+   * 业务单据ID,例如:渠道订单关联的渠道订单ID
    */
-  @TableField("order_type")
-  private Integer orderType;
-
-  /**
-   * 类型单据关联对象属性ID,例如:商户充值订单关联,商户ID
-   */
-  @TableField("order_type_ref_id")
-  private String orderTypeRefId;
+  @TableField("biz_id")
+  private String bizId;
 
   /**
    * 支付订单编号,三方支付订单编号
@@ -50,16 +45,16 @@ public class PayOrder implements Serializable {
   private String orderNo;
 
   /**
-   * 订单产生时间2018-07-25 10:10:28
+   * 订单产生时间
    */
   @TableField("order_time")
   private String orderTime;
 
   /**
-   * 支付来源 1:支付宝  2:微信支付 5:云闪付
+   * 支付方式 1:微信  2:支付宝 3:云闪付
    */
-  @TableField("pay_resource")
-  private String payResource;
+  @TableField("pay_type")
+  private Integer payType;
 
   /**
    * 1004:支付宝CTB;1008:微信公众号(需要绑定支付目录)1014: 支付宝服务窗1016:云闪付CTB1017:微信小程序1019:支付宝小程序(请用1014编码)
@@ -70,26 +65,26 @@ public class PayOrder implements Serializable {
   /**
    * 交易金额,以分为单位
    */
-  @TableField("transaction_amount")
-  private Integer transactionAmount;
+  @TableField("trans_amt")
+  private Integer transAmt;
 
   /**
    * 订单备注 长度 100
    */
-  @TableField("order_remark")
-  private String orderRemark;
+  @TableField("remark")
+  private String remark;
 
   /**
    * 订单名称,如:充值,租赁仓库,采购设备等
    */
-  @TableField("order_name")
-  private String orderName;
+  @TableField("title")
+  private String title;
 
   /**
    * 订单状态码
    */
-  @TableField("orderstatus")
-  private String orderstatus;
+  @TableField("status")
+  private String status;
 
   /**
    * 返回状态码
@@ -128,4 +123,4 @@ public class PayOrder implements Serializable {
   private Date gmtModified;
 
 
-}
+}

+ 3 - 3
mp-service/src/main/java/com/qs/mp/pay/mapper/PayOrderMapper.java

@@ -1,11 +1,11 @@
 package com.qs.mp.pay.mapper;
 
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.qs.mp.pay.domain.PayOrder;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 
 /**
- * @auther ygp
- * @create 2021-09-11 08:43:10
+ * @auther quanshu
+ * @create 2022-03-03 21:28:15
  * @describe 支付订单表mapper类
  */
 public interface PayOrderMapper extends BaseMapper<PayOrder> {

+ 4 - 4
mp-service/src/main/java/com/qs/mp/pay/service/IPayOrderService.java

@@ -1,16 +1,16 @@
 package com.qs.mp.pay.service;
 
-import com.baomidou.mybatisplus.extension.service.IService;
 import com.qs.mp.pay.domain.PayOrder;
+import com.baomidou.mybatisplus.extension.service.IService;
 
 /**
  * <p>
  * 支付订单表 服务类
  * </p>
  *
- * @author ygp
- * @since 2021-09-11
+ * @author quanshu
+ * @since 2022-03-03
  */
 public interface IPayOrderService extends IService<PayOrder> {
-  boolean merchRecharge(PayOrder payOrder);
+
 }

+ 15 - 8
mp-service/src/main/java/com/qs/mp/pay/service/IWalletService.java

@@ -1,6 +1,8 @@
 package com.qs.mp.pay.service;
 
 import com.alibaba.fastjson.JSONObject;
+import com.qs.mp.common.enums.BizTypeEnum;
+import com.qs.mp.pay.domain.PayOrder;
 
 /**
  * @auther duota
@@ -8,13 +10,16 @@ import com.alibaba.fastjson.JSONObject;
  * @describe
  */
 public interface IWalletService {
+
   /**
-   * 账户充值
-   * @param merchId
-   * @param money 单位分
+   * 渠道订单支付
+   * @param bizType
+   * @param bizId
+   * @param openId
+   * @param money
    * @return
    */
-  public JSONObject merchRechargeOrderCreate(String custId,String merchId,String refType,String refId, String userId,int money);
+  JSONObject channelPay(BizTypeEnum bizType, String bizId, String openId, int money);
 
   /**
    *
@@ -22,7 +27,7 @@ public interface IWalletService {
    * @param orderNo
    * @return
    */
-  public void payOrderStatusHandle(String orderNo);
+  void payOrderStatusHandle(String orderNo);
 
   /**
    * 账户提现
@@ -30,7 +35,7 @@ public interface IWalletService {
    * @param money
    * @return
    */
-  public boolean drawings(String merchId,int money);
+  boolean drawings(String merchId,int money);
 
   /**
    * 账户提现申请
@@ -38,13 +43,15 @@ public interface IWalletService {
    * @param money 单位分
    * @return
    */
-  public boolean drawingsApply(String merchId,int money);
+  boolean drawingsApply(String merchId,int money);
 
   /**
    * 提现申请完成,充值冻结资金
    * @param merchId
    * @return
    */
-  public boolean completeDrawingsApply(String merchId);
+  boolean completeDrawingsApply(String merchId);
+
+  boolean merchRecharge(PayOrder payOrder);
 
 }

+ 4 - 79
mp-service/src/main/java/com/qs/mp/pay/service/impl/PayOrderServiceImpl.java

@@ -1,95 +1,20 @@
 package com.qs.mp.pay.service.impl;
 
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qs.mp.pay.domain.PayOrder;
 import com.qs.mp.pay.mapper.PayOrderMapper;
 import com.qs.mp.pay.service.IPayOrderService;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
 
 /**
  * <p>
  * 支付订单表 服务实现类
  * </p>
  *
- * @author ygp
- * @since 2021-09-11
+ * @author quanshu
+ * @since 2022-03-03
  */
 @Service
-public class PayOrderServiceImpl extends ServiceImpl<PayOrderMapper, PayOrder> implements
-    IPayOrderService {
-
-  protected final Logger logger = LoggerFactory.getLogger(this.getClass().getSimpleName());
+public class PayOrderServiceImpl extends ServiceImpl<PayOrderMapper, PayOrder> implements IPayOrderService {
 
-  @Override
-  @Transactional
-  public boolean merchRecharge(PayOrder payOrder) {
-    /*String merchId = payOrder.getOrderTypeRefId();
-    String orderNo = payOrder.getOrderNo();
-    //根据订单类型,查询商户ID
-    if(PayOrderTypeEnum.ORDER_MRARCH_BILL.getValue() == payOrder.getOrderType().intValue()){
-      //商户支付订单,查询商户信息
-      MerchantBill merchantBill = merchantBillService.getById(payOrder.getOrderTypeRefId());
-      if(merchantBill == null){
-        LogUtil.error(logger,"账单不存在.billId:"+payOrder.getOrderTypeRefId());
-        return false;
-      }
-      merchId = merchantBill.getMerchId();
-    }
-    //查询资金流水表,是否存在重复订单号
-    LambdaQueryWrapper<MerchantMoneyLog> logWrapper = new LambdaQueryWrapper<>();
-    logWrapper.eq(MerchantMoneyLog::getRefId, orderNo);
-    logWrapper.eq(MerchantMoneyLog::getMerchId, merchId);
-    logWrapper.eq(MerchantMoneyLog::getRefType, payOrder.getOrderType());
-    List<MerchantMoneyLog> logList = merchantMoneyLogService.list(logWrapper);
-    if (logList.size() == 0) {
-      Merchant merchant = merchantService.getById(merchId);
-      if(null == merchant){
-        LogUtil.error(logger,"商户不存在.merchId:"+merchId);
-        return false;
-      }
-      MerchantMoneyLog merchantMoneyLog = new MerchantMoneyLog();
-      merchantMoneyLog.setBizTime(
-          DateUtils.parseStrToDate(payOrder.getCompleteDate(), DateUtils.YYYY_MM_DD_HH_MM_SS));
-      merchantMoneyLog.setMerchId(merchId); //商户ID
-      merchantMoneyLog.setType(MerchantMoneyEnum.TYPE_RECHARGE);
-      merchantMoneyLog.setCustId(payOrder.getCustId());  //客户ID
-      merchantMoneyLog.setStoreId(merchant.getStoreId());
-      merchantMoneyLog.setLogMoney(payOrder.getTransactionAmount());  //交易金额
-      merchantMoneyLog.setRefId(payOrder.getOrderId()); //订单ID,全局唯一
-      merchantMoneyLog.setRefType(payOrder.getOrderType()); //单据类型
-      boolean result = merchantMoneyLogService.changeMerchantMoney(merchantMoneyLog);
-      Customer customer = customerService.getById(merchantMoneyLog.getCustId());
-      // 客户中配置了提现卡号,则认为是充值到了平台账户
-      if (null != customer && StringUtils.isNotBlank(customer.getBankCardNo())) {
-        CustomerMoneyLog customerMoneyLog = new CustomerMoneyLog();
-        customerMoneyLog.setBizTime(merchantMoneyLog.getBizTime());
-        customerMoneyLog.setType(CustomerMoneyTypeEnum.MERCH_RECHARGE);
-        customerMoneyLog.setCustId(merchantMoneyLog.getCustId());
-        customerMoneyLog.setLogMoney(merchantMoneyLog.getLogMoney());
-        customerMoneyLog.setIncomeExpense(MerchantMoneyEnum.INCOME);
-        customerMoneyLog.setRefId(payOrder.getOrderId());
-        customerMoneyLog.setRefType(CustomerMoneyTypeEnum.MERCH_RECHARGE.getValue());
-        Store store = storeService.getById(merchant.getStoreId());
-        customerMoneyLog.setLogText(merchant.getBrand() + "-" + store.getName());
-        customerMoneyLogService.changeCustomerMoney(customerMoneyLog);
-      }
-      if (result) {
-        //充值成功,给订阅者发送消息
-        try {
-          pulsarClientService.producer(MqTopicType.merch_recharge, JSONObject.toJSONString(merchantMoneyLog));
-        } catch (PulsarClientException e) {
-          LogUtil.error(logger,"发送异步消息失败.",e);
-        }
-        return true;
-      }
-    }else{
-      //Todo 数据结构异常,告警
-      LogUtil.error(logger,"数据结构异常,违反唯一约束,orderNo:"+orderNo);
-      return false;
-    }*/
-    return false;
-  }
 }

+ 87 - 21
mp-service/src/main/java/com/qs/mp/pay/service/impl/WalletServiceImpl.java

@@ -2,7 +2,8 @@ package com.qs.mp.pay.service.impl;
 
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.qs.mp.common.enums.PayOrderTypeEnum;
+import com.qs.mp.channel.service.IChannelOrderService;
+import com.qs.mp.common.enums.BizTypeEnum;
 import com.qs.mp.common.utils.DateUtils;
 import com.qs.mp.common.utils.LogUtil;
 import com.qs.mp.common.utils.StringUtils;
@@ -18,6 +19,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 /**
  * @auther duota
@@ -32,6 +34,9 @@ public class WalletServiceImpl implements IWalletService {
   @Autowired
   private IPayOrderService payOrderService;
 
+  @Autowired
+  private IChannelOrderService channelOrderService;
+
   @Autowired
   private BizIdGenerator bizIdGenerator;
 
@@ -54,15 +59,10 @@ public class WalletServiceImpl implements IWalletService {
   private static final String PAY_RESOURCE_TYPE = "1017"; //2:微信小程序
 
   @Override
-  public JSONObject merchRechargeOrderCreate(String custId,String merchId,String refType,String refId,String openId, int money) {
+  public JSONObject channelPay(BizTypeEnum bizType, String bizId, String openId, int money) {
     String reqUrl = baseUrl+"/pay/payMoneyCTB";
     JSONObject params = new JSONObject();
-    //merchid不为空,则为商户充值,如果merchid为空,则为客户充值
-    //查询客户三方支付信息
-      // 客户充值的商户号和签名为平台
-      params = buildPayOrderReqData(payShopNo, paySign, money, openId);
-
-
+    params = buildPayOrderReqData(payShopNo, paySign, money, openId);
     String result = OkHttpUtil.postJsonParams(reqUrl,params.toJSONString());
     logger.info("request params:"+ params.toJSONString()+"  result:"+result);
     if(StringUtils.isBlank(result)){
@@ -79,20 +79,15 @@ public class WalletServiceImpl implements IWalletService {
       PayOrder payOrder = buildPayOrder(params);
       payOrder.setOrderId(resultJson.getString("shop_order_no"));
       payOrder.setOrderNo(orderNo);
-      payOrder.setCustId(custId);
       payOrder.setCode(code);
-      //logger.info("++++++++++++++++++++++++++++++++order type:"+OrderTypeEnum.ORDER_MERCH_RECHARGE.getValue().intValue());
-      //payOrder.setOrderType(OrderTypeEnum.ORDER_MERCH_RECHARGE.getValue());
-      if(!StringUtils.isBlank(refType) && refType.equalsIgnoreCase(String.valueOf(PayOrderTypeEnum.ORDER_MERCH_RECHARGE.getValue()))){
-        payOrder.setOrderType(PayOrderTypeEnum.ORDER_MERCH_RECHARGE.getValue()); //商户账单支付
-        payOrder.setOrderTypeRefId(refId);
-      }
-      payOrder.setOrderstatus(orderstatus);
+      payOrder.setBizType(bizType);
+      payOrder.setBizId(bizId);
+      payOrder.setStatus(orderstatus);
       boolean ret = payOrderService.save(payOrder);
       if(ret){
         return data;
       }else{
-        LogUtil.error(logger,"充值订单数据库保存失败.");
+        LogUtil.error(logger,"渠道支付订单数据库保存失败.");
       }
     }
     return null;
@@ -105,16 +100,16 @@ public class WalletServiceImpl implements IWalletService {
     //查询支付状态为1:支付成功,2:订单创建成功,等待支付。
     LambdaQueryWrapper<PayOrder> wrapper = new LambdaQueryWrapper();
     wrapper.eq(PayOrder::getOrderId,orderNo);
-    wrapper.eq(PayOrder::getOrderstatus,"1");
+    wrapper.eq(PayOrder::getStatus,"1");
     List<PayOrder> payOrderList = payOrderService.list(wrapper);
     if(payOrderList.size() != 1){
       //数据结构异常,告警
       LogUtil.error(logger,"数据结构异常,违反唯一约束,orderNo:"+orderNo);
     }
-    //商户充值订单
+    //渠道订单
     PayOrder payOrder = payOrderList.get(0);
-    logger.info("order type:"+payOrder.getOrderType());
-    if (PayOrderTypeEnum.ORDER_MERCH_RECHARGE.getValue() == payOrder.getOrderType().intValue()) {
+    logger.info("biz type:"+payOrder.getBizType());
+    if (BizTypeEnum.CHANNEL_ORDER == payOrder.getBizType()) {
       // TODO 业务订单支付成功,调用业务订单服务处理
       // customerOrderService.paySuccess(payOrder);
     }
@@ -170,4 +165,75 @@ public class WalletServiceImpl implements IWalletService {
     sendData.put("app_id", appId);
     return sendData;
   }
+
+
+  @Override
+  @Transactional
+  public boolean merchRecharge(PayOrder payOrder) {
+    /*String merchId = payOrder.getOrderTypeRefId();
+    String orderNo = payOrder.getOrderNo();
+    //根据订单类型,查询商户ID
+    if(PayOrderTypeEnum.ORDER_MRARCH_BILL.getValue() == payOrder.getOrderType().intValue()){
+      //商户支付订单,查询商户信息
+      MerchantBill merchantBill = merchantBillService.getById(payOrder.getOrderTypeRefId());
+      if(merchantBill == null){
+        LogUtil.error(logger,"账单不存在.billId:"+payOrder.getOrderTypeRefId());
+        return false;
+      }
+      merchId = merchantBill.getMerchId();
+    }
+    //查询资金流水表,是否存在重复订单号
+    LambdaQueryWrapper<MerchantMoneyLog> logWrapper = new LambdaQueryWrapper<>();
+    logWrapper.eq(MerchantMoneyLog::getRefId, orderNo);
+    logWrapper.eq(MerchantMoneyLog::getMerchId, merchId);
+    logWrapper.eq(MerchantMoneyLog::getRefType, payOrder.getOrderType());
+    List<MerchantMoneyLog> logList = merchantMoneyLogService.list(logWrapper);
+    if (logList.size() == 0) {
+      Merchant merchant = merchantService.getById(merchId);
+      if(null == merchant){
+        LogUtil.error(logger,"商户不存在.merchId:"+merchId);
+        return false;
+      }
+      MerchantMoneyLog merchantMoneyLog = new MerchantMoneyLog();
+      merchantMoneyLog.setBizTime(
+          DateUtils.parseStrToDate(payOrder.getCompleteDate(), DateUtils.YYYY_MM_DD_HH_MM_SS));
+      merchantMoneyLog.setMerchId(merchId); //商户ID
+      merchantMoneyLog.setType(MerchantMoneyEnum.TYPE_RECHARGE);
+      merchantMoneyLog.setCustId(payOrder.getCustId());  //客户ID
+      merchantMoneyLog.setStoreId(merchant.getStoreId());
+      merchantMoneyLog.setLogMoney(payOrder.getTransactionAmount());  //交易金额
+      merchantMoneyLog.setRefId(payOrder.getOrderId()); //订单ID,全局唯一
+      merchantMoneyLog.setRefType(payOrder.getOrderType()); //单据类型
+      boolean result = merchantMoneyLogService.changeMerchantMoney(merchantMoneyLog);
+      Customer customer = customerService.getById(merchantMoneyLog.getCustId());
+      // 客户中配置了提现卡号,则认为是充值到了平台账户
+      if (null != customer && StringUtils.isNotBlank(customer.getBankCardNo())) {
+        CustomerMoneyLog customerMoneyLog = new CustomerMoneyLog();
+        customerMoneyLog.setBizTime(merchantMoneyLog.getBizTime());
+        customerMoneyLog.setType(CustomerMoneyTypeEnum.MERCH_RECHARGE);
+        customerMoneyLog.setCustId(merchantMoneyLog.getCustId());
+        customerMoneyLog.setLogMoney(merchantMoneyLog.getLogMoney());
+        customerMoneyLog.setIncomeExpense(MerchantMoneyEnum.INCOME);
+        customerMoneyLog.setRefId(payOrder.getOrderId());
+        customerMoneyLog.setRefType(CustomerMoneyTypeEnum.MERCH_RECHARGE.getValue());
+        Store store = storeService.getById(merchant.getStoreId());
+        customerMoneyLog.setLogText(merchant.getBrand() + "-" + store.getName());
+        customerMoneyLogService.changeCustomerMoney(customerMoneyLog);
+      }
+      if (result) {
+        //充值成功,给订阅者发送消息
+        try {
+          pulsarClientService.producer(MqTopicType.merch_recharge, JSONObject.toJSONString(merchantMoneyLog));
+        } catch (PulsarClientException e) {
+          LogUtil.error(logger,"发送异步消息失败.",e);
+        }
+        return true;
+      }
+    }else{
+      //Todo 数据结构异常,告警
+      LogUtil.error(logger,"数据结构异常,违反唯一约束,orderNo:"+orderNo);
+      return false;
+    }*/
+    return false;
+  }
 }

+ 0 - 1
mp-service/src/main/java/com/qs/mp/system/service/id/BizIdGenerator.java

@@ -24,7 +24,6 @@ public class BizIdGenerator {
      * 长度20位
      * @return
      */
-    @Deprecated
     public String newId(){
         return String.valueOf(bizIdWorker.nextId());
     }

+ 6 - 4
mp-service/src/main/resources/mapper/admin/TicketBoxMapper.xml

@@ -12,8 +12,8 @@
         <result column="type" property="type" />
         <result column="quantity" property="quantity" />
         <result column="sale_qty" property="saleQty" />
-        <result column="box_price" property="boxPrice" />
-        <result column="box_sale_price" property="boxSalePrice" />
+        <result column="pkg_price" property="pkgPrice" />
+        <result column="pkg_sale_price" property="pkgSalePrice" />
         <result column="pkg_unit" property="pkgUnit" />
         <result column="pkg_qty" property="pkgQty" />
         <result column="sale_pkg_qty" property="salePkgQty" />
@@ -21,7 +21,9 @@
         <result column="sale_price" property="salePrice" />
         <result column="sale_comm_rate" property="saleCommRate" />
         <result column="properties" property="properties" />
-        <result column="puton_time" property="putonTime" />
+        <result column="on_time" property="onTime" />
+        <result column="off_time" property="offTime" />
+        <result column="manual_off" property="manualOff" />
         <result column="status" property="status" />
         <result column="is_deleted" property="isDeleted" />
         <result column="created_time" property="createdTime" />
@@ -30,7 +32,7 @@
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        box_id, title, pic_url, category_id, description, type, quantity, sale_qty, box_price, box_sale_price, pkg_unit, pkg_qty, sale_pkg_qty, face_price, sale_price, sale_comm_rate, properties, puton_time, status, is_deleted, created_time, updated_time
+        box_id, title, pic_url, category_id, description, type, quantity, sale_qty, pkg_price, pkg_sale_price, pkg_unit, pkg_qty, sale_pkg_qty, face_price, sale_price, sale_comm_rate, properties, on_time, off_time, manual_off, status, is_deleted, created_time, updated_time
     </sql>
 
 </mapper>

+ 14 - 2
mp-service/src/main/resources/mapper/channel/ChannelCommissionMapper.xml

@@ -8,7 +8,7 @@
         <result column="channel_id" property="channelId" />
         <result column="order_id" property="orderId" />
         <result column="ticket_id" property="ticketId" />
-        <result column="sale_price" property="salePrice" />
+        <result column="sale_amt" property="saleAmt" />
         <result column="sale_comm_rate" property="saleCommRate" />
         <result column="sale_comm_amt" property="saleCommAmt" />
         <result column="comm_rate" property="commRate" />
@@ -19,7 +19,19 @@
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id, channel_id, order_id, ticket_id, sale_price, sale_comm_rate, sale_comm_amt, comm_rate, comm_amt, created_time, updated_time
+        id, channel_id, order_id, ticket_id, sale_amt, sale_comm_rate, sale_comm_amt, comm_rate, comm_amt, created_time, updated_time
     </sql>
+    
+    
+      <!-- 查询子渠道信息 -->
+    <select id="getChannelCommissionCnt" resultMap="BaseResultMap">
+		select IFNULL(SUM(t1.sale_amt),0) sale_amt, IFNULL(SUM(t1.comm_amt),0) comm_amt
+		from mp_channel_commission t1
+		left join mp_channel t2 on t1.channel_id = t2.channel_id
+		where t2.channel_no like concat(#{channelNo},'.%')
+		and date_format(t1.created_time,'%Y-%m-%d') between date_format(DATE_ADD(CURDATE(),INTERVAL #{days} DAY),'%Y-%m-%d') 
+		and date_format(CURDATE(),'%Y-%m-%d')
+	</select>
+    
 
 </mapper>

+ 48 - 8
mp-service/src/main/resources/mapper/channel/ChannelMapper.xml

@@ -33,7 +33,7 @@
     </resultMap>
 
     <!-- 通用查询VO映射结果 -->
-    <resultMap id="VoResultMap" type="com.qs.mp.channel.domain.vo.ChannelVO">
+    <resultMap id="ChannelVoResultMap" type="com.qs.mp.channel.domain.vo.ChannelVO">
         <id column="channel_id" property="channelId" />
         <result column="channel_no" property="channelNo" />
         <result column="name" property="name" />
@@ -64,6 +64,39 @@
         <association property="siteCnt" javaType="java.lang.Integer" select="getChannelSiteCnt" column="{channelNo=channelNo}" />
         <association property="userCnt" javaType="java.lang.Integer" select="com.qs.mp.channel.mapper.ChannelUserRelMapper.getChannelUserCnt" column="{channelNo=channelNo}" />
     </resultMap>
+    
+    
+    <!-- 通用查询VO映射结果 -->
+    <resultMap id="SiteVoResultMap" type="com.qs.mp.channel.domain.vo.ChannelVO">
+        <id column="channel_id" property="channelId" />
+        <result column="channel_no" property="channelNo" />
+        <result column="name" property="name" />
+        <result column="parent_id" property="parentId" />
+        <result column="level" property="level" />
+        <result column="site_type" property="siteType" />
+        <result column="comm_rate" property="commRate" />
+        <result column="province" property="province" />
+        <result column="province_id" property="provinceId" />
+        <result column="city" property="city" />
+        <result column="city_id" property="cityId" />
+        <result column="area" property="area" />
+        <result column="area_id" property="areaId" />
+        <result column="address" property="address" />
+        <result column="contact" property="contact" />
+        <result column="mobile" property="mobile" />
+        <result column="user_id" property="userId" />
+        <result column="money" property="money" />
+        <result column="frozen_money" property="frozenMoney" />
+        <result column="certify_status" property="certifyStatus" />
+        <result column="verify_status" property="verifyStatus" />
+        <result column="biz_license_pic" property="bizLicensePic" />
+        <result column="door_pic" property="doorPic" />
+        <result column="memo" property="memo" />
+        <result column="created_time" property="createdTime" />
+        <result column="updated_time" property="updatedTime" />
+        <result column="parentName" property="parentName" />
+        <association property="userCnt" javaType="java.lang.Integer" select="com.qs.mp.channel.mapper.ChannelUserRelMapper.getChannelUserCnt" column="{channelNo=channelNo}" />
+    </resultMap>
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
@@ -71,14 +104,21 @@
     </sql>
 
     <!-- 查询子渠道信息 -->
-    <select id="selectChannelVoList" resultMap="VoResultMap">
-		select t1.* , t2.siteCnt, t3.userCnt, t4.name parentName
+    <select id="selectChannelVoList" resultMap="ChannelVoResultMap">
+		select t1.* , t2.name parentName
+		from mp_channel t1
+		left join mp_channel t2 on t1.parent_id = t2.channel_id
+		${ew.customSqlSegment}
+		order by t1.channel_id desc
+	</select>
+	
+	 <!-- 查询子经销商信息 -->
+    <select id="selectSiteVoList" resultMap="SiteVoResultMap">
+		select t1.* , t2.name parentName
 		from mp_channel t1
-		left join (select parent_id, count(*) as siteCnt from mp_channel where `level` = 0 GROUP BY parent_id ) t2 on t1.channel_id = t2.parent_id
-		left join (select channel_id, count(user_id) as userCnt from mp_channel_user_rel GROUP BY channel_id ) t3 on t1.channel_id = t3.channel_id
-		left join mp_channel t4 on t1.parent_id = t4.channel_id
+		left join mp_channel t2 on t1.parent_id = t2.channel_id
 		${ew.customSqlSegment}
-		order by a.channel_id desc
+		order by t1.channel_id desc
 	</select>
 
 	<!-- 查询渠道及其子渠道经销商用户数总和 -->
@@ -87,7 +127,7 @@
 		from mp_channel t1
 		left join mp_channel t2 on t1.parent_id = t2.channel_id
 		where t1.`level`= 0 and t1.certify_status = 'y'
-		and t2.channel_no like concat(#{channelNo}, '%')
+		and t2.channel_no like concat(#{channelNo}, '.%')
     </select>
 
 </mapper>

+ 4 - 3
mp-service/src/main/resources/mapper/channel/ChannelUserRelMapper.xml

@@ -21,9 +21,10 @@
         select count(t1.user_id) as userCnt 
 		from mp_channel_user_rel t1
 		left join mp_channel t2 on t1.channel_id = t2.channel_id
-		where t2.channel_no like concat(#{channelNo}, '%')
+		where t2.channel_no like concat(#{channelNo}, '.%')
+		<if test="days != null and days != ''">
+			AND date_format(t1.created_time,'%Y-%m-%d') between date_format(DATE_ADD(CURDATE(),INTERVAL #{days} DAY),'%Y-%m-%d') and date_format(CURDATE(),'%Y-%m-%d')
+		 </if>
     </select>
-    
-    
 
 </mapper>

+ 8 - 9
mp-service/src/main/resources/mapper/pay/PayOrderMapper.xml

@@ -5,17 +5,16 @@
     <!-- 通用查询映射结果 -->
     <resultMap id="BaseResultMap" type="com.qs.mp.pay.domain.PayOrder">
         <id column="order_id" property="orderId" />
-        <result column="cust_id" property="custId" />
-        <result column="order_type" property="orderType" />
-        <result column="order_type_ref_id" property="orderTypeRefId" />
+        <result column="biz_type" property="bizType" />
+        <result column="biz_id" property="bizId" />
         <result column="order_no" property="orderNo" />
         <result column="order_time" property="orderTime" />
-        <result column="pay_resource" property="payResource" />
+        <result column="pay_type" property="payType" />
         <result column="trans_type_code" property="transTypeCode" />
-        <result column="transaction_amount" property="transactionAmount" />
-        <result column="order_remark" property="orderRemark" />
-        <result column="order_name" property="orderName" />
-        <result column="orderstatus" property="orderstatus" />
+        <result column="trans_amt" property="transAmt" />
+        <result column="remark" property="remark" />
+        <result column="title" property="title" />
+        <result column="status" property="status" />
         <result column="code" property="code" />
         <result column="result" property="result" />
         <result column="complete_date" property="completeDate" />
@@ -26,7 +25,7 @@
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        order_id, cust_id, order_type, order_type_ref_id, order_no, order_time, pay_resource, trans_type_code, transaction_amount, order_remark, order_name, orderstatus, code, result, complete_date, channel_no, gmt_created, gmt_modified
+        order_id, biz_type, biz_id, order_no, order_time, pay_type, trans_type_code, trans_amt, remark, title, status, code, result, complete_date, channel_no, gmt_created, gmt_modified
     </sql>
 
 </mapper>