Browse Source

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

Dev

See merge request quanshu/mp-server!894
jiang hao 2 years ago
parent
commit
9abed8cfe6

+ 296 - 289
mp-admin/src/main/java/com/qs/mp/web/controller/api/admin/CouponMgrController.java

@@ -67,319 +67,326 @@ import org.springframework.web.bind.annotation.RestController;
 @RequestMapping("/api/v1/mp/admin/coupon/*")
 public class CouponMgrController extends BaseApiController {
 
-	@Autowired
-	private ICouponService couponService;
+    @Autowired
+    private ICouponService couponService;
 
-	@Autowired
-	private ICouponTicketService couponTicketService;
+    @Autowired
+    private ICouponTicketService couponTicketService;
 
-	@Autowired
-	private ITicketBoxService ticketBoxService;
+    @Autowired
+    private ITicketBoxService ticketBoxService;
 
-	@Autowired
-	private ICouponChannelService couponChannelService;
+    @Autowired
+    private ICouponChannelService couponChannelService;
 
-	@Autowired
-	private IChannelService channelService;
+    @Autowired
+    private IChannelService channelService;
 
-	@Autowired
-	private ISysUserService userService;
+    @Autowired
+    private ISysUserService userService;
 
-	@Autowired
-	private MapperFacade mapperFacade;
+    @Autowired
+    private MapperFacade mapperFacade;
 
-	/**
-	 * 获取代金券列表信息,支持翻页
-	 *
-	 * @return
-	 */
-	@PostMapping("/list")
-	@PreAuthorize("@ss.hasPermi('business:coupon:list')")
-	@ApiOperation("获取代金券列表信息,支持翻页")
-	@ApiResponses(
-			@ApiResponse(code = 200, message = "成功", response = Coupon.class)
-	)
-	public TableDataInfo listCoupon(@RequestBody CouponParam coupon) {
-		List<Coupon> list = new ArrayList<Coupon>();
-		startPage();
-		QueryWrapper<Coupon> queryWrapper = new QueryWrapper<Coupon>();
-		queryWrapper.lambda().like(null != coupon && StringUtils.isNotBlank(coupon.getTitle()), Coupon::getTitle, coupon.getTitle());
-		queryWrapper.lambda().eq(null != coupon && null != coupon.getStatus(), Coupon::getStatus, coupon.getStatus());
-		queryWrapper.lambda().eq(null != coupon && null != coupon.getType(), Coupon::getType, coupon.getType());
-		queryWrapper.lambda().notIn(null != coupon && !CollectionUtils.isEmpty(coupon.getExcludeCouponIds()), Coupon::getCouponId, coupon.getExcludeCouponIds());
-		queryWrapper.lambda().eq(Coupon::getIsDeleted, 0);
-		queryWrapper.orderByAsc("FIELD(`status`, 'init', 'on', 'off')");
-		queryWrapper.lambda().orderByDesc(Coupon::getCouponId);
-		list = couponService.list(queryWrapper);
-		return getDataTable(list);
-	}
+    /**
+     * 获取代金券列表信息,支持翻页
+     *
+     * @return
+     */
+    @PostMapping("/list")
+    @PreAuthorize("@ss.hasPermi('business:coupon:list')")
+    @ApiOperation("获取代金券列表信息,支持翻页")
+    @ApiResponses(
+        @ApiResponse(code = 200, message = "成功", response = Coupon.class)
+    )
+    public TableDataInfo listCoupon(@RequestBody CouponParam coupon) {
+        List<Coupon> list = new ArrayList<Coupon>();
+        startPage();
+        QueryWrapper<Coupon> queryWrapper = new QueryWrapper<Coupon>();
+        queryWrapper.lambda()
+            .like(null != coupon && StringUtils.isNotBlank(coupon.getTitle()), Coupon::getTitle, coupon.getTitle());
+        queryWrapper.lambda().eq(null != coupon && null != coupon.getStatus(), Coupon::getStatus, coupon.getStatus());
+        queryWrapper.lambda().eq(null != coupon && null != coupon.getType(), Coupon::getType, coupon.getType());
+        queryWrapper.lambda()
+            .notIn(null != coupon && !CollectionUtils.isEmpty(coupon.getExcludeCouponIds()), Coupon::getCouponId,
+                coupon.getExcludeCouponIds());
+        queryWrapper.lambda().eq(Coupon::getIsDeleted, 0);
+        queryWrapper.orderByAsc("FIELD(`status`, 'init', 'on', 'off')");
+        queryWrapper.lambda().orderByDesc(Coupon::getCouponId);
+        list = couponService.list(queryWrapper);
+        return getDataTable(list);
+    }
 
 
-	/**
-	 * 获取代金券详情信息
-	 *
-	 * @param
-	 * @return
-	 */
-	@PostMapping(value = "/detail")
-	@PreAuthorize("@ss.hasPermi('business:coupon:query')")
-	@ApiOperation("获取代金券详情信息")
-	@ApiResponses(
-			@ApiResponse(code = 200, message = "操作成功", response = CouponVO.class)
-	)
-	public AjaxResult getCouponDetail(@RequestBody JSONObject jsonObject) {
-		String couponId = jsonObject.getString("couponId");
-		if (StringUtils.isBlank(couponId)){
-			return error(ErrorCodeEnum.ERROR_CODE_1001);
-		}
-		Coupon coupon = couponService.getById(Long.valueOf(couponId));
-		if(null == coupon) {
-			 return error(ErrorCodeEnum.ERROR_CODE_1001);
-		}
-		CouponVO couponVO = new CouponVO();
-		BeanUtils.copyProperties(coupon, couponVO);
-		List<TicketBox> ticketBoxList = new ArrayList<>();
-		// 查询盲票限制列表
-		List<CouponTicket> ticketList = new ArrayList<>();
-		LambdaQueryWrapper<CouponTicket> ticketQueryWrapper = new LambdaQueryWrapper<>();
-		ticketQueryWrapper.eq(CouponTicket::getCouponId, coupon.getCouponId());
-		ticketQueryWrapper.orderByDesc(CouponTicket::getCreatedTime);
-		ticketList = couponTicketService.list(ticketQueryWrapper);
-		if(null != ticketList && ticketList.size() > 0) {
-			List<String> boxIdList = ticketList.stream().map(CouponTicket::getBoxId).collect(Collectors.toList());
-			if(null != boxIdList && boxIdList.size() > 0) {
-				LambdaQueryWrapper<TicketBox> ticketBoxQueryWrapper = new LambdaQueryWrapper<>();
-				ticketBoxQueryWrapper.in(TicketBox::getBoxId, boxIdList);
-				ticketBoxQueryWrapper.orderByDesc(TicketBox::getCreatedTime);
-				ticketBoxList = ticketBoxService.list(ticketBoxQueryWrapper);
-				couponVO.setTicketBoxList(ticketBoxList);
-			}
-		}
-		// 查询门店限制列表
-		List<CouponChannel> couponChannelList = new ArrayList<>();
-		LambdaQueryWrapper<CouponChannel> couponChanneQueryWrapper = new LambdaQueryWrapper<>();
-		couponChanneQueryWrapper.eq(CouponChannel::getCouponId, coupon.getCouponId());
-		couponChanneQueryWrapper.orderByDesc(CouponChannel::getCreatedTime);
-		couponChannelList = couponChannelService.list(couponChanneQueryWrapper);
-		if(null != couponChannelList && couponChannelList.size() > 0) {
-			List<Long> channelIdList = couponChannelList.stream().map(CouponChannel::getChannelId).collect(Collectors.toList());
-			if(null != channelIdList && channelIdList.size() > 0) {
-				QueryWrapper<Channel> queryWrapper = new QueryWrapper<>();
-				queryWrapper.in("t1.channel_id", channelIdList);
-				List<ChannelVO> list = channelService.selectSaleSiteList(queryWrapper);
+    /**
+     * 获取代金券详情信息
+     *
+     * @param
+     * @return
+     */
+    @PostMapping(value = "/detail")
+    @PreAuthorize("@ss.hasPermi('business:coupon:query')")
+    @ApiOperation("获取代金券详情信息")
+    @ApiResponses(
+        @ApiResponse(code = 200, message = "操作成功", response = CouponVO.class)
+    )
+    public AjaxResult getCouponDetail(@RequestBody JSONObject jsonObject) {
+        String couponId = jsonObject.getString("couponId");
+        if (StringUtils.isBlank(couponId)) {
+            return error(ErrorCodeEnum.ERROR_CODE_1001);
+        }
+        Coupon coupon = couponService.getById(Long.valueOf(couponId));
+        if (null == coupon) {
+            return error(ErrorCodeEnum.ERROR_CODE_1001);
+        }
+        CouponVO couponVO = new CouponVO();
+        BeanUtils.copyProperties(coupon, couponVO);
+        List<TicketBox> ticketBoxList = new ArrayList<>();
+        // 查询盲票限制列表
+        List<CouponTicket> ticketList = new ArrayList<>();
+        LambdaQueryWrapper<CouponTicket> ticketQueryWrapper = new LambdaQueryWrapper<>();
+        ticketQueryWrapper.eq(CouponTicket::getCouponId, coupon.getCouponId());
+        ticketQueryWrapper.orderByDesc(CouponTicket::getCreatedTime);
+        ticketList = couponTicketService.list(ticketQueryWrapper);
+        if (null != ticketList && ticketList.size() > 0) {
+            List<String> boxIdList = ticketList.stream().map(CouponTicket::getBoxId).collect(Collectors.toList());
+            if (null != boxIdList && boxIdList.size() > 0) {
+                LambdaQueryWrapper<TicketBox> ticketBoxQueryWrapper = new LambdaQueryWrapper<>();
+                ticketBoxQueryWrapper.in(TicketBox::getBoxId, boxIdList);
+                ticketBoxQueryWrapper.orderByDesc(TicketBox::getCreatedTime);
+                ticketBoxList = ticketBoxService.list(ticketBoxQueryWrapper);
+                couponVO.setTicketBoxList(ticketBoxList);
+            }
+        }
+        // 查询门店限制列表
+        List<CouponChannel> couponChannelList = new ArrayList<>();
+        LambdaQueryWrapper<CouponChannel> couponChanneQueryWrapper = new LambdaQueryWrapper<>();
+        couponChanneQueryWrapper.eq(CouponChannel::getCouponId, coupon.getCouponId());
+        couponChanneQueryWrapper.orderByDesc(CouponChannel::getCreatedTime);
+        couponChannelList = couponChannelService.list(couponChanneQueryWrapper);
+        if (null != couponChannelList && couponChannelList.size() > 0) {
+            List<Long> channelIdList = couponChannelList.stream().map(CouponChannel::getChannelId)
+                .collect(Collectors.toList());
+            if (null != channelIdList && channelIdList.size() > 0) {
+                QueryWrapper<Channel> queryWrapper = new QueryWrapper<>();
+                queryWrapper.in("t1.channel_id", channelIdList);
+                List<ChannelVO> list = channelService.selectSaleSiteList(queryWrapper);
 
-				if(null != list && list.size() > 0) {
-					for(ChannelVO channelVO : list) {
-						if(null != channelVO && null != channelVO.getChannelId()
-							&& StringUtils.isNotBlank(channelVO.getChannelNo())) {
-							channelVO.setParentsName(getParentsName(channelVO.getChannelNo()));
-						}
-					}
-				}
-				couponVO.setChannelList(list);
-			}
-		}
-		return AjaxResult.success(couponVO);
-	}
+                if (null != list && list.size() > 0) {
+                    for (ChannelVO channelVO : list) {
+                        if (null != channelVO && null != channelVO.getChannelId()
+                            && StringUtils.isNotBlank(channelVO.getChannelNo())) {
+                            channelVO.setParentsName(getParentsName(channelVO.getChannelNo()));
+                        }
+                    }
+                }
+                couponVO.setChannelList(list);
+            }
+        }
+        return AjaxResult.success(couponVO);
+    }
 
 
-	public static void main(String[] args) {
-		String boxIds = "964952657896800257,979749771218649117,986362095543124033,986361444503257092,984109134842560513";
-		String[] boxIdArray = boxIds.split(",");
-		for (int i = 0; i < boxIdArray.length; i++) {
-			String boxId = boxIdArray[i];
-			System.out.println("boxId = " + boxId);
-		}
+    public static void main(String[] args) {
+        String boxIds = "964952657896800257,979749771218649117,986362095543124033,986361444503257092,984109134842560513";
+        String[] boxIdArray = boxIds.split(",");
+        for (int i = 0; i < boxIdArray.length; i++) {
+            String boxId = boxIdArray[i];
+            System.out.println("boxId = " + boxId);
+        }
 
-	}
+    }
 
-	/**
-	 * 新增优惠券信息
-	 * @param
-	 * @return
-	 */
-	@Log(title = "新增优惠券", businessType = BusinessType.INSERT)
-	@ApiOperation(value = "新增优惠券信息", notes = "新增优惠券")
-	@PostMapping("/create")
-	@PreAuthorize("@ss.hasPermi('business:coupon:add')")
-	public AjaxResult couponCreate(@Validated @RequestBody CouponParam couponParam) {
-		if (StringUtils.isNotBlank(couponParam.getCouponId())) {
-			return AjaxResult.error("该代金券已存在");
-		}
-		Coupon coupon = mapperFacade.map(couponParam, Coupon.class);
-		// 1、校验名称是否重复(代金券表)
-		LambdaQueryWrapper<Coupon> queryWrapper = new LambdaQueryWrapper<>();
-		queryWrapper.eq(Coupon::getTitle, coupon.getTitle());
-		queryWrapper.eq(Coupon::getIsDeleted, 0);
-		int nameCount = couponService.count(queryWrapper);
-		if(nameCount > 0) {
-			return AjaxResult.error("代金券名称" + coupon.getTitle() + "已存在!");
-		}
-		// 使用范围
-		List<CouponTicket> ticketList = new ArrayList<>();
-		if(StringUtils.isNotBlank(couponParam.getBoxIds())) {
-			String[] boxIdArray = couponParam.getBoxIds().split(",");
-	        for (int i = 0; i < boxIdArray.length; i++) {
-	        	String boxId = boxIdArray[i];
-	        	CouponTicket couponTicket = new CouponTicket();
-	        	couponTicket.setBoxId(boxId);
-	        	ticketList.add(couponTicket);
-	        }
-		}
+    /**
+     * 新增优惠券信息
+     *
+     * @param
+     * @return
+     */
+    @Log(title = "新增优惠券", businessType = BusinessType.INSERT)
+    @ApiOperation(value = "新增优惠券信息", notes = "新增优惠券")
+    @PostMapping("/create")
+    @PreAuthorize("@ss.hasPermi('business:coupon:add')")
+    public AjaxResult couponCreate(@Validated @RequestBody CouponParam couponParam) {
+        if (StringUtils.isNotBlank(couponParam.getCouponId())) {
+            return AjaxResult.error("该代金券已存在");
+        }
+        Coupon coupon = mapperFacade.map(couponParam, Coupon.class);
+        // 1、校验名称是否重复(代金券表)
+        LambdaQueryWrapper<Coupon> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(Coupon::getTitle, coupon.getTitle());
+        queryWrapper.eq(Coupon::getIsDeleted, 0);
+        int nameCount = couponService.count(queryWrapper);
+        if (nameCount > 0) {
+            return AjaxResult.error("代金券名称" + coupon.getTitle() + "已存在!");
+        }
+        // 使用范围
+        List<CouponTicket> ticketList = new ArrayList<>();
+        if (StringUtils.isNotBlank(couponParam.getBoxIds())) {
+            String[] boxIdArray = couponParam.getBoxIds().split(",");
+            for (int i = 0; i < boxIdArray.length; i++) {
+                String boxId = boxIdArray[i];
+                CouponTicket couponTicket = new CouponTicket();
+                couponTicket.setBoxId(boxId);
+                ticketList.add(couponTicket);
+            }
+        }
 //		if(coupon.getUseArea() != CouponUseAreaEnum.COMMON
 //				&& ticketList.size() == 0) {
 //			return AjaxResult.error("使用范围为指定盲票时需要至少选择一种盲票");
 //		}
-		if(StringUtils.isBlank(coupon.getPicUrl())) {
-			coupon.setPicUrl(Constants.COUPON_PIC);
-		}
-		// 3.插入数据
-		try {
-			couponService.saveCoupon(coupon,ticketList,couponParam.getChannelIdList());
-		} catch (Exception e) {
-			return AjaxResult.error("代金券'" + coupon.getTitle() + "'新增失败" + e.getMessage());
-		}
+        if (StringUtils.isBlank(coupon.getPicUrl())) {
+            coupon.setPicUrl(Constants.COUPON_PIC);
+        }
+        // 3.插入数据
+        try {
+            couponService.saveCoupon(coupon, ticketList, couponParam.getChannelIdList());
+        } catch (Exception e) {
+            return AjaxResult.error("代金券'" + coupon.getTitle() + "'新增失败" + e.getMessage());
+        }
 
-		return AjaxResult.success("代金券'" + coupon.getTitle() + "'新增成功");
-	}
+        return AjaxResult.success("代金券'" + coupon.getTitle() + "'新增成功");
+    }
 
-	/**
-	 * 编辑代金券信息
-	 * @param
-	 * @return
-	 */
-	@Log(title = "修改优惠券", businessType = BusinessType.UPDATE)
-	@ApiOperation(value = "编辑代金券信息", notes = "代金券端编辑代金券")
-	@PostMapping("/update")
-	@PreAuthorize("@ss.hasPermi('business:coupon:edit')")
-	public AjaxResult couponUpdate(@Validated @RequestBody CouponParam couponParam) {
-		if (null == couponParam || StringUtils.isBlank(couponParam.getCouponId())) {
-			return error(ErrorCodeEnum.ERROR_CODE_1001);
-		}
-		Coupon coupon = mapperFacade.map(couponParam, Coupon.class);
-		// 1、校验修改代金券是否为当前用户的代金券
-		Coupon oldCoupon = couponService.getById(coupon.getCouponId());
-		if(null == oldCoupon || null == oldCoupon.getCouponId()) {
-			return AjaxResult.error("代金券'" + oldCoupon.getTitle() + "'编辑失败,代金券ID异常");
-		}
-		// 2.校验名称是否重复(代金券表);
-		if(!coupon.getTitle().equals(oldCoupon.getTitle())) {
-			LambdaQueryWrapper<Coupon> queryWrapper = new LambdaQueryWrapper<>();
-			queryWrapper.eq(Coupon::getTitle, coupon.getTitle());
-			queryWrapper.eq(Coupon::getIsDeleted, 0);
-			int nameCount = couponService.count(queryWrapper);
-			if(nameCount > 0) {
-				return AjaxResult.error("代金券名称" + coupon.getTitle() + "已存在!");
-			}
-		}
-		// 使用范围
-		List<CouponTicket> ticketList = new ArrayList<>();
-		if(StringUtils.isNotBlank(couponParam.getBoxIds())) {
-			String[] boxIdArray = couponParam.getBoxIds().split(",");
-	        for (int i = 0; i < boxIdArray.length; i++) {
-	        	String boxId = boxIdArray[i];
-	        	CouponTicket couponTicket = new CouponTicket();
-	        	couponTicket.setBoxId(boxId);
-	        	couponTicket.setCouponId(coupon.getCouponId());
-				ticketList.add(couponTicket);
-	        }
-		}
-		try {
-			couponService.updateCoupon(coupon, ticketList, couponParam.getChannelIdList());
-		} catch (Exception e) {
-			return AjaxResult.error(e.getMessage());
-		}
-		return AjaxResult.success("代金券'" + coupon.getTitle() + "'编辑成功");
-	}
+    /**
+     * 编辑代金券信息
+     *
+     * @param
+     * @return
+     */
+    @Log(title = "修改优惠券", businessType = BusinessType.UPDATE)
+    @ApiOperation(value = "编辑代金券信息", notes = "代金券端编辑代金券")
+    @PostMapping("/update")
+    @PreAuthorize("@ss.hasPermi('business:coupon:edit')")
+    public AjaxResult couponUpdate(@Validated @RequestBody CouponParam couponParam) {
+        if (null == couponParam || StringUtils.isBlank(couponParam.getCouponId())) {
+            return error(ErrorCodeEnum.ERROR_CODE_1001);
+        }
+        Coupon coupon = mapperFacade.map(couponParam, Coupon.class);
+        // 1、校验修改代金券是否为当前用户的代金券
+        Coupon oldCoupon = couponService.getById(coupon.getCouponId());
+        if (null == oldCoupon || null == oldCoupon.getCouponId()) {
+            return AjaxResult.error("代金券'" + oldCoupon.getTitle() + "'编辑失败,代金券ID异常");
+        }
+        // 2.校验名称是否重复(代金券表);
+        if (!coupon.getTitle().equals(oldCoupon.getTitle())) {
+            LambdaQueryWrapper<Coupon> queryWrapper = new LambdaQueryWrapper<>();
+            queryWrapper.eq(Coupon::getTitle, coupon.getTitle());
+            queryWrapper.eq(Coupon::getIsDeleted, 0);
+            int nameCount = couponService.count(queryWrapper);
+            if (nameCount > 0) {
+                return AjaxResult.error("代金券名称" + coupon.getTitle() + "已存在!");
+            }
+        }
+        // 使用范围
+        List<CouponTicket> ticketList = new ArrayList<>();
+        if (StringUtils.isNotBlank(couponParam.getBoxIds())) {
+            String[] boxIdArray = couponParam.getBoxIds().split(",");
+            for (int i = 0; i < boxIdArray.length; i++) {
+                String boxId = boxIdArray[i];
+                CouponTicket couponTicket = new CouponTicket();
+                couponTicket.setBoxId(boxId);
+                couponTicket.setCouponId(coupon.getCouponId());
+                ticketList.add(couponTicket);
+            }
+        }
+        try {
+            couponService.updateCoupon(coupon, ticketList, couponParam.getChannelIdList());
+        } catch (Exception e) {
+            return AjaxResult.error(e.getMessage());
+        }
+        return AjaxResult.success("代金券'" + coupon.getTitle() + "'编辑成功");
+    }
 
 
-	/**
-	 * 上下架优惠券
-	 * @param
-	 * @return
-	 */
-	@Log(title = "上下架优惠券", businessType = BusinessType.UPDATE)
-	@PreAuthorize("@ss.hasPermi('business:coupon:on')")
-	@ApiOperation(value = "上下架优惠券信息", notes = "优惠券管理编辑代金券")
-	@PostMapping("/status")
-	public AjaxResult couponStatus(@RequestBody JSONObject jsonObject) {
-		String couponId = jsonObject.getString("couponId");
-		String status = jsonObject.getString("status");
-		if (StringUtils.isBlank(couponId) || StringUtils.isBlank(status)) {
-			return error(ErrorCodeEnum.ERROR_CODE_1001);
-		}
-		try {
-			couponService.lambdaUpdate().set(Coupon::getStatus, CouponStatusEnum.PUT_ON.getValue().equals(status)?CouponStatusEnum.PUT_ON:CouponStatusEnum.PUT_OFF).eq(Coupon::getCouponId, Long.valueOf(couponId)).update();
-			// 查询代金券信息
-		} catch (Exception e) {
-			return AjaxResult.error("操作失败");
-		}
-		return AjaxResult.success("操作成功");
-	}
+    /**
+     * 上下架优惠券
+     *
+     * @param
+     * @return
+     */
+    @Log(title = "上下架优惠券", businessType = BusinessType.UPDATE)
+    @PreAuthorize("@ss.hasPermi('business:coupon:on')")
+    @ApiOperation(value = "上下架优惠券信息", notes = "优惠券管理编辑代金券")
+    @PostMapping("/status")
+    public AjaxResult couponStatus(@RequestBody JSONObject jsonObject) {
+        String couponId = jsonObject.getString("couponId");
+        String status = jsonObject.getString("status");
+        if (StringUtils.isBlank(couponId) || StringUtils.isBlank(status)) {
+            return error(ErrorCodeEnum.ERROR_CODE_1001);
+        }
+        try {
+            couponService.lambdaUpdate().set(Coupon::getStatus,
+                    CouponStatusEnum.PUT_ON.getValue().equals(status) ? CouponStatusEnum.PUT_ON : CouponStatusEnum.PUT_OFF)
+                .eq(Coupon::getCouponId, Long.valueOf(couponId)).update();
+            // 查询代金券信息
+        } catch (Exception e) {
+            return AjaxResult.error("操作失败");
+        }
+        return AjaxResult.success("操作成功");
+    }
 
 
-	/**
-	 * 删除代金券商品(假删)
-	 *
-	 * @param
-	 * @return
-	 */
-	@Log(title = "删除优惠券", businessType = BusinessType.DELETE)
-	@PostMapping(value = "/remove")
-	@PreAuthorize("@ss.hasPermi('business:coupon:remove')")
-	public AjaxResult removeCoupon(@RequestBody JSONObject jsonObject) {
-		String couponId = jsonObject.getString("couponId");
-	    if (StringUtils.isBlank(couponId)){
-	      return error(ErrorCodeEnum.ERROR_CODE_1001);
-	    }
-	    Coupon coupon = couponService.getById(Long.valueOf(couponId));
-		if(null == coupon) {
-			 return error(ErrorCodeEnum.ERROR_CODE_1001);
-		}
-		// 商品未下架, 不允许删除
-		if(coupon.getStatus().equals("on")) {
-			return AjaxResult.error("代金券未下架,不允许删除");
-		}
-		LambdaUpdateWrapper<Coupon> updateWrapper = new LambdaUpdateWrapper<>();
-		updateWrapper.set(Coupon::getIsDeleted, 1);
-		updateWrapper.eq(Coupon::getCouponId, coupon.getCouponId());
-		boolean res = couponService.update(updateWrapper);
-		if(!res) {
-			return AjaxResult.error("代金券删除失败");
-		}
-		return AjaxResult.success("代金券删除成功");
-	}
+    /**
+     * 删除代金券商品(假删)
+     *
+     * @param
+     * @return
+     */
+    @Log(title = "删除优惠券", businessType = BusinessType.DELETE)
+    @PostMapping(value = "/remove")
+    @PreAuthorize("@ss.hasPermi('business:coupon:remove')")
+    public AjaxResult removeCoupon(@RequestBody JSONObject jsonObject) {
+        String couponId = jsonObject.getString("couponId");
+        if (StringUtils.isBlank(couponId)) {
+            return error(ErrorCodeEnum.ERROR_CODE_1001);
+        }
+        Coupon coupon = couponService.getById(Long.valueOf(couponId));
+        if (null == coupon) {
+            return error(ErrorCodeEnum.ERROR_CODE_1001);
+        }
+        // 商品未下架, 不允许删除
+        if (coupon.getStatus().equals("on")) {
+            return AjaxResult.error("代金券未下架,不允许删除");
+        }
+        LambdaUpdateWrapper<Coupon> updateWrapper = new LambdaUpdateWrapper<>();
+        updateWrapper.set(Coupon::getIsDeleted, 1);
+        updateWrapper.eq(Coupon::getCouponId, coupon.getCouponId());
+        boolean res = couponService.update(updateWrapper);
+        if (!res) {
+            return AjaxResult.error("代金券删除失败");
+        }
+        return AjaxResult.success("代金券删除成功");
+    }
 
 
-
-
-	private String getParentsName(String channelNo) {
-		if(StringUtils.isNotBlank(channelNo)) {
-			String[] noArray = channelNo.split("\\.");
-			if(null != noArray && noArray.length > 0) {
-				List<String> noList = new ArrayList<String>();
-				String parentNo = "";
-				for (int i = 0; i < noArray.length; i++) {
-					if(null != noArray[i] && StringUtils.isNotBlank(noArray[i])) {
-						parentNo += (i>0?".":"")+noArray[i];
-						if(StringUtils.isNotBlank(parentNo) && !parentNo.equals(channelNo)) {
-							noList.add(parentNo);
-						}
-					}
-				}
-				if(noList.size() > 0 ) {
-					LambdaQueryWrapper<Channel> queryWrapper = new LambdaQueryWrapper<Channel>();
-					queryWrapper.gt(Channel::getLevel, 0);
-					queryWrapper.in(Channel::getChannelNo,noList);
-					queryWrapper.orderByAsc(Channel::getLevel);
-					List<Channel> list = channelService.list(queryWrapper);
-					if(null != list && list.size() >0) {
-						String names = list.stream().map(Channel::getName).collect(Collectors.joining(" > "));
-						return names;
-					}
-				}
-			}
-		}
-		return "";
-	}
+    private String getParentsName(String channelNo) {
+        if (StringUtils.isNotBlank(channelNo)) {
+            String[] noArray = channelNo.split("\\.");
+            if (null != noArray && noArray.length > 0) {
+                List<String> noList = new ArrayList<String>();
+                String parentNo = "";
+                for (int i = 0; i < noArray.length; i++) {
+                    if (null != noArray[i] && StringUtils.isNotBlank(noArray[i])) {
+                        parentNo += (i > 0 ? "." : "") + noArray[i];
+                        if (StringUtils.isNotBlank(parentNo) && !parentNo.equals(channelNo)) {
+                            noList.add(parentNo);
+                        }
+                    }
+                }
+                if (noList.size() > 0) {
+                    LambdaQueryWrapper<Channel> queryWrapper = new LambdaQueryWrapper<Channel>();
+                    queryWrapper.gt(Channel::getLevel, 0);
+                    queryWrapper.in(Channel::getChannelNo, noList);
+                    queryWrapper.orderByAsc(Channel::getLevel);
+                    List<Channel> list = channelService.list(queryWrapper);
+                    if (null != list && list.size() > 0) {
+                        String names = list.stream().map(Channel::getName).collect(Collectors.joining(" > "));
+                        return names;
+                    }
+                }
+            }
+        }
+        return "";
+    }
 }

+ 115 - 113
mp-admin/src/main/java/com/qs/mp/web/controller/api/admin/GoodsTagMgrController.java

@@ -40,124 +40,126 @@ import org.springframework.web.bind.annotation.RestController;
 @Component
 public class GoodsTagMgrController extends BaseApiController {
 
-  @Autowired
-  private IGoodsTagService goodsTagService;
-
-  @Autowired
-  private IGoodsTagRelService goodsTagRelService;
-
-
-  /**
-   * 查询商品标签列表, 支持翻页
-   *
-   * @return
-   */
-  @PostMapping("/list")
-  @PreAuthorize("@ss.hasPermi('business:tag:list')")
-  public TableDataInfo list(@RequestBody JSONObject param) {
-    startPage();
-    List<GoodsTag> tagList = goodsTagService.list(new LambdaQueryWrapper<GoodsTag>().orderByDesc(GoodsTag::getSort));
-    return getDataTable(tagList);
-  }
-
-  /**
-   * 查询商品标签列表
-   *
-   * @return
-   */
-  @PostMapping("/items")
-  public AjaxResult items(@RequestBody JSONObject param) {
-    List<GoodsTag> tagList = goodsTagService.list(new LambdaQueryWrapper<GoodsTag>().orderByDesc(GoodsTag::getSort));
-    return AjaxResult.success(tagList);
-  }
-
-  /**
-   * 获取商品标签详情信息
-   *
-   * @param
-   * @return
-   */
-  @PostMapping(value = "/detail")
-  @PreAuthorize("@ss.hasPermi('business:tag:query')")
-  public AjaxResult info(@RequestBody JSONObject jsonObject) {
-    Long tagId = jsonObject.getLong("tagId");
-    if (null == tagId || 0 == tagId) {
-      return error(ErrorCodeEnum.ERROR_CODE_1001);
+    @Autowired
+    private IGoodsTagService goodsTagService;
+
+    @Autowired
+    private IGoodsTagRelService goodsTagRelService;
+
+
+    /**
+     * 查询商品标签列表, 支持翻页
+     *
+     * @return
+     */
+    @PostMapping("/list")
+    @PreAuthorize("@ss.hasPermi('business:tag:list')")
+    public TableDataInfo list(@RequestBody JSONObject param) {
+        startPage();
+        List<GoodsTag> tagList = goodsTagService.list(
+            new LambdaQueryWrapper<GoodsTag>().orderByDesc(GoodsTag::getSort));
+        return getDataTable(tagList);
     }
-    GoodsTag goodsTag = goodsTagService.getById(tagId);
-    return AjaxResult.success(goodsTag);
-  }
-
-
-  /**
-   * 新增商品标签信息
-   *
-   * @param
-   * @return
-   */
-  @Log(title = "新增商品标签", businessType = BusinessType.INSERT)
-  @ApiOperation(value = "新增商品标签", notes = "后台商品管理新增标签")
-  @PostMapping("/create")
-  @PreAuthorize("@ss.hasPermi('business:tag:add')")
-  public AjaxResult create(@Validated @RequestBody GoodsTag goodsTag) {
-    // 1、校验名称是否重复
-    int cnt = goodsTagService.count(new LambdaQueryWrapper<GoodsTag>()
-        .eq(GoodsTag::getName, goodsTag.getName()));
-    if (cnt > 0) {
-      return AjaxResult.error("标签名称已存在!");
+
+    /**
+     * 查询商品标签列表
+     *
+     * @return
+     */
+    @PostMapping("/items")
+    public AjaxResult items(@RequestBody JSONObject param) {
+        List<GoodsTag> tagList = goodsTagService.list(
+            new LambdaQueryWrapper<GoodsTag>().orderByDesc(GoodsTag::getSort));
+        return AjaxResult.success(tagList);
     }
-    // 2.保存
-    goodsTagService.save(goodsTag);
-    return AjaxResult.success("保存成功");
-  }
-
-  /**
-   * 编辑商品标签信息
-   *
-   * @param
-   * @return
-   */
-  @Log(title = "修改商品标签", businessType = BusinessType.UPDATE)
-  @ApiOperation(value = "编辑商品标签信息", notes = "后台商品管理修改商品标签信息")
-  @PostMapping("/update")
-  @PreAuthorize("@ss.hasPermi('business:tag:edit')")
-  public AjaxResult update(@Validated @RequestBody GoodsTag goodsTag) {
-    if (null == goodsTag || null == goodsTag.getTagId()
-        || 0 == goodsTag.getTagId()) {
-      return error(ErrorCodeEnum.ERROR_CODE_1001);
+
+    /**
+     * 获取商品标签详情信息
+     *
+     * @param
+     * @return
+     */
+    @PostMapping(value = "/detail")
+    @PreAuthorize("@ss.hasPermi('business:tag:query')")
+    public AjaxResult info(@RequestBody JSONObject jsonObject) {
+        Long tagId = jsonObject.getLong("tagId");
+        if (null == tagId || 0 == tagId) {
+            return error(ErrorCodeEnum.ERROR_CODE_1001);
+        }
+        GoodsTag goodsTag = goodsTagService.getById(tagId);
+        return AjaxResult.success(goodsTag);
     }
-    int cnt = goodsTagService.count(new LambdaQueryWrapper<GoodsTag>()
-        .eq(GoodsTag::getName, goodsTag.getName()).notIn(GoodsTag::getTagId,
-            Arrays.asList(goodsTag.getTagId())));
-    if (cnt > 0) {
-      return AjaxResult.error("标签名称已存在!");
+
+
+    /**
+     * 新增商品标签信息
+     *
+     * @param
+     * @return
+     */
+    @Log(title = "新增商品标签", businessType = BusinessType.INSERT)
+    @ApiOperation(value = "新增商品标签", notes = "后台商品管理新增标签")
+    @PostMapping("/create")
+    @PreAuthorize("@ss.hasPermi('business:tag:add')")
+    public AjaxResult create(@Validated @RequestBody GoodsTag goodsTag) {
+        // 1、校验名称是否重复
+        int cnt = goodsTagService.count(new LambdaQueryWrapper<GoodsTag>()
+            .eq(GoodsTag::getName, goodsTag.getName()));
+        if (cnt > 0) {
+            return AjaxResult.error("标签名称已存在!");
+        }
+        // 2.保存
+        goodsTagService.save(goodsTag);
+        return AjaxResult.success("保存成功");
     }
-    // 保存数据
-    boolean rst = goodsTagService.updateById(goodsTag);
-    return rst ? AjaxResult.success("更新成功") : AjaxResult.error("更新失败");
-  }
-
-
-  /**
-   * 删除商品标签
-   *
-   * @param
-   * @return
-   */
-  @Log(title = "删除商品标签", businessType = BusinessType.DELETE)
-  @PostMapping(value = "/remove")
-  @PreAuthorize("@ss.hasPermi('business:tag:remove')")
-  public AjaxResult remove(@RequestBody GoodsTag goodsTag) {
-
-    if (null == goodsTag || null == goodsTag.getTagId()
-        || 0 == goodsTag.getTagId()) {
-      return error(ErrorCodeEnum.ERROR_CODE_1001);
+
+    /**
+     * 编辑商品标签信息
+     *
+     * @param
+     * @return
+     */
+    @Log(title = "修改商品标签", businessType = BusinessType.UPDATE)
+    @ApiOperation(value = "编辑商品标签信息", notes = "后台商品管理修改商品标签信息")
+    @PostMapping("/update")
+    @PreAuthorize("@ss.hasPermi('business:tag:edit')")
+    public AjaxResult update(@Validated @RequestBody GoodsTag goodsTag) {
+        if (null == goodsTag || null == goodsTag.getTagId()
+            || 0 == goodsTag.getTagId()) {
+            return error(ErrorCodeEnum.ERROR_CODE_1001);
+        }
+        int cnt = goodsTagService.count(new LambdaQueryWrapper<GoodsTag>()
+            .eq(GoodsTag::getName, goodsTag.getName()).notIn(GoodsTag::getTagId,
+                Arrays.asList(goodsTag.getTagId())));
+        if (cnt > 0) {
+            return AjaxResult.error("标签名称已存在!");
+        }
+        // 保存数据
+        boolean rst = goodsTagService.updateById(goodsTag);
+        return rst ? AjaxResult.success("更新成功") : AjaxResult.error("更新失败");
     }
-    goodsTagRelService.remove(new LambdaQueryWrapper<GoodsTagRel>()
-        .eq(GoodsTagRel::getTagId, goodsTag.getTagId()));
 
-    boolean res = goodsTagService.removeById(goodsTag.getTagId());
-    return res ? AjaxResult.success("删除成功") : AjaxResult.error("删除失败");
-  }
+
+    /**
+     * 删除商品标签
+     *
+     * @param
+     * @return
+     */
+    @Log(title = "删除商品标签", businessType = BusinessType.DELETE)
+    @PostMapping(value = "/remove")
+    @PreAuthorize("@ss.hasPermi('business:tag:remove')")
+    public AjaxResult remove(@RequestBody GoodsTag goodsTag) {
+
+        if (null == goodsTag || null == goodsTag.getTagId()
+            || 0 == goodsTag.getTagId()) {
+            return error(ErrorCodeEnum.ERROR_CODE_1001);
+        }
+        goodsTagRelService.remove(new LambdaQueryWrapper<GoodsTagRel>()
+            .eq(GoodsTagRel::getTagId, goodsTag.getTagId()));
+
+        boolean res = goodsTagService.removeById(goodsTag.getTagId());
+        return res ? AjaxResult.success("删除成功") : AjaxResult.error("删除失败");
+    }
 
 }

+ 425 - 415
mp-admin/src/main/java/com/qs/mp/web/controller/api/admin/SaleSiteMgrController.java

@@ -68,365 +68,373 @@ import org.springframework.web.bind.annotation.RestController;
 @RequestMapping("/api/v1/mp/admin/salesite/*")
 public class SaleSiteMgrController extends BaseApiController {
 
-	@Autowired
-	private IChannelService channelService;
-
-	@Autowired
-	private IChannelUserRelService channelUserRelService;
-
-	@Autowired
-	private IChannelOrderService channelOrderService;
-
-	@Autowired
-	private IUserTicketOrderService userTicketOrderService;
-
-	@Autowired
-	private ISysUserService userService;
-
-	@Autowired
-	private ITicketService ticketService;
-
-	@Autowired
-	private MapperFacade mapperFacade;
-
-
-	/**
-	 * 获取经销商列表信息,支持翻页
-	 *
-	 * @return
-	 */
-	@PostMapping("/list")
-	@PreAuthorize("@ss.hasPermi('business:salesite:list')")
-	@ApiOperation("获取经销商列表信息,支持翻页")
-	@ApiResponses(
-			@ApiResponse(code = 200, message = "经销商列表返回信息",response = ChannelVO.class)
-	)
-	public TableDataInfo listSite(@RequestBody Channel channel) {
-		List<ChannelVO> list = new ArrayList<ChannelVO>();
-		startPage();
-		QueryWrapper<Channel> queryWrapper = new QueryWrapper<>();
-		if(null!=channel && null != channel.getParentId()) {
-			queryWrapper.eq("t1.parent_id", channel.getParentId());
-		}
-		queryWrapper.eq("t1.level", 0);
-		queryWrapper.likeRight(null != channel && StringUtils.isNotBlank(channel.getMobile()), "t1.mobile", channel.getMobile());
-		queryWrapper.likeRight(null != channel && StringUtils.isNotBlank(channel.getName()), "t1.name", channel.getName());
-		queryWrapper.eq(null != channel && null != channel.getProvinceId(), "t1.province_id", channel.getProvinceId());
-		queryWrapper.eq(null != channel && null != channel.getCityId(), "t1.city_id", channel.getCityId());
-		queryWrapper.eq(null != channel && null != channel.getAreaId(), "t1.area_id", channel.getAreaId());
-		list = channelService.selectSaleSiteList(queryWrapper);
-
-		if(null != list && list.size() > 0) {
-			for(ChannelVO channelVO : list) {
-				if(null != channelVO && null != channelVO.getChannelId()
-						&& StringUtils.isNotBlank(channelVO.getChannelNo())) {
-					// int siteCnt = channelService.getChannelSiteCnt(channelVO.getChannelNo());
-					LambdaQueryWrapper<ChannelUserRel> userCntQueryWrapper = new LambdaQueryWrapper<ChannelUserRel>();
-					userCntQueryWrapper.eq(ChannelUserRel::getChannelId, channelVO.getChannelId());
-					int userCnt = channelUserRelService.count(userCntQueryWrapper);
-					channelVO.setUserCnt(userCnt);
-					// 查询用户信息
-					//SysUser sysUser = userService.selectUserById(channelVO.getUserId());
-					// channelVO.setSysUser(sysUser);
-					channelVO.setParentsName(getParentsName(channelVO.getChannelNo()));
- 				}
-			}
-		}
-		return getDataTable(list);
-	}
-
-	// 获取上级渠道迭代
-	private String getParentsName(String channelNo) {
-		if(StringUtils.isNotBlank(channelNo)) {
-			String[] noArray = channelNo.split("\\.");
-			if(null != noArray && noArray.length > 0) {
-				List<String> noList = new ArrayList<String>();
-				String parentNo = "";
-				for (int i = 0; i < noArray.length; i++) {
-					if(null != noArray[i] && StringUtils.isNotBlank(noArray[i])) {
-						parentNo += (i>0?".":"")+noArray[i];
-						if(StringUtils.isNotBlank(parentNo) && !parentNo.equals(channelNo)) {
-							noList.add(parentNo);
-						}
-					}
-				}
-				if(noList.size() > 0 ) {
-					LambdaQueryWrapper<Channel> queryWrapper = new LambdaQueryWrapper<Channel>();
-					queryWrapper.gt(Channel::getLevel, 0);
-					queryWrapper.in(Channel::getChannelNo,noList);
-					queryWrapper.orderByAsc(Channel::getLevel);
-					List<Channel> list = channelService.list(queryWrapper);
-					if(null != list && list.size() >0) {
-						String names = list.stream().map(Channel::getName).collect(Collectors.joining(" > "));
-						return names;
-					}
-				}
-			}
-		}
-		return "";
-	}
-
-	@PostMapping("/export")
-	@PreAuthorize("@ss.hasPermi('business:salesite:export')")
-	@ApiOperation("导出经销商信息")
-	@ApiResponses(
-			@ApiResponse(code = 200, message = "经销商列表返回信息",response = ChannelVO.class)
-	)
-	public AjaxResult export(@RequestBody Channel channel) {
-		QueryWrapper<Channel> queryWrapper = new QueryWrapper<>();
-		if(null!=channel && null != channel.getParentId()) {
-			queryWrapper.eq("t1.parent_id", channel.getParentId());
-		}
-		queryWrapper.eq("t1.level", 0);
-		queryWrapper.likeRight(null != channel && StringUtils.isNotBlank(channel.getMobile()), "t1.mobile", channel.getMobile());
-		queryWrapper.likeRight(null != channel && StringUtils.isNotBlank(channel.getName()), "t1.name", channel.getName());
-		queryWrapper.eq(null != channel && null != channel.getProvinceId(), "t1.province_id", channel.getProvinceId());
-		queryWrapper.eq(null != channel && null != channel.getCityId(), "t1.city_id", channel.getCityId());
-		queryWrapper.eq(null != channel && null != channel.getAreaId(), "t1.area_id", channel.getAreaId());
-		List<ChannelVO> list  = channelService.selectSaleSiteList(queryWrapper);
-		if (CollectionUtils.isEmpty(list)) {
-			return AjaxResult.error("没有符合条件的经销商信息");
-		}
-
-		if(null != list && list.size() > 0) {
-			for(ChannelVO channelVO : list) {
-				if(null != channelVO && null != channelVO.getChannelId()
-						&& StringUtils.isNotBlank(channelVO.getChannelNo())) {
-					channelVO.setParentsName(getParentsNameAndCommRate(channelVO.getChannelNo()));
-				}
-			}
-		}
-
-		List<ChannelExcel> excelList = new ArrayList<>();
-		for (ChannelVO channelVO : list) {
-			ChannelExcel channelExcel = new ChannelExcel();
-			channelExcel.setChannelId(channelVO.getChannelId());
-			channelExcel.setCommRate(channelVO.getCommRate());
-			channelExcel.setName(channelVO.getName());
-			channelExcel.setParentsName(channelVO.getParentsName());
-			channelExcel.setCreatedTime(channelVO.getCreatedTime());
-			channelExcel.setOffLineSaleCnt(channelVO.getOffLineSaleCnt());
-			channelExcel.setOffLineQtyCnt(channelVO.getOffLineQtyCnt());
-			channelExcel.setOnLineSaleCnt(channelVO.getOnLineSaleCnt());
-			channelExcel.setUserCnt(channelVO.getUserCnt());
-			if (Objects.nonNull(channelVO.getCertifyStatus())) {
-				channelExcel.setCertifyStatus(channelVO.getCertifyStatus().getDesc());
-			}
-			excelList.add(channelExcel);
-		}
-
-		ExcelUtil<ChannelExcel> util = new ExcelUtil<>(ChannelExcel.class);
-		return util.exportExcel(excelList, "经销商导出", false);
-	}
-
-	private String getParentsNameAndCommRate(String channelNo) {
-		if(StringUtils.isNotBlank(channelNo)) {
-			String[] noArray = channelNo.split("\\.");
-			if(null != noArray && noArray.length > 0) {
-				List<String> noList = new ArrayList<String>();
-				String parentNo = "";
-				for (int i = 0; i < noArray.length; i++) {
-					if(null != noArray[i] && StringUtils.isNotBlank(noArray[i])) {
-						parentNo += (i>0?".":"")+noArray[i];
-						if(StringUtils.isNotBlank(parentNo) && !parentNo.equals(channelNo)) {
-							noList.add(parentNo);
-						}
-					}
-				}
-				if(noList.size() > 0 ) {
-					LambdaQueryWrapper<Channel> queryWrapper = new LambdaQueryWrapper<Channel>();
-					queryWrapper.gt(Channel::getLevel, 0);
-					queryWrapper.in(Channel::getChannelNo,noList);
-					queryWrapper.orderByAsc(Channel::getLevel);
-					List<Channel> list = channelService.list(queryWrapper);
-					if(null != list && list.size() >0) {
-						return list.stream().map(channel -> channel.getName() + "(" + channel.getCommRate() + "%)").collect(Collectors.joining(" > "));
-					}
-				}
-			}
-		}
-		return "";
-	}
-
-
-	/**
-	 * 查询所有渠道列表
-	 *
-	 * @return
-	 */
-	@PostMapping("/listAll")
-	// @PreAuthorize("@ss.hasPermi('business:salesite:list')")
-	@ApiOperation("查询所有渠道列表")
-	@ApiResponses(
-			@ApiResponse(code = 200, message = "经销商列表返回信息",response = Channel.class)
-	)
-	public AjaxResult listAllSite() {
-		List<Channel> list = new ArrayList<Channel>();
-		LambdaQueryWrapper<Channel> queryWrapper = new LambdaQueryWrapper<Channel>();
-		queryWrapper.eq(Channel::getLevel, 0);
-		queryWrapper.orderByDesc(Channel::getChannelId);
-		list = channelService.list(queryWrapper);
-		return AjaxResult.success(list);
-	}
-
-	/**
-	 * 新增经销商信息
-	 * @param
-	 * @return
-	 */
-	@Log(title = "新增经销商", businessType = BusinessType.INSERT)
-	@ApiOperation(value = "新增经销商信息", notes = "经销商端新增经销商")
-	@PostMapping("/create")
-	@PreAuthorize("@ss.hasPermi('business:salesite:add')")
-	public AjaxResult siteCreate(@Validated @RequestBody SaleSiteParam channelParam) {
-		if (channelParam.getChannelId() != null && channelParam.getChannelId() != 0) {
-			return AjaxResult.error("该经销商已存在");
-		}
-		Channel channel = mapperFacade.map(channelParam, Channel.class);
-		// 1、校验名称是否重复、手机号是否存在(经销商表)
-		LambdaQueryWrapper<Channel> queryWrapper = new LambdaQueryWrapper<>();
-		queryWrapper.eq(Channel::getName, channel.getName());
-		queryWrapper.eq(Channel::getLevel, 0);
-		int nameCount = channelService.count(queryWrapper);
-		if(nameCount > 0) {
-			return AjaxResult.error("经销商名称" + channel.getName() + "已存在!");
-		}
-		int mobileCount = channelService.count(
-		        new LambdaQueryWrapper<Channel>().eq(Channel::getMobile, channel.getMobile()));
-		if(mobileCount > 0) {
-			 return AjaxResult.error("手机号码" + channel.getMobile() + "已注册!");
-		}
-		// 2.校验佣金比例,不能高于其父经销商的佣金比例
-		if(null != channel.getParentId() && channel.getParentId() != 0) {
-			Channel parentChannel = channelService.getById(channel.getParentId());
-			if(null != parentChannel) {
-				 if(null != parentChannel.getCommRate()
-						 && channel.getCommRate().compareTo(parentChannel.getCommRate()) > 0) {
-					 return AjaxResult.error("佣金比例不能高于父经销商的佣金比例");
-				 }
-				 channel.setLevel(parentChannel.getLevel()+1);
-				 channel.setChannelNo(parentChannel.getChannelNo()+".");
-			}else {
-				return AjaxResult.error("父经销商不存在");
-			}
-
-		}else {
-			channel.setLevel(1);
-			channel.setChannelNo("");
-		}
-		// 3.插入数据
-		try {
-			channelService.saveChannel(channel,ChannelRoleEnum.SALESITE);
-		} catch (Exception e) {
-			return AjaxResult.error("经销商'" + channel.getName() + "'新增失败" + e.getMessage());
-		}
-
-		return AjaxResult.success("经销商'" + channel.getName() + "'新增成功");
-	}
-
-	@PreAuthorize("@ss.hasPermi('business:salesite:edit')")
-	@ApiOperation("修改门店信息")
-	@PostMapping("/edit")
-	public AjaxResult edit(@RequestBody SaleSiteEditParam saleSiteEditParam){
-		Channel channel = channelService.getById(saleSiteEditParam.getChannelId());
-		if (channel == null) {
-			return AjaxResult.error("门店信息不存在");
-		}
-
-		boolean rtn = channelService.update(new LambdaUpdateWrapper<Channel>()
-			.set(Channel::getName, saleSiteEditParam.getName())
-			.eq(Channel::getChannelId, saleSiteEditParam.getChannelId()));
-
-		if (!rtn) {
-			return AjaxResult.error("更新门店信息失败");
-		}
-
-		return AjaxResult.success();
-	}
-
-
-	/**
-	 * 编辑经销商信息
-	 * @param
-	 * @return
-	 */
-	@Log(title = "修改经销商", businessType = BusinessType.UPDATE)
-	@ApiOperation(value = "编辑经销商信息", notes = "经销商端编辑经销商")
-	@PostMapping("/update")
-	@PreAuthorize("@ss.hasPermi('business:salesite:edit')")
-	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);
-		// 1、校验修改子经销商是否为当前用户的子经销商
-		Channel oldChannel = channelService.getById(channel.getChannelId());
-		if(null == oldChannel || null == oldChannel.getChannelId()) {
-			return AjaxResult.error("经销商'" + oldChannel.getName() + "'编辑失败,ID异常");
-		}
-		// 2.校验名称是否重复、手机号是否存在(经销商表);
-		if(!channel.getName().equals(oldChannel.getName())) {
-			LambdaQueryWrapper<Channel> queryWrapper = new LambdaQueryWrapper<>();
-			queryWrapper.eq(Channel::getName, channel.getName());
-			queryWrapper.eq(Channel::getLevel, 0);
-			int nameCount = channelService.count(queryWrapper);
-			if(nameCount > 0) {
-				return AjaxResult.error("经销商名称" + channel.getName() + "已存在!");
-			}
-		}
-		boolean mobileChange = false;  // 手机号码是否有变更
-		if(!channel.getMobile().equals(oldChannel.getMobile())) {
-			int mobileCount = channelService.count(
-			        new LambdaQueryWrapper<Channel>().eq(Channel::getMobile, channel.getMobile()));
-			if(mobileCount > 0) {
-				return AjaxResult.error("手机号码" + channel.getMobile() + "已注册!");
-			}
-			if(UserConstants.NOT_UNIQUE.equals(userService.checkUserNameUnique(channel.getMobile()))) {
-				return AjaxResult.error("手机号码" + channel.getMobile() + "已注册!");
-			}
-			mobileChange = true;
-		}
-		// 3.校验佣金比例,不能高于其父经销商的佣金比例,不能低于其子经销商的最大佣金比例
-		Channel parentChannel = channelService.getById(oldChannel.getParentId());
-		if(null != parentChannel) {
-			 if(null != parentChannel.getCommRate()
-					 && channel.getCommRate().compareTo(parentChannel.getCommRate()) > 0) {
-				 return AjaxResult.error("佣金比例不能高于父经销商的佣金比例");
-			 }
-			 channel.setLevel(parentChannel.getLevel()+1);
-			 channel.setChannelNo(parentChannel.getChannelNo()+".");
-		}else {
-			return AjaxResult.error("父经销商不存在");
-		}
-		try {
-			channel.setUserId(oldChannel.getUserId());
-			channelService.updateChannel(channel, mobileChange);
-		} catch (Exception e) {
-			return AjaxResult.error(e.getMessage());
-		}
-		return AjaxResult.success("经销商'" + channel.getName() + "'编辑成功");
-	}
-
-
-	/**
-	 * 停用、启用经销商
-	 * @param
-	 * @return
-	 */
-	@Log(title = "经销商启用停用", businessType = BusinessType.UPDATE)
-	@ApiOperation(value = "停用、启用经销商信息", notes = "经销商管理编辑经销商")
-	@PostMapping("/status")
-	@PreAuthorize("@ss.hasPermi('business:salesite:edit')")
-	public AjaxResult siteStatus(@RequestBody JSONObject jsonObject) {
-		String channelId = jsonObject.containsKey("channelId")?jsonObject.get("channelId").toString():"";
-		String status = jsonObject.containsKey("status")?jsonObject.get("status").toString():"";
-		if (null == jsonObject || StringUtils.isBlank(channelId)
-				|| StringUtils.isBlank(status)) {
-			return error(ErrorCodeEnum.ERROR_CODE_1001);
-		}
-		try {
-			channelService.lambdaUpdate().set(Channel::getStatus, status).eq(Channel::getChannelId, channelId).update();
-			// 查询经销商信息
+    @Autowired
+    private IChannelService channelService;
+
+    @Autowired
+    private IChannelUserRelService channelUserRelService;
+
+    @Autowired
+    private IChannelOrderService channelOrderService;
+
+    @Autowired
+    private IUserTicketOrderService userTicketOrderService;
+
+    @Autowired
+    private ISysUserService userService;
+
+    @Autowired
+    private ITicketService ticketService;
+
+    @Autowired
+    private MapperFacade mapperFacade;
+
+
+    /**
+     * 获取经销商列表信息,支持翻页
+     *
+     * @return
+     */
+    @PostMapping("/list")
+    @PreAuthorize("@ss.hasPermi('business:salesite:list')")
+    @ApiOperation("获取经销商列表信息,支持翻页")
+    @ApiResponses(
+        @ApiResponse(code = 200, message = "经销商列表返回信息", response = ChannelVO.class)
+    )
+    public TableDataInfo listSite(@RequestBody Channel channel) {
+        List<ChannelVO> list = new ArrayList<ChannelVO>();
+        startPage();
+        QueryWrapper<Channel> queryWrapper = new QueryWrapper<>();
+        if (null != channel && null != channel.getParentId()) {
+            queryWrapper.eq("t1.parent_id", channel.getParentId());
+        }
+        queryWrapper.eq("t1.level", 0);
+        queryWrapper.likeRight(null != channel && StringUtils.isNotBlank(channel.getMobile()), "t1.mobile",
+            channel.getMobile());
+        queryWrapper.likeRight(null != channel && StringUtils.isNotBlank(channel.getName()), "t1.name",
+            channel.getName());
+        queryWrapper.eq(null != channel && null != channel.getProvinceId(), "t1.province_id", channel.getProvinceId());
+        queryWrapper.eq(null != channel && null != channel.getCityId(), "t1.city_id", channel.getCityId());
+        queryWrapper.eq(null != channel && null != channel.getAreaId(), "t1.area_id", channel.getAreaId());
+        list = channelService.selectSaleSiteList(queryWrapper);
+
+        if (null != list && list.size() > 0) {
+            for (ChannelVO channelVO : list) {
+                if (null != channelVO && null != channelVO.getChannelId()
+                    && StringUtils.isNotBlank(channelVO.getChannelNo())) {
+                    // int siteCnt = channelService.getChannelSiteCnt(channelVO.getChannelNo());
+                    LambdaQueryWrapper<ChannelUserRel> userCntQueryWrapper = new LambdaQueryWrapper<ChannelUserRel>();
+                    userCntQueryWrapper.eq(ChannelUserRel::getChannelId, channelVO.getChannelId());
+                    int userCnt = channelUserRelService.count(userCntQueryWrapper);
+                    channelVO.setUserCnt(userCnt);
+                    // 查询用户信息
+                    //SysUser sysUser = userService.selectUserById(channelVO.getUserId());
+                    // channelVO.setSysUser(sysUser);
+                    channelVO.setParentsName(getParentsName(channelVO.getChannelNo()));
+                }
+            }
+        }
+        return getDataTable(list);
+    }
+
+    // 获取上级渠道迭代
+    private String getParentsName(String channelNo) {
+        if (StringUtils.isNotBlank(channelNo)) {
+            String[] noArray = channelNo.split("\\.");
+            if (null != noArray && noArray.length > 0) {
+                List<String> noList = new ArrayList<String>();
+                String parentNo = "";
+                for (int i = 0; i < noArray.length; i++) {
+                    if (null != noArray[i] && StringUtils.isNotBlank(noArray[i])) {
+                        parentNo += (i > 0 ? "." : "") + noArray[i];
+                        if (StringUtils.isNotBlank(parentNo) && !parentNo.equals(channelNo)) {
+                            noList.add(parentNo);
+                        }
+                    }
+                }
+                if (noList.size() > 0) {
+                    LambdaQueryWrapper<Channel> queryWrapper = new LambdaQueryWrapper<Channel>();
+                    queryWrapper.gt(Channel::getLevel, 0);
+                    queryWrapper.in(Channel::getChannelNo, noList);
+                    queryWrapper.orderByAsc(Channel::getLevel);
+                    List<Channel> list = channelService.list(queryWrapper);
+                    if (null != list && list.size() > 0) {
+                        String names = list.stream().map(Channel::getName).collect(Collectors.joining(" > "));
+                        return names;
+                    }
+                }
+            }
+        }
+        return "";
+    }
+
+    @PostMapping("/export")
+    @PreAuthorize("@ss.hasPermi('business:salesite:export')")
+    @ApiOperation("导出经销商信息")
+    @ApiResponses(
+        @ApiResponse(code = 200, message = "经销商列表返回信息", response = ChannelVO.class)
+    )
+    public AjaxResult export(@RequestBody Channel channel) {
+        QueryWrapper<Channel> queryWrapper = new QueryWrapper<>();
+        if (null != channel && null != channel.getParentId()) {
+            queryWrapper.eq("t1.parent_id", channel.getParentId());
+        }
+        queryWrapper.eq("t1.level", 0);
+        queryWrapper.likeRight(null != channel && StringUtils.isNotBlank(channel.getMobile()), "t1.mobile",
+            channel.getMobile());
+        queryWrapper.likeRight(null != channel && StringUtils.isNotBlank(channel.getName()), "t1.name",
+            channel.getName());
+        queryWrapper.eq(null != channel && null != channel.getProvinceId(), "t1.province_id", channel.getProvinceId());
+        queryWrapper.eq(null != channel && null != channel.getCityId(), "t1.city_id", channel.getCityId());
+        queryWrapper.eq(null != channel && null != channel.getAreaId(), "t1.area_id", channel.getAreaId());
+        List<ChannelVO> list = channelService.selectSaleSiteList(queryWrapper);
+        if (CollectionUtils.isEmpty(list)) {
+            return AjaxResult.error("没有符合条件的经销商信息");
+        }
+
+        if (null != list && list.size() > 0) {
+            for (ChannelVO channelVO : list) {
+                if (null != channelVO && null != channelVO.getChannelId()
+                    && StringUtils.isNotBlank(channelVO.getChannelNo())) {
+                    channelVO.setParentsName(getParentsNameAndCommRate(channelVO.getChannelNo()));
+                }
+            }
+        }
+
+        List<ChannelExcel> excelList = new ArrayList<>();
+        for (ChannelVO channelVO : list) {
+            ChannelExcel channelExcel = new ChannelExcel();
+            channelExcel.setChannelId(channelVO.getChannelId());
+            channelExcel.setCommRate(channelVO.getCommRate());
+            channelExcel.setName(channelVO.getName());
+            channelExcel.setParentsName(channelVO.getParentsName());
+            channelExcel.setCreatedTime(channelVO.getCreatedTime());
+            channelExcel.setOffLineSaleCnt(channelVO.getOffLineSaleCnt());
+            channelExcel.setOffLineQtyCnt(channelVO.getOffLineQtyCnt());
+            channelExcel.setOnLineSaleCnt(channelVO.getOnLineSaleCnt());
+            channelExcel.setUserCnt(channelVO.getUserCnt());
+            if (Objects.nonNull(channelVO.getCertifyStatus())) {
+                channelExcel.setCertifyStatus(channelVO.getCertifyStatus().getDesc());
+            }
+            excelList.add(channelExcel);
+        }
+
+        ExcelUtil<ChannelExcel> util = new ExcelUtil<>(ChannelExcel.class);
+        return util.exportExcel(excelList, "经销商导出", false);
+    }
+
+    private String getParentsNameAndCommRate(String channelNo) {
+        if (StringUtils.isNotBlank(channelNo)) {
+            String[] noArray = channelNo.split("\\.");
+            if (null != noArray && noArray.length > 0) {
+                List<String> noList = new ArrayList<String>();
+                String parentNo = "";
+                for (int i = 0; i < noArray.length; i++) {
+                    if (null != noArray[i] && StringUtils.isNotBlank(noArray[i])) {
+                        parentNo += (i > 0 ? "." : "") + noArray[i];
+                        if (StringUtils.isNotBlank(parentNo) && !parentNo.equals(channelNo)) {
+                            noList.add(parentNo);
+                        }
+                    }
+                }
+                if (noList.size() > 0) {
+                    LambdaQueryWrapper<Channel> queryWrapper = new LambdaQueryWrapper<Channel>();
+                    queryWrapper.gt(Channel::getLevel, 0);
+                    queryWrapper.in(Channel::getChannelNo, noList);
+                    queryWrapper.orderByAsc(Channel::getLevel);
+                    List<Channel> list = channelService.list(queryWrapper);
+                    if (null != list && list.size() > 0) {
+                        return list.stream().map(channel -> channel.getName() + "(" + channel.getCommRate() + "%)")
+                            .collect(Collectors.joining(" > "));
+                    }
+                }
+            }
+        }
+        return "";
+    }
+
+
+    /**
+     * 查询所有渠道列表
+     *
+     * @return
+     */
+    @PostMapping("/listAll")
+    // @PreAuthorize("@ss.hasPermi('business:salesite:list')")
+    @ApiOperation("查询所有渠道列表")
+    @ApiResponses(
+        @ApiResponse(code = 200, message = "经销商列表返回信息", response = Channel.class)
+    )
+    public AjaxResult listAllSite() {
+        List<Channel> list = new ArrayList<Channel>();
+        LambdaQueryWrapper<Channel> queryWrapper = new LambdaQueryWrapper<Channel>();
+        queryWrapper.eq(Channel::getLevel, 0);
+        queryWrapper.orderByDesc(Channel::getChannelId);
+        list = channelService.list(queryWrapper);
+        return AjaxResult.success(list);
+    }
+
+    /**
+     * 新增经销商信息
+     *
+     * @param
+     * @return
+     */
+    @Log(title = "新增经销商", businessType = BusinessType.INSERT)
+    @ApiOperation(value = "新增经销商信息", notes = "经销商端新增经销商")
+    @PostMapping("/create")
+    @PreAuthorize("@ss.hasPermi('business:salesite:add')")
+    public AjaxResult siteCreate(@Validated @RequestBody SaleSiteParam channelParam) {
+        if (channelParam.getChannelId() != null && channelParam.getChannelId() != 0) {
+            return AjaxResult.error("该经销商已存在");
+        }
+        Channel channel = mapperFacade.map(channelParam, Channel.class);
+        // 1、校验名称是否重复、手机号是否存在(经销商表)
+        LambdaQueryWrapper<Channel> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(Channel::getName, channel.getName());
+        queryWrapper.eq(Channel::getLevel, 0);
+        int nameCount = channelService.count(queryWrapper);
+        if (nameCount > 0) {
+            return AjaxResult.error("经销商名称" + channel.getName() + "已存在!");
+        }
+        int mobileCount = channelService.count(
+            new LambdaQueryWrapper<Channel>().eq(Channel::getMobile, channel.getMobile()));
+        if (mobileCount > 0) {
+            return AjaxResult.error("手机号码" + channel.getMobile() + "已注册!");
+        }
+        // 2.校验佣金比例,不能高于其父经销商的佣金比例
+        if (null != channel.getParentId() && channel.getParentId() != 0) {
+            Channel parentChannel = channelService.getById(channel.getParentId());
+            if (null != parentChannel) {
+                if (null != parentChannel.getCommRate()
+                    && channel.getCommRate().compareTo(parentChannel.getCommRate()) > 0) {
+                    return AjaxResult.error("佣金比例不能高于父经销商的佣金比例");
+                }
+                channel.setLevel(parentChannel.getLevel() + 1);
+                channel.setChannelNo(parentChannel.getChannelNo() + ".");
+            } else {
+                return AjaxResult.error("父经销商不存在");
+            }
+
+        } else {
+            channel.setLevel(1);
+            channel.setChannelNo("");
+        }
+        // 3.插入数据
+        try {
+            channelService.saveChannel(channel, ChannelRoleEnum.SALESITE);
+        } catch (Exception e) {
+            return AjaxResult.error("经销商'" + channel.getName() + "'新增失败" + e.getMessage());
+        }
+
+        return AjaxResult.success("经销商'" + channel.getName() + "'新增成功");
+    }
+
+    @PreAuthorize("@ss.hasPermi('business:salesite:edit')")
+    @ApiOperation("修改门店信息")
+    @PostMapping("/edit")
+    public AjaxResult edit(@RequestBody SaleSiteEditParam saleSiteEditParam) {
+        Channel channel = channelService.getById(saleSiteEditParam.getChannelId());
+        if (channel == null) {
+            return AjaxResult.error("门店信息不存在");
+        }
+
+        boolean rtn = channelService.update(new LambdaUpdateWrapper<Channel>()
+            .set(Channel::getName, saleSiteEditParam.getName())
+            .eq(Channel::getChannelId, saleSiteEditParam.getChannelId()));
+
+        if (!rtn) {
+            return AjaxResult.error("更新门店信息失败");
+        }
+
+        return AjaxResult.success();
+    }
+
+
+    /**
+     * 编辑经销商信息
+     *
+     * @param
+     * @return
+     */
+    @Log(title = "修改经销商", businessType = BusinessType.UPDATE)
+    @ApiOperation(value = "编辑经销商信息", notes = "经销商端编辑经销商")
+    @PostMapping("/update")
+    @PreAuthorize("@ss.hasPermi('business:salesite:edit')")
+    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);
+        // 1、校验修改子经销商是否为当前用户的子经销商
+        Channel oldChannel = channelService.getById(channel.getChannelId());
+        if (null == oldChannel || null == oldChannel.getChannelId()) {
+            return AjaxResult.error("经销商'" + oldChannel.getName() + "'编辑失败,ID异常");
+        }
+        // 2.校验名称是否重复、手机号是否存在(经销商表);
+        if (!channel.getName().equals(oldChannel.getName())) {
+            LambdaQueryWrapper<Channel> queryWrapper = new LambdaQueryWrapper<>();
+            queryWrapper.eq(Channel::getName, channel.getName());
+            queryWrapper.eq(Channel::getLevel, 0);
+            int nameCount = channelService.count(queryWrapper);
+            if (nameCount > 0) {
+                return AjaxResult.error("经销商名称" + channel.getName() + "已存在!");
+            }
+        }
+        boolean mobileChange = false;  // 手机号码是否有变更
+        if (!channel.getMobile().equals(oldChannel.getMobile())) {
+            int mobileCount = channelService.count(
+                new LambdaQueryWrapper<Channel>().eq(Channel::getMobile, channel.getMobile()));
+            if (mobileCount > 0) {
+                return AjaxResult.error("手机号码" + channel.getMobile() + "已注册!");
+            }
+            if (UserConstants.NOT_UNIQUE.equals(userService.checkUserNameUnique(channel.getMobile()))) {
+                return AjaxResult.error("手机号码" + channel.getMobile() + "已注册!");
+            }
+            mobileChange = true;
+        }
+        // 3.校验佣金比例,不能高于其父经销商的佣金比例,不能低于其子经销商的最大佣金比例
+        Channel parentChannel = channelService.getById(oldChannel.getParentId());
+        if (null != parentChannel) {
+            if (null != parentChannel.getCommRate()
+                && channel.getCommRate().compareTo(parentChannel.getCommRate()) > 0) {
+                return AjaxResult.error("佣金比例不能高于父经销商的佣金比例");
+            }
+            channel.setLevel(parentChannel.getLevel() + 1);
+            channel.setChannelNo(parentChannel.getChannelNo() + ".");
+        } else {
+            return AjaxResult.error("父经销商不存在");
+        }
+        try {
+            channel.setUserId(oldChannel.getUserId());
+            channelService.updateChannel(channel, mobileChange);
+        } catch (Exception e) {
+            return AjaxResult.error(e.getMessage());
+        }
+        return AjaxResult.success("经销商'" + channel.getName() + "'编辑成功");
+    }
+
+
+    /**
+     * 停用、启用经销商
+     *
+     * @param
+     * @return
+     */
+    @Log(title = "经销商启用停用", businessType = BusinessType.UPDATE)
+    @ApiOperation(value = "停用、启用经销商信息", notes = "经销商管理编辑经销商")
+    @PostMapping("/status")
+    @PreAuthorize("@ss.hasPermi('business:salesite:edit')")
+    public AjaxResult siteStatus(@RequestBody JSONObject jsonObject) {
+        String channelId = jsonObject.containsKey("channelId") ? jsonObject.get("channelId").toString() : "";
+        String status = jsonObject.containsKey("status") ? jsonObject.get("status").toString() : "";
+        if (null == jsonObject || StringUtils.isBlank(channelId)
+            || StringUtils.isBlank(status)) {
+            return error(ErrorCodeEnum.ERROR_CODE_1001);
+        }
+        try {
+            channelService.lambdaUpdate().set(Channel::getStatus, status).eq(Channel::getChannelId, channelId).update();
+            // 查询经销商信息
 //			Channel channel = channelService.getById(channelId);
 //			if(null != channel && null != channel.getUserId()) {
 //				SysUser sysUser = new SysUser();
@@ -434,61 +442,63 @@ public class SaleSiteMgrController extends BaseApiController {
 //				sysUser.setStatus(status);
 //				userService.updateUserStatus(sysUser);
 //			}
-		} catch (Exception e) {
-			return AjaxResult.error("操作失败");
-		}
-		return AjaxResult.success("操作成功");
-	}
-
-
-	/**
-	 * 查询经销商详情
-	 * @param
-	 * @return
-	 */
-	@ApiOperation(value = "查询经销商详情信息", notes = "经销商管理编辑子经销商查询经销商详情")
-	@PostMapping("/detail")
-	@PreAuthorize("@ss.hasPermi('business:salesite:query')")
-	public AjaxResult getSiteDetail(@RequestBody JSONObject jsonObject) {
-		String channelId = (null != jsonObject && jsonObject.containsKey("channelId"))?jsonObject.getString("channelId"):"";
-		if (StringUtils.isBlank(channelId)) {
-			return error(ErrorCodeEnum.ERROR_CODE_1001);
-		}
-		ChannelVO channelVO = channelService.getChannelVoById(Long.valueOf(channelId));
-		if(null == channelVO || null == channelVO.getChannelId()) {
-			 return error(ErrorCodeEnum.ERROR_CODE_1001);
-		}
-		if(null != channelVO && StringUtils.isNotBlank(channelVO.getChannelNo())) {
-			// int siteCnt = channelService.getChannelSiteCnt(channelVO.getChannelNo());
-			LambdaQueryWrapper<ChannelUserRel> userCntQueryWrapper = new LambdaQueryWrapper<ChannelUserRel>();
-			userCntQueryWrapper.eq(ChannelUserRel::getChannelId, channelVO.getChannelId());
-			int userCnt = channelUserRelService.count(userCntQueryWrapper);
-			channelVO.setUserCnt(userCnt);
-			channelVO.setParentsName(getParentsName(channelVO.getChannelNo()));
-		}
-	    // 查询经销商销售额、佣金收入、订单数等
-	    ChannelOperDataVO channelOperDataVO = channelService.getChannelTotalOperData(channelVO.getChannelNo());
-
-		// 盲票销售张数
-		int ticketSaleCnt = userTicketOrderService.getSaleSiteTotalTicketNumCnt(channelVO.getChannelId());
-		channelOperDataVO.setTicketSaleCnt(ticketSaleCnt);
-	    channelVO.setOperData(channelOperDataVO);
-
-        if(null != channelVO && null != channelVO.getChannelId()) {
-	    	LambdaQueryWrapper<ChannelUserRel> userCntQueryWrapper = new LambdaQueryWrapper<ChannelUserRel>();
-			userCntQueryWrapper.eq(ChannelUserRel::getChannelId, channelVO.getChannelId());
-			int userCnt = channelUserRelService.count(userCntQueryWrapper);
-			channelVO.setUserCnt(userCnt);
-
-	    	int ticketQtyCnt = ticketService.getTicketQtyCnt(channelVO.getChannelId());
-	    	channelVO.setOffLineQtyCnt(ticketQtyCnt);
-
-	    	TicketCntVO ticketCnt = userTicketOrderService.getTicketSaleCnt(channelVO.getChannelId());
-			channelVO.setOffLineSaleCnt(null != ticketCnt?ticketCnt.getOffLineSaleCnt():0);
-			channelVO.setOnLineSaleCnt(null != ticketCnt?ticketCnt.getOnLineSaleCnt():0);
-	    }
-
-		return AjaxResult.success(channelVO);
-	}
+        } catch (Exception e) {
+            return AjaxResult.error("操作失败");
+        }
+        return AjaxResult.success("操作成功");
+    }
+
+
+    /**
+     * 查询经销商详情
+     *
+     * @param
+     * @return
+     */
+    @ApiOperation(value = "查询经销商详情信息", notes = "经销商管理编辑子经销商查询经销商详情")
+    @PostMapping("/detail")
+    @PreAuthorize("@ss.hasPermi('business:salesite:query')")
+    public AjaxResult getSiteDetail(@RequestBody JSONObject jsonObject) {
+        String channelId =
+            (null != jsonObject && jsonObject.containsKey("channelId")) ? jsonObject.getString("channelId") : "";
+        if (StringUtils.isBlank(channelId)) {
+            return error(ErrorCodeEnum.ERROR_CODE_1001);
+        }
+        ChannelVO channelVO = channelService.getChannelVoById(Long.valueOf(channelId));
+        if (null == channelVO || null == channelVO.getChannelId()) {
+            return error(ErrorCodeEnum.ERROR_CODE_1001);
+        }
+        if (null != channelVO && StringUtils.isNotBlank(channelVO.getChannelNo())) {
+            // int siteCnt = channelService.getChannelSiteCnt(channelVO.getChannelNo());
+            LambdaQueryWrapper<ChannelUserRel> userCntQueryWrapper = new LambdaQueryWrapper<ChannelUserRel>();
+            userCntQueryWrapper.eq(ChannelUserRel::getChannelId, channelVO.getChannelId());
+            int userCnt = channelUserRelService.count(userCntQueryWrapper);
+            channelVO.setUserCnt(userCnt);
+            channelVO.setParentsName(getParentsName(channelVO.getChannelNo()));
+        }
+        // 查询经销商销售额、佣金收入、订单数等
+        ChannelOperDataVO channelOperDataVO = channelService.getChannelTotalOperData(channelVO.getChannelNo());
+
+        // 盲票销售张数
+        int ticketSaleCnt = userTicketOrderService.getSaleSiteTotalTicketNumCnt(channelVO.getChannelId());
+        channelOperDataVO.setTicketSaleCnt(ticketSaleCnt);
+        channelVO.setOperData(channelOperDataVO);
+
+        if (null != channelVO && null != channelVO.getChannelId()) {
+            LambdaQueryWrapper<ChannelUserRel> userCntQueryWrapper = new LambdaQueryWrapper<ChannelUserRel>();
+            userCntQueryWrapper.eq(ChannelUserRel::getChannelId, channelVO.getChannelId());
+            int userCnt = channelUserRelService.count(userCntQueryWrapper);
+            channelVO.setUserCnt(userCnt);
+
+            int ticketQtyCnt = ticketService.getTicketQtyCnt(channelVO.getChannelId());
+            channelVO.setOffLineQtyCnt(ticketQtyCnt);
+
+            TicketCntVO ticketCnt = userTicketOrderService.getTicketSaleCnt(channelVO.getChannelId());
+            channelVO.setOffLineSaleCnt(null != ticketCnt ? ticketCnt.getOffLineSaleCnt() : 0);
+            channelVO.setOnLineSaleCnt(null != ticketCnt ? ticketCnt.getOnLineSaleCnt() : 0);
+        }
+
+        return AjaxResult.success(channelVO);
+    }
 
 }

+ 299 - 292
mp-admin/src/main/java/com/qs/mp/web/controller/api/admin/TicketBoxMgrController.java

@@ -63,217 +63,223 @@ import org.springframework.web.multipart.MultipartFile;
 @Component
 public class TicketBoxMgrController extends BaseApiController {
 
-	@Autowired
-	private ITicketBoxService ticketBoxService;
-
-	@Autowired
-	private ITicketService ticketService;
-
-	@Autowired
-	private ITicketAwardsPrizeService ticketAwardsPrizeService;
-
-	@Autowired
-	private ITicketAwardsService ticketAwardsService;
-
-	@Autowired
-	private PulsarClientService pulsarClientService;
-
-	@Autowired
-	private MapperFacade mapperFacade;
-
-	@Autowired
-	private ITicketBoxChannelService ticketBoxChannelService;
-
-	@Autowired
-	private IChannelService channelService;
-
-	@Autowired
-	private ITicketBoxGoodsService ticketBoxGoodsService;
-
-	@Value("${mp.exportUrl}")
-	private String exportUrl;
-
-	@Value("${export.page-size}")
-	private int pageSize;
-
-	@Value("${server.env}")
-	private String env;
-
-	/**
-	 * 查询所有盲票组列表
-	 *
-	 * @return
-	 */
-	@PostMapping("/list")
-	@PreAuthorize("@ss.hasPermi('business:ticket:list')")
-	@ApiOperation("查询所有盲票组列表")
-	@ApiResponses(
-			@ApiResponse(code = 200, message = "查询成功", response = TicketBox.class)
-	)
-	public TableDataInfo list(@RequestBody TicketBoxQueryParam ticketBoxQueryParam) {
-		startPage();
-		QueryWrapper<TicketBox> queryWrapper = new QueryWrapper<TicketBox>();
-		queryWrapper.like(null != ticketBoxQueryParam && StringUtils.isNotBlank(ticketBoxQueryParam.getTitle()), "title", ticketBoxQueryParam.getTitle());
-		queryWrapper.eq(null != ticketBoxQueryParam && null != ticketBoxQueryParam.getType(), "type", ticketBoxQueryParam.getType());
-		queryWrapper.eq(null != ticketBoxQueryParam && null != ticketBoxQueryParam.getStatus(), "status", ticketBoxQueryParam.getStatus());
-		// 排除指定票组
-		if (CollectionUtils.isNotEmpty(ticketBoxQueryParam.getExcludeBoxIds())) {
-			queryWrapper.notIn("box_id", ticketBoxQueryParam.getExcludeBoxIds());
-		}
-		queryWrapper.orderByAsc("FIELD(`status`, 'wait', 'doing', 'done', 'on', 'off')").orderByDesc("box_id");
-		List<TicketBox> list = ticketBoxService.list(queryWrapper);
-		return getDataTable(list);
-	}
-
-	@PostMapping("/update")
-	@PreAuthorize("@ss.hasPermi('business:ticket:edit')")
-	@ApiOperation("更新盲票信息")
-	public AjaxResult update(@RequestBody TicketBoxUpdateParam param) {
-		return AjaxResult.success(ticketBoxService.updateTicketBox(param));
-	}
-
-
+    @Autowired
+    private ITicketBoxService ticketBoxService;
+
+    @Autowired
+    private ITicketService ticketService;
+
+    @Autowired
+    private ITicketAwardsPrizeService ticketAwardsPrizeService;
+
+    @Autowired
+    private ITicketAwardsService ticketAwardsService;
+
+    @Autowired
+    private PulsarClientService pulsarClientService;
+
+    @Autowired
+    private MapperFacade mapperFacade;
+
+    @Autowired
+    private ITicketBoxChannelService ticketBoxChannelService;
+
+    @Autowired
+    private IChannelService channelService;
+
+    @Autowired
+    private ITicketBoxGoodsService ticketBoxGoodsService;
+
+    @Value("${mp.exportUrl}")
+    private String exportUrl;
+
+    @Value("${export.page-size}")
+    private int pageSize;
+
+    @Value("${server.env}")
+    private String env;
+
+    /**
+     * 查询所有盲票组列表
+     *
+     * @return
+     */
+    @PostMapping("/list")
+    @PreAuthorize("@ss.hasPermi('business:ticket:list')")
+    @ApiOperation("查询所有盲票组列表")
+    @ApiResponses(
+        @ApiResponse(code = 200, message = "查询成功", response = TicketBox.class)
+    )
+    public TableDataInfo list(@RequestBody TicketBoxQueryParam ticketBoxQueryParam) {
+        startPage();
+        QueryWrapper<TicketBox> queryWrapper = new QueryWrapper<TicketBox>();
+        queryWrapper.like(null != ticketBoxQueryParam && StringUtils.isNotBlank(ticketBoxQueryParam.getTitle()),
+            "title", ticketBoxQueryParam.getTitle());
+        queryWrapper.eq(null != ticketBoxQueryParam && null != ticketBoxQueryParam.getType(), "type",
+            ticketBoxQueryParam.getType());
+        queryWrapper.eq(null != ticketBoxQueryParam && null != ticketBoxQueryParam.getStatus(), "status",
+            ticketBoxQueryParam.getStatus());
+        // 排除指定票组
+        if (CollectionUtils.isNotEmpty(ticketBoxQueryParam.getExcludeBoxIds())) {
+            queryWrapper.notIn("box_id", ticketBoxQueryParam.getExcludeBoxIds());
+        }
+        queryWrapper.orderByAsc("FIELD(`status`, 'wait', 'doing', 'done', 'on', 'off')").orderByDesc("box_id");
+        List<TicketBox> list = ticketBoxService.list(queryWrapper);
+        return getDataTable(list);
+    }
 
-	@PostMapping("/update/sortWeight")
-	@PreAuthorize("@ss.hasPermi('business:ticket:edit')")
-	@ApiOperation("更新盲票排序权重")
-	public AjaxResult updateSortWeight(@RequestBody TicketUpdateSortWeightParam param) {
+    @PostMapping("/update")
+    @PreAuthorize("@ss.hasPermi('business:ticket:edit')")
+    @ApiOperation("更新盲票信息")
+    public AjaxResult update(@RequestBody TicketBoxUpdateParam param) {
+        return AjaxResult.success(ticketBoxService.updateTicketBox(param));
+    }
 
-		TicketBox ticketBox = new TicketBox();
-		ticketBox.setBoxId(param.getBoxId());
-		ticketBox.setSortWeight(param.getSortWeight());
-		return AjaxResult.success(ticketBoxService.updateById(ticketBox));
-	}
 
+    @PostMapping("/update/sortWeight")
+    @PreAuthorize("@ss.hasPermi('business:ticket:edit')")
+    @ApiOperation("更新盲票排序权重")
+    public AjaxResult updateSortWeight(@RequestBody TicketUpdateSortWeightParam param) {
 
+        TicketBox ticketBox = new TicketBox();
+        ticketBox.setBoxId(param.getBoxId());
+        ticketBox.setSortWeight(param.getSortWeight());
+        return AjaxResult.success(ticketBoxService.updateById(ticketBox));
+    }
 
-	/**
-	 * 查看盲票详情
-	 */
-	@PostMapping("/detail")
-	@PreAuthorize("@ss.hasPermi('business:ticket:query')")
-	@ApiOperation(value = "查看盲票详情" , notes = "根据盲票组ID,获取盲票信息")
-	@ApiResponses(
-			@ApiResponse(code = 200, message = "查询成功", response = TicketBoxVO.class)
-	)
-	public AjaxResult getInfo(@RequestBody TicketBoxParam param) {
-		if (com.qs.mp.common.utils.StringUtils.isBlank(param.getBoxId())) {
-			return AjaxResult.error("参数异常,盲票组ID缺失");
-		}
-		TicketBox ticketBox = ticketBoxService.getById(param.getBoxId());
-		TicketBoxVO ticketBoxVO = mapperFacade.map(ticketBox, TicketBoxVO.class);
-
-		// 设置关联商品信息
-		QueryWrapper<TicketBoxGoods> ticketBoxGoodsQueryWrapper = new QueryWrapper<>();
-		ticketBoxGoodsQueryWrapper.eq("t1.box_id", param.getBoxId());
-		ticketBoxVO.setGoodsList(ticketBoxGoodsService.listByQueryWrapper(ticketBoxGoodsQueryWrapper));
-
-		// 设置经销商信息
-		if (TicketBoxSaleChannelTypeEnum.PART.getValue().equals(ticketBox.getSaleChannelType())) {
-			List<TicketBoxChannel> ticketBoxChannelList = ticketBoxChannelService.list(new LambdaQueryWrapper<TicketBoxChannel>().eq(TicketBoxChannel::getBoxId, ticketBox.getBoxId()));
-			if (CollectionUtils.isNotEmpty(ticketBoxChannelList)) {
-				List<Long> channelIds = ticketBoxChannelList.stream().map(TicketBoxChannel::getChannelId).collect(Collectors.toList());
-				List<Channel> channelList = channelService.list(new LambdaQueryWrapper<Channel>().select(Channel::getChannelId, Channel::getName)
-						.in(Channel::getChannelId, channelIds));
-				ticketBoxVO.setChannelList(channelList);
-			}
-		}
-		List<TicketAwards> ticketAwardsList = ticketAwardsService.list(new LambdaQueryWrapper<TicketAwards>()
-				.eq(TicketAwards::getBoxId, ticketBox.getBoxId()).orderByAsc(TicketAwards::getSort));
-		List<TicketAwardsVO> ticketAwardsVOS = mapperFacade.mapAsList(ticketAwardsList, TicketAwardsVO.class);
-		for (TicketAwardsVO ticketAwardsVO : ticketAwardsVOS) {
-			QueryWrapper<TicketAwardsPrize> queryWrapper = new QueryWrapper<>();
-			queryWrapper.eq("t1.awards_id", ticketAwardsVO.getAwardsId());
-			ticketAwardsVO.setPrizeList(ticketAwardsPrizeService.listByQueryWrapper(queryWrapper));
-		}
-		ticketBoxVO.setAwardsList(ticketAwardsVOS);
-		return AjaxResult.success(ticketBoxVO);
-	}
 
-	/**
-	 * 新增盲票
-	 *
-	 * @param
-	 * @return
-	 */
-	@Log(title = "盲票新增", businessType = BusinessType.INSERT)
-	@ApiOperation(value = "新增盲票", notes = "管理端创建盲票")
-	@PostMapping("/create")
-	@PreAuthorize("@ss.hasPermi('business:ticket:add')")
-	public AjaxResult create(@Validated @RequestBody TicketBoxCreateParam param) {
-		if (param.getType() == TicketTypeEnum.OFFLINE) {
-			if (param.getPkgSalePrice() == null || param.getPkgSalePrice() == 0) {
-				return AjaxResult.error("采购单价必须大于0");
-			}
-			if (param.getPkgUnit() == null || param.getPkgUnit() == 0) {
-				return AjaxResult.error("每包张数必须大于0");
-			}
-		}
-		if (param.getAwardsList().size() <= 1) {
-			return AjaxResult.error("至少需要两个奖级");
-		}
-		String boxId = ticketBoxService.createTicketBox(param);
-		if (StringUtils.isNotBlank(boxId)) {
-			return AjaxResult.success();
-		}
-		return AjaxResult.error("创建失败");
-	}
+    /**
+     * 查看盲票详情
+     */
+    @PostMapping("/detail")
+    @PreAuthorize("@ss.hasPermi('business:ticket:query')")
+    @ApiOperation(value = "查看盲票详情", notes = "根据盲票组ID,获取盲票信息")
+    @ApiResponses(
+        @ApiResponse(code = 200, message = "查询成功", response = TicketBoxVO.class)
+    )
+    public AjaxResult getInfo(@RequestBody TicketBoxParam param) {
+        if (com.qs.mp.common.utils.StringUtils.isBlank(param.getBoxId())) {
+            return AjaxResult.error("参数异常,盲票组ID缺失");
+        }
+        TicketBox ticketBox = ticketBoxService.getById(param.getBoxId());
+        TicketBoxVO ticketBoxVO = mapperFacade.map(ticketBox, TicketBoxVO.class);
+
+        // 设置关联商品信息
+        QueryWrapper<TicketBoxGoods> ticketBoxGoodsQueryWrapper = new QueryWrapper<>();
+        ticketBoxGoodsQueryWrapper.eq("t1.box_id", param.getBoxId());
+        ticketBoxVO.setGoodsList(ticketBoxGoodsService.listByQueryWrapper(ticketBoxGoodsQueryWrapper));
+
+        // 设置经销商信息
+        if (TicketBoxSaleChannelTypeEnum.PART.getValue().equals(ticketBox.getSaleChannelType())) {
+            List<TicketBoxChannel> ticketBoxChannelList = ticketBoxChannelService.list(
+                new LambdaQueryWrapper<TicketBoxChannel>().eq(TicketBoxChannel::getBoxId, ticketBox.getBoxId()));
+            if (CollectionUtils.isNotEmpty(ticketBoxChannelList)) {
+                List<Long> channelIds = ticketBoxChannelList.stream().map(TicketBoxChannel::getChannelId)
+                    .collect(Collectors.toList());
+                List<Channel> channelList = channelService.list(
+                    new LambdaQueryWrapper<Channel>().select(Channel::getChannelId, Channel::getName)
+                        .in(Channel::getChannelId, channelIds));
+                ticketBoxVO.setChannelList(channelList);
+            }
+        }
+        List<TicketAwards> ticketAwardsList = ticketAwardsService.list(new LambdaQueryWrapper<TicketAwards>()
+            .eq(TicketAwards::getBoxId, ticketBox.getBoxId()).orderByAsc(TicketAwards::getSort));
+        List<TicketAwardsVO> ticketAwardsVOS = mapperFacade.mapAsList(ticketAwardsList, TicketAwardsVO.class);
+        for (TicketAwardsVO ticketAwardsVO : ticketAwardsVOS) {
+            QueryWrapper<TicketAwardsPrize> queryWrapper = new QueryWrapper<>();
+            queryWrapper.eq("t1.awards_id", ticketAwardsVO.getAwardsId());
+            ticketAwardsVO.setPrizeList(ticketAwardsPrizeService.listByQueryWrapper(queryWrapper));
+        }
+        ticketBoxVO.setAwardsList(ticketAwardsVOS);
+        return AjaxResult.success(ticketBoxVO);
+    }
 
-	/**
-	 * 盲票上下架
-	 *
-	 * @param
-	 * @return
-	 */
-	@Log(title = "盲票上下架", businessType = BusinessType.UPDATE)
-	@ApiOperation(value = "盲票上下架", notes = "管理端盲票上下架")
-	@PostMapping("/put")
-	@PreAuthorize("@ss.hasPermi('business:ticket:on')")
-	public AjaxResult putOnOff(@RequestBody TicketBox param) {
-		if (StringUtils.isBlank(param.getBoxId()) || param.getStatus() == null) {
-				return AjaxResult.error("参数缺失");
-		}
-		TicketBox ticketBox = ticketBoxService.getById(param.getBoxId());
-		if (param.getStatus() == TicketBoxStatusEnum.PUT_OFF) {
-			if (ticketBox.getStatus() != TicketBoxStatusEnum.PUT_ON) {
-				return AjaxResult.error("当前状态不是已上架,不能下架");
-			}
-			ticketBoxService.update(new LambdaUpdateWrapper<TicketBox>()
-					.set(TicketBox::getStatus, TicketBoxStatusEnum.PUT_OFF)
-					.set(TicketBox::getManualOff, 1)
-					.eq(TicketBox::getBoxId, ticketBox.getBoxId()));
-		} else if (param.getStatus() == TicketBoxStatusEnum.PUT_ON) {
-			if (ticketBox.getStatus() != TicketBoxStatusEnum.PUT_OFF && ticketBox.getStatus() != TicketBoxStatusEnum.DONE) {
-				return AjaxResult.error("当前状态不是待上架或已下架,不能上架");
-			}
-			ticketBoxService.update(new LambdaUpdateWrapper<TicketBox>().set(TicketBox::getStatus, TicketBoxStatusEnum.PUT_ON)
-					.eq(TicketBox::getBoxId, ticketBox.getBoxId()));
-		}
+    /**
+     * 新增盲票
+     *
+     * @param
+     * @return
+     */
+    @Log(title = "盲票新增", businessType = BusinessType.INSERT)
+    @ApiOperation(value = "新增盲票", notes = "管理端创建盲票")
+    @PostMapping("/create")
+    @PreAuthorize("@ss.hasPermi('business:ticket:add')")
+    public AjaxResult create(@Validated @RequestBody TicketBoxCreateParam param) {
+        if (param.getType() == TicketTypeEnum.OFFLINE) {
+            if (param.getPkgSalePrice() == null || param.getPkgSalePrice() == 0) {
+                return AjaxResult.error("采购单价必须大于0");
+            }
+            if (param.getPkgUnit() == null || param.getPkgUnit() == 0) {
+                return AjaxResult.error("每包张数必须大于0");
+            }
+        }
+        if (param.getAwardsList().size() <= 1) {
+            return AjaxResult.error("至少需要两个奖级");
+        }
+        String boxId = ticketBoxService.createTicketBox(param);
+        if (StringUtils.isNotBlank(boxId)) {
+            return AjaxResult.success();
+        }
+        return AjaxResult.error("创建失败");
+    }
 
-		return AjaxResult.success("操作成功");
-	}
+    /**
+     * 盲票上下架
+     *
+     * @param
+     * @return
+     */
+    @Log(title = "盲票上下架", businessType = BusinessType.UPDATE)
+    @ApiOperation(value = "盲票上下架", notes = "管理端盲票上下架")
+    @PostMapping("/put")
+    @PreAuthorize("@ss.hasPermi('business:ticket:on')")
+    public AjaxResult putOnOff(@RequestBody TicketBox param) {
+        if (StringUtils.isBlank(param.getBoxId()) || param.getStatus() == null) {
+            return AjaxResult.error("参数缺失");
+        }
+        TicketBox ticketBox = ticketBoxService.getById(param.getBoxId());
+        if (param.getStatus() == TicketBoxStatusEnum.PUT_OFF) {
+            if (ticketBox.getStatus() != TicketBoxStatusEnum.PUT_ON) {
+                return AjaxResult.error("当前状态不是已上架,不能下架");
+            }
+            ticketBoxService.update(new LambdaUpdateWrapper<TicketBox>()
+                .set(TicketBox::getStatus, TicketBoxStatusEnum.PUT_OFF)
+                .set(TicketBox::getManualOff, 1)
+                .eq(TicketBox::getBoxId, ticketBox.getBoxId()));
+        } else if (param.getStatus() == TicketBoxStatusEnum.PUT_ON) {
+            if (ticketBox.getStatus() != TicketBoxStatusEnum.PUT_OFF
+                && ticketBox.getStatus() != TicketBoxStatusEnum.DONE) {
+                return AjaxResult.error("当前状态不是待上架或已下架,不能上架");
+            }
+            ticketBoxService.update(
+                new LambdaUpdateWrapper<TicketBox>().set(TicketBox::getStatus, TicketBoxStatusEnum.PUT_ON)
+                    .eq(TicketBox::getBoxId, ticketBox.getBoxId()));
+        }
+
+        return AjaxResult.success("操作成功");
+    }
 
-	/**
-	 * 盲票删除
-	 *
-	 * @param
-	 * @return
-	 */
-	@Log(title = "盲票删除", businessType = BusinessType.DELETE)
-	@ApiOperation(value = "盲票删除", notes = "管理端盲票删除")
-	@PostMapping("/remove")
-	@PreAuthorize("@ss.hasPermi('business:ticket:remove')")
-	public AjaxResult remove(@RequestBody TicketBox param) {
-		if (StringUtils.isBlank(param.getBoxId())) {
-			return AjaxResult.error("参数缺失");
-		}
-		TicketBox ticketBox = ticketBoxService.getById(param.getBoxId());
-		if (ticketBox.getStatus() != TicketBoxStatusEnum.DONE) {
-			return AjaxResult.error("当前状态不是待上架,不能删除");
-		}
-		ticketBoxService.removeTicketBox(param.getBoxId());
-		return AjaxResult.success("删除成功");
-	}
+    /**
+     * 盲票删除
+     *
+     * @param
+     * @return
+     */
+    @Log(title = "盲票删除", businessType = BusinessType.DELETE)
+    @ApiOperation(value = "盲票删除", notes = "管理端盲票删除")
+    @PostMapping("/remove")
+    @PreAuthorize("@ss.hasPermi('business:ticket:remove')")
+    public AjaxResult remove(@RequestBody TicketBox param) {
+        if (StringUtils.isBlank(param.getBoxId())) {
+            return AjaxResult.error("参数缺失");
+        }
+        TicketBox ticketBox = ticketBoxService.getById(param.getBoxId());
+        if (ticketBox.getStatus() != TicketBoxStatusEnum.DONE) {
+            return AjaxResult.error("当前状态不是待上架,不能删除");
+        }
+        ticketBoxService.removeTicketBox(param.getBoxId());
+        return AjaxResult.success("删除成功");
+    }
 
 	/*@Log(title = "盲票导出", businessType = BusinessType.EXPORT)
 	@PostMapping("/export")
@@ -364,100 +370,101 @@ public class TicketBoxMgrController extends BaseApiController {
 	}*/
 
 
-	@Log(title = "导出印刷", businessType = BusinessType.EXPORT)
-	@PostMapping("/exportDraw")
-	@PreAuthorize("@ss.hasPermi('business:ticket:export')")
-	public AjaxResult exportDraw(@RequestBody BathIdParam ids) {
-		if (null == ids || null == ids.getIds() || ids.getIds().size() == 0) {
-			return AjaxResult.error("请选择需要导出的盲票组");
-		}
-		TicketBox ticketBox = ticketBoxService.getById(ids.getIds().get(0));
-		if (null == ticketBox || StringUtils.isBlank(ticketBox.getBoxId())) {
-			return AjaxResult.error("选择的盲票组数据异常, 请联系管理员或重试");
-		}
-		List<TicketExcel> excelList = new ArrayList<TicketExcel>();
-		List<Ticket> listAll = new ArrayList<Ticket>();
-		// 首先查询要导出的数据总数
-		LambdaQueryWrapper<Ticket> queryWrapper = new LambdaQueryWrapper<Ticket>();
-		queryWrapper.eq(Ticket::getBoxId, ids.getIds().get(0));
-		int totalSize = ticketService.count(queryWrapper);
-		if (totalSize == 0) {
-			return AjaxResult.error("选择的盲票组中没有可导出的数据");
-		}
-
-		if(totalSize > pageSize) {
-			int totalPage = totalSize%pageSize == 0 ? totalSize/pageSize : totalSize/pageSize+1;
-			for (int i = 0; i < totalPage; i++) {
-				LambdaQueryWrapper<Ticket> pageQueryWrapper = new LambdaQueryWrapper<Ticket>();
-				pageQueryWrapper.select(Ticket::getSerialNo, Ticket::getDrawNum, Ticket::getCipherLuckyNum);
-				pageQueryWrapper.eq(Ticket::getBoxId, ids.getIds().get(0));
-				pageQueryWrapper.last("limit "+ (i*pageSize) +", " + pageSize);
-				List<Ticket> list = ticketService.list(pageQueryWrapper);
-				if(null != list && list.size() > 0 ) {
-					listAll.addAll(list);
-				}
-			}
-		}else {
-			listAll = ticketService.list(queryWrapper);
-		}
+    @Log(title = "导出印刷", businessType = BusinessType.EXPORT)
+    @PostMapping("/exportDraw")
+    @PreAuthorize("@ss.hasPermi('business:ticket:export')")
+    public AjaxResult exportDraw(@RequestBody BathIdParam ids) {
+        if (null == ids || null == ids.getIds() || ids.getIds().size() == 0) {
+            return AjaxResult.error("请选择需要导出的盲票组");
+        }
+        TicketBox ticketBox = ticketBoxService.getById(ids.getIds().get(0));
+        if (null == ticketBox || StringUtils.isBlank(ticketBox.getBoxId())) {
+            return AjaxResult.error("选择的盲票组数据异常, 请联系管理员或重试");
+        }
+        List<TicketExcel> excelList = new ArrayList<TicketExcel>();
+        List<Ticket> listAll = new ArrayList<Ticket>();
+        // 首先查询要导出的数据总数
+        LambdaQueryWrapper<Ticket> queryWrapper = new LambdaQueryWrapper<Ticket>();
+        queryWrapper.eq(Ticket::getBoxId, ids.getIds().get(0));
+        int totalSize = ticketService.count(queryWrapper);
+        if (totalSize == 0) {
+            return AjaxResult.error("选择的盲票组中没有可导出的数据");
+        }
+
+        if (totalSize > pageSize) {
+            int totalPage = totalSize % pageSize == 0 ? totalSize / pageSize : totalSize / pageSize + 1;
+            for (int i = 0; i < totalPage; i++) {
+                LambdaQueryWrapper<Ticket> pageQueryWrapper = new LambdaQueryWrapper<Ticket>();
+                pageQueryWrapper.select(Ticket::getSerialNo, Ticket::getDrawNum, Ticket::getCipherLuckyNum);
+                pageQueryWrapper.eq(Ticket::getBoxId, ids.getIds().get(0));
+                pageQueryWrapper.last("limit " + (i * pageSize) + ", " + pageSize);
+                List<Ticket> list = ticketService.list(pageQueryWrapper);
+                if (null != list && list.size() > 0) {
+                    listAll.addAll(list);
+                }
+            }
+        } else {
+            listAll = ticketService.list(queryWrapper);
+        }
+
+        if (null != listAll && listAll.size() > 0) {
+            listAll.sort(Comparator.comparing(Ticket::getSerialNo));
+            for (Ticket ticket : listAll) {
+                if (null != ticket && StringUtils.isNotBlank(ticket.getSerialNo())
+                    && StringUtils.isNotBlank(ticket.getDrawNum())
+                    && StringUtils.isNotBlank(ticket.getCipherLuckyNum())) {
+                    TicketExcel ticketExcel = new TicketExcel();
+                    ticketExcel.setSerialNo(ticket.getSerialNo());
+                    if (ticketBox.getIsEncrypt() == 1) {
+                        // 加密序列号
+                        ticketExcel.setUrl(exportUrl + AESUtil.encrypt(ticket.getSerialNo()));
+                    } else {
+                        ticketExcel.setUrl(exportUrl + ticket.getSerialNo());
+                    }
+                    if (!ServerEnvEnum.PROD.getCode().equals(env)) {
+                        ticketExcel.setDrawNum(formatDraw(ticket.getDrawNum()));
+                        ticketExcel.setCipherLuckyNum(RSAUtil.decrypt(ticket.getCipherLuckyNum()));
+                    }
+                    excelList.add(ticketExcel);
+                }
+            }
+        }
 
-		if(null != listAll && listAll.size() > 0 ) {
-			listAll.sort(Comparator.comparing(Ticket::getSerialNo));
-			for (Ticket ticket : listAll) {
-				if (null != ticket && StringUtils.isNotBlank(ticket.getSerialNo())
-						&& StringUtils.isNotBlank(ticket.getDrawNum())
-						&& StringUtils.isNotBlank(ticket.getCipherLuckyNum())) {
-					TicketExcel ticketExcel = new TicketExcel();
-					ticketExcel.setSerialNo(ticket.getSerialNo());
-					if (ticketBox.getIsEncrypt() == 1){
-						// 加密序列号
-						ticketExcel.setUrl(exportUrl + AESUtil.encrypt(ticket.getSerialNo()));
-					}else {
-						ticketExcel.setUrl(exportUrl + ticket.getSerialNo());
-					}
-					if (!ServerEnvEnum.PROD.getCode().equals(env)) {
-						ticketExcel.setDrawNum(formatDraw(ticket.getDrawNum()));
-						ticketExcel.setCipherLuckyNum(RSAUtil.decrypt(ticket.getCipherLuckyNum()));
-					}
-					excelList.add(ticketExcel);
-				}
-			}
-		}
-
-		ExcelUtil<TicketExcel> util = new ExcelUtil<TicketExcel>(TicketExcel.class);
-		return util.exportExcel(excelList, ticketBox.getTitle(), false);
-	}
+        ExcelUtil<TicketExcel> util = new ExcelUtil<TicketExcel>(TicketExcel.class);
+        return util.exportExcel(excelList, ticketBox.getTitle(), false);
+    }
 
 
-	/**
-	 * 导出印刷格式化
-	 * @param drawNum
-	 * @return
-	 */
-	private String formatDraw(String drawNum) {
-		if(StringUtils.isNotBlank(drawNum)) {
-			try {
-				List<String> drawList = new ArrayList<String>();
-				JSONArray jsonArray = JSONArray.parseArray(drawNum);
-				if(null != jsonArray && jsonArray.size() > 0) {
-					for (int i = 0; i < jsonArray.size(); i++) {
-						JSONObject jo = jsonArray.getJSONObject(i);
-						if(null != jo && jo.containsKey("name")
-								&& jo.containsKey("num")) {
-							drawList.add(jo.getString("name")+","+jo.getString("num"));
-						}
-					}
-				}
-				if(null != drawList && drawList.size() >0) {
-					return StringUtils.join(drawList.toArray(), ",");
-				}
-			} catch (Exception e) {
-				e.printStackTrace();
-			}
-		}
-		return "";
+    /**
+     * 导出印刷格式化
+     *
+     * @param drawNum
+     * @return
+     */
+    private String formatDraw(String drawNum) {
+        if (StringUtils.isNotBlank(drawNum)) {
+            try {
+                List<String> drawList = new ArrayList<String>();
+                JSONArray jsonArray = JSONArray.parseArray(drawNum);
+                if (null != jsonArray && jsonArray.size() > 0) {
+                    for (int i = 0; i < jsonArray.size(); i++) {
+                        JSONObject jo = jsonArray.getJSONObject(i);
+                        if (null != jo && jo.containsKey("name")
+                            && jo.containsKey("num")) {
+                            drawList.add(jo.getString("name") + "," + jo.getString("num"));
+                        }
+                    }
+                }
+                if (null != drawList && drawList.size() > 0) {
+                    return StringUtils.join(drawList.toArray(), ",");
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+        return "";
 
-	}
+    }
 
 
 }

+ 113 - 113
mp-service/src/main/java/com/qs/mp/admin/domain/TicketAwardsPrize.java

@@ -25,118 +25,118 @@ import lombok.Data;
 @ApiModel("盲票盒奖项对应的奖品设置实体类")
 public class TicketAwardsPrize implements Serializable {
 
-  private static final long serialVersionUID = 1L;
-
-  /**
-   * 主键
-   */
-  @ApiModelProperty("奖品id,主键")
-  @TableId(value = "prize_id" , type = IdType.INPUT)
-  private String prizeId;
-
-  /**
-   * 盲票组ID
-   */
-  @ApiModelProperty("盲票组ID")
-  @TableField("box_id")
-  private String boxId;
-
-  /**
-   * 奖项ID
-   */
-  @ApiModelProperty("奖项ID")
-  @TableField("awards_id")
-  private String awardsId;
-
-  /**
-   * 奖品ID(GOODS_ID或COUPON_ID)
-   */
-  @ApiModelProperty("奖品ID(GOODS_ID或COUPON_ID)")
-  @TableField("ref_id")
-  private String refId;
-
-  /**
-   * 奖品名称
-   */
-  @ApiModelProperty("奖品名称")
-  @TableField("title")
-  private String title;
-
-  /**
-   * 奖品图片url
-   */
-  @ApiModelProperty("奖品图片url")
-  @TableField("pic_url")
-  private String picUrl;
-
-  /**
-   * 奖品类型 1 实物商品 2优惠券 3平台代币
-   */
-  @ApiModelProperty("奖品类型 1 实物商品 2优惠券 3平台代币")
-  @TableField("prize_type")
-  @JSONField(serialzeFeatures = SerializerFeature.WriteEnumUsingToString)
-  private TicketPrizeTypeEnum prizeType;
-
-  /**
-   * 奖品数
-   */
-  @ApiModelProperty("奖品数")
-  @TableField("quantity")
-  private Integer quantity;
-
-  /**
-   * 已兑奖品数
-   */
-  @ApiModelProperty("已兑奖品数")
-  @TableField("cashed_qty")
-  private Integer cashedQty;
-
-  /**
-   * 剩余奖品数
-   */
-  @ApiModelProperty("剩余奖品数")
-  @TableField("remain_qty")
-  private Integer remainQty;
-
-  /**
-   * 奖品价值
-   */
-  @ApiModelProperty("奖品价值")
-  @TableField("value")
-  private Integer value;
-
-  @ApiModelProperty("排序权重,越大越靠前")
-  @TableField("sort_weight")
-  private Integer sortWeight;
-
-  /**
-   * 逻辑删除标识
-   */
-  @ApiModelProperty("逻辑删除标识")
-  @TableField("is_deleted")
-  @TableLogic
-  private Integer isDeleted;
-
-  /**
-   * 创建时间
-   */
-  @ApiModelProperty("创建时间")
-  @TableField("created_time")
-  private Date createdTime;
-
-  /**
-   * 更新时间
-   */
-  @ApiModelProperty("更新时间")
-  @TableField("updated_time")
-  private Date updatedTime;
-
-
-  /**
-   * 商品成本
-   */
-  @ApiModelProperty("商品成本")
-  @TableField(exist = false)
-  private Integer cost;
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @ApiModelProperty("奖品id,主键")
+    @TableId(value = "prize_id", type = IdType.INPUT)
+    private String prizeId;
+
+    /**
+     * 盲票组ID
+     */
+    @ApiModelProperty("盲票组ID")
+    @TableField("box_id")
+    private String boxId;
+
+    /**
+     * 奖项ID
+     */
+    @ApiModelProperty("奖项ID")
+    @TableField("awards_id")
+    private String awardsId;
+
+    /**
+     * 奖品ID(GOODS_ID或COUPON_ID)
+     */
+    @ApiModelProperty("奖品ID(GOODS_ID或COUPON_ID)")
+    @TableField("ref_id")
+    private String refId;
+
+    /**
+     * 奖品名称
+     */
+    @ApiModelProperty("奖品名称")
+    @TableField("title")
+    private String title;
+
+    /**
+     * 奖品图片url
+     */
+    @ApiModelProperty("奖品图片url")
+    @TableField("pic_url")
+    private String picUrl;
+
+    /**
+     * 奖品类型 1 实物商品 2优惠券 3平台代币
+     */
+    @ApiModelProperty("奖品类型 1 实物商品 2优惠券 3平台代币")
+    @TableField("prize_type")
+    @JSONField(serialzeFeatures = SerializerFeature.WriteEnumUsingToString)
+    private TicketPrizeTypeEnum prizeType;
+
+    /**
+     * 奖品数
+     */
+    @ApiModelProperty("奖品数")
+    @TableField("quantity")
+    private Integer quantity;
+
+    /**
+     * 已兑奖品数
+     */
+    @ApiModelProperty("已兑奖品数")
+    @TableField("cashed_qty")
+    private Integer cashedQty;
+
+    /**
+     * 剩余奖品数
+     */
+    @ApiModelProperty("剩余奖品数")
+    @TableField("remain_qty")
+    private Integer remainQty;
+
+    /**
+     * 奖品价值
+     */
+    @ApiModelProperty("奖品价值")
+    @TableField("value")
+    private Integer value;
+
+    @ApiModelProperty("排序权重,越大越靠前")
+    @TableField("sort_weight")
+    private Integer sortWeight;
+
+    /**
+     * 逻辑删除标识
+     */
+    @ApiModelProperty("逻辑删除标识")
+    @TableField("is_deleted")
+    @TableLogic
+    private Integer isDeleted;
+
+    /**
+     * 创建时间
+     */
+    @ApiModelProperty("创建时间")
+    @TableField("created_time")
+    private Date createdTime;
+
+    /**
+     * 更新时间
+     */
+    @ApiModelProperty("更新时间")
+    @TableField("updated_time")
+    private Date updatedTime;
+
+
+    /**
+     * 商品成本
+     */
+    @ApiModelProperty("商品成本")
+    @TableField(exist = false)
+    private Integer cost;
 
 }

+ 611 - 600
mp-service/src/main/java/com/qs/mp/admin/service/impl/TicketBoxServiceImpl.java

@@ -54,666 +54,677 @@ import org.springframework.util.Assert;
 public class TicketBoxServiceImpl extends ServiceImpl<TicketBoxMapper, TicketBox> implements
     ITicketBoxService {
 
-  protected final Logger logger = LoggerFactory.getLogger(this.getClass());
+    protected final Logger logger = LoggerFactory.getLogger(this.getClass());
 
-  @Autowired
-  private MapperFacade mapperFacade;
+    @Autowired
+    private MapperFacade mapperFacade;
 
-  @Autowired
-  private BizIdGenerator bizIdGenerator;
+    @Autowired
+    private BizIdGenerator bizIdGenerator;
 
-  @Autowired
-  private ITicketAwardsService ticketAwardsService;
+    @Autowired
+    private ITicketAwardsService ticketAwardsService;
 
-  @Autowired
-  private ITicketAwardsPrizeService ticketAwardsPrizeService;
+    @Autowired
+    private ITicketAwardsPrizeService ticketAwardsPrizeService;
 
-  @Autowired
-  private IGoodsService goodsService;
+    @Autowired
+    private IGoodsService goodsService;
 
-  @Autowired
-  private ICouponService couponService;
+    @Autowired
+    private ICouponService couponService;
 
-  @Autowired
-  private ITicketBoxSerialService ticketBoxSerialService;
+    @Autowired
+    private ITicketBoxSerialService ticketBoxSerialService;
 
-  @Autowired
-  private ITicketService ticketService;
+    @Autowired
+    private ITicketService ticketService;
 
-  @Autowired
-  private ITicketPackageService ticketPackageService;
+    @Autowired
+    private ITicketPackageService ticketPackageService;
 
-  @Autowired
-  private ICouponPkgService couponPkgService;
+    @Autowired
+    private ICouponPkgService couponPkgService;
 
-  @Autowired
-  private ITicketBoxChannelService ticketBoxChannelService;
+    @Autowired
+    private ITicketBoxChannelService ticketBoxChannelService;
 
-  @Autowired
-  private IChannelService channelService;
+    @Autowired
+    private IChannelService channelService;
 
-  @Autowired
-  private IAsyncTaskService asyncTaskService;
+    @Autowired
+    private IAsyncTaskService asyncTaskService;
 
-  @Autowired
-  private ITicketBoxGoodsService ticketBoxGoodsService;
+    @Autowired
+    private ITicketBoxGoodsService ticketBoxGoodsService;
 
 
-  @Override
-  public List<TicketBoxGoodsListVO> listTicketGoodsByQueryWrapper(QueryWrapper<TicketBoxGoodsListVO> queryWrapper) {
-    return getBaseMapper().listTicketGoodsByQueryWrapper(queryWrapper);
-  }
-
-  @Override
-  public List<TicketBox> listBySaleChannel(QueryWrapper<TicketBox> queryWrapper) {
-    return getBaseMapper().listBySaleChannel(queryWrapper);
-  }
-
-
-  @Override
-  @Transactional(rollbackFor = Exception.class)
-  public boolean updateTicketBox(TicketBoxUpdateParam param) {
-    if (StringUtils.isBlank(param.getBoxId())) {
-      throw new ServiceException("盲票组ID不能为空");
-    }
-    // 设置更新盲票基本信息
-    TicketBox ticketBox = this.getById(param.getBoxId());
-    if (Objects.isNull(ticketBox)) {
-      throw new ServiceException("盲票信息不存在");
+    @Override
+    public List<TicketBoxGoodsListVO> listTicketGoodsByQueryWrapper(QueryWrapper<TicketBoxGoodsListVO> queryWrapper) {
+        return getBaseMapper().listTicketGoodsByQueryWrapper(queryWrapper);
     }
 
-    ticketBox.setBoxId(param.getBoxId());
-    ticketBox.setTitle(param.getTitle());
-    ticketBox.setPicUrl(param.getPicUrl());
-    ticketBox.setSalePrice(param.getSalePrice());
-    // 设置预购价
-    ticketBox.setPrePrice(param.getPrePrice());
-    ticketBox.setPkgSalePrice(param.getPkgSalePrice());
-    ticketBox.setOriginPrice(param.getOriginPrice());
-    ticketBox.setSaleCommRate(param.getSaleCommRate());
-    ticketBox.setSaleChannelType(param.getSaleChannelType());
-    this.updateById(ticketBox);
-
-
-    // 清除盲票关联商品
-    ticketBoxGoodsService.remove(new LambdaUpdateWrapper<TicketBoxGoods>().eq(TicketBoxGoods::getBoxId, ticketBox.getBoxId()));
-
-    // 关联商品
-    if (CollectionUtils.isNotEmpty(param.getGoodsList())) {
-      // 设置boxId和商品信息
-      for (TicketBoxGoods ticketBoxGoods : param.getGoodsList()) {
-        ticketBoxGoods.setId(null);
-        ticketBoxGoods.setBoxId(ticketBox.getBoxId());
-        Goods goods = goodsService.getById(ticketBoxGoods.getRefId());
-        if (goods != null) {
-          ticketBoxGoods.setTitle(goods.getTitle());
-          ticketBoxGoods.setPicUrl(goods.getPicUrl());
-          ticketBoxGoods.setValue(goods.getValue());
-        }
-      }
-      ticketBoxGoodsService.saveBatch(param.getGoodsList());
+    @Override
+    public List<TicketBox> listBySaleChannel(QueryWrapper<TicketBox> queryWrapper) {
+        return getBaseMapper().listBySaleChannel(queryWrapper);
     }
 
 
-    // 清除指定渠道内容
-    ticketBoxChannelService.remove(new LambdaUpdateWrapper<TicketBoxChannel>().eq(TicketBoxChannel::getBoxId, ticketBox.getBoxId()));
-
-    // 指定渠道
-    if (TicketBoxSaleChannelTypeEnum.PART.getValue().equals(param.getSaleChannelType())) {
-      List<Long> channelIdList = param.getChannelIdList();
-      if (CollectionUtils.isEmpty(channelIdList)) {
-        throw new ServiceException("渠道列表为空");
-      }
-      // 校验嵌套问题
-      List<String> channelNoList = channelService.list(new LambdaQueryWrapper<Channel>()
-                      .in(Channel::getChannelId, channelIdList)
-                      .orderByDesc(Channel::getLevel))
-              .stream().map(Channel::getChannelNo)
-              .collect(Collectors.toList());
-      for (int i = 0; i < channelNoList.size(); i++) {
-        for (int j = 0; j < channelNoList.size(); j++) {
-          if (i == j) {
-            continue;
-          }
-
-          boolean flag = channelNoList.get(i).startsWith(channelNoList.get(j) + ".");
-          if (flag) {
-            throw new ServiceException("已选择更高级的渠道,不支持渠道相互嵌套!");
-          }
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean updateTicketBox(TicketBoxUpdateParam param) {
+        if (StringUtils.isBlank(param.getBoxId())) {
+            throw new ServiceException("盲票组ID不能为空");
+        }
+        // 设置更新盲票基本信息
+        TicketBox ticketBox = this.getById(param.getBoxId());
+        if (Objects.isNull(ticketBox)) {
+            throw new ServiceException("盲票信息不存在");
         }
-      }
-      List<TicketBoxChannel> ticketBoxChannelList = new ArrayList<>();
-      for (Long channelId : channelIdList) {
-        TicketBoxChannel ticketBoxChannel = new TicketBoxChannel();
-        ticketBoxChannel.setBoxId(ticketBox.getBoxId());
-        ticketBoxChannel.setChannelId(channelId);
-        ticketBoxChannelList.add(ticketBoxChannel);
-      }
-      ticketBoxChannelService.saveBatch(ticketBoxChannelList);
-    }
-
-    // 校验更新奖品信息
-    if (CollectionUtils.isEmpty(param.getAwardsList())) {
-      throw new ServiceException("奖品列表不能为空");
-    }
-    // 校验奖品信息
-    int count = ticketAwardsService.count(new LambdaQueryWrapper<TicketAwards>().eq(TicketAwards::getBoxId, param.getBoxId()));
-    if (count != param.getAwardsList().size()) {
-      throw new ServiceException("奖级数量与原来不同");
-    }
 
-    List<TicketAwards> ticketAwardsList = new ArrayList<>();
-    // 更新奖品信息
-    for (TicketAwardsParam ticketAwardsParam : param.getAwardsList()) {
-       if (CollectionUtils.isEmpty(ticketAwardsParam.getPrizeList())) {
-        throw new ServiceException("奖品列表不能为空");
-       }
-
-      // 线上票需要判断商品数量合法性
-      if (TicketTypeEnum.ONLINE.equals(ticketBox.getType())) {
-        int quantity = ticketAwardsParam.getPrizeList().stream().mapToInt(TicketAwardsPrizeParam::getQuantity).sum();
-        if (quantity != ticketAwardsParam.getQuantity()) {
-          throw new ServiceException("奖品总数值不相同");
+        ticketBox.setBoxId(param.getBoxId());
+        ticketBox.setTitle(param.getTitle());
+        ticketBox.setPicUrl(param.getPicUrl());
+        ticketBox.setSalePrice(param.getSalePrice());
+        // 设置预购价
+        ticketBox.setPrePrice(param.getPrePrice());
+        ticketBox.setPkgSalePrice(param.getPkgSalePrice());
+        ticketBox.setOriginPrice(param.getOriginPrice());
+        ticketBox.setSaleCommRate(param.getSaleCommRate());
+        ticketBox.setSaleChannelType(param.getSaleChannelType());
+        this.updateById(ticketBox);
+
+        // 清除盲票关联商品
+        ticketBoxGoodsService.remove(
+            new LambdaUpdateWrapper<TicketBoxGoods>().eq(TicketBoxGoods::getBoxId, ticketBox.getBoxId()));
+
+        // 关联商品
+        if (CollectionUtils.isNotEmpty(param.getGoodsList())) {
+            // 设置boxId和商品信息
+            for (TicketBoxGoods ticketBoxGoods : param.getGoodsList()) {
+                ticketBoxGoods.setId(null);
+                ticketBoxGoods.setBoxId(ticketBox.getBoxId());
+                Goods goods = goodsService.getById(ticketBoxGoods.getRefId());
+                if (goods != null) {
+                    ticketBoxGoods.setTitle(goods.getTitle());
+                    ticketBoxGoods.setPicUrl(goods.getPicUrl());
+                    ticketBoxGoods.setValue(goods.getValue());
+                }
+            }
+            ticketBoxGoodsService.saveBatch(param.getGoodsList());
         }
-      }
-      TicketAwards ticketAwards = new TicketAwards();
-      ticketAwards.setAwardsId(ticketAwardsParam.getAwardsId());
-      ticketAwards.setAwardsLabel(ticketAwardsParam.getAwardsLabel());
-      ticketAwardsList.add(ticketAwards);
-
-      List<TicketAwardsPrize> ticketAwardsPrizeList = new ArrayList<>();
-      List<String> prizeIdList = ticketAwardsParam.getPrizeList().stream().map(ticketAwardsPrizeParam -> {
-        // 奖品id为空则封装要新增的奖品
-        if (StringUtils.isBlank(ticketAwardsPrizeParam.getPrizeId())) {
-          // 封装奖品信息
-          TicketAwardsPrize awardsPrize = mapperFacade.map(ticketAwardsPrizeParam, TicketAwardsPrize.class);
-          awardsPrize.setPrizeId(bizIdGenerator.newId());
-          awardsPrize.setBoxId(ticketBox.getBoxId());
-          awardsPrize.setAwardsId(ticketAwardsParam.getAwardsId());
-          if (TicketTypeEnum.OFFLINE.equals(ticketBox.getType())) {
-            // 线下票的则默认为整个奖项的数量
-            awardsPrize.setQuantity(ticketAwardsParam.getQuantity());
-          }
-          awardsPrize.setRemainQty(awardsPrize.getQuantity());
-          awardsPrize.setCashedQty(0);
-          if (ticketAwardsPrizeParam.getPrizeType() == TicketPrizeTypeEnum.GOODS) {
-            Goods goods = goodsService.getById(awardsPrize.getRefId());
-            awardsPrize.setTitle(goods.getTitle());
-            awardsPrize.setPicUrl(goods.getPicUrl());
-            awardsPrize.setValue(goods.getValue());
-          } else if (ticketAwardsPrizeParam.getPrizeType() == TicketPrizeTypeEnum.COUPON) {
-            Coupon coupon = couponService.getById(awardsPrize.getRefId());
-            awardsPrize.setTitle(coupon.getTitle());
-            awardsPrize.setPicUrl(coupon.getPicUrl());
-            awardsPrize.setValue(coupon.getDiscount());
-          } else if (ticketAwardsPrizeParam.getPrizeType() == TicketPrizeTypeEnum.COUPON_PKG) {
-            CouponPkg couponPkg = couponPkgService.getById(awardsPrize.getRefId());
-            awardsPrize.setTitle(couponPkg.getTitle());
-            awardsPrize.setValue(couponPkg.getFacePrice());
-            awardsPrize.setPicUrl(couponPkg.getPicUrl());
-          } else {
-            awardsPrize.setTitle("盲豆");
-            awardsPrize.setPicUrl(Constants.MANGDOU_PIC);
-          }
-          ticketAwardsPrizeList.add(awardsPrize);
-        } else {
-          boolean rtn = true;
-          if (TicketTypeEnum.ONLINE.equals(ticketBox.getType())) {
-            TicketAwardsPrize ticketAwardsPrize = ticketAwardsPrizeService.getById(ticketAwardsPrizeParam.getPrizeId());
-            // 校验奖品数量不能少于已兑奖数量
-            if (ticketAwardsPrizeParam.getQuantity() < ticketAwardsPrize.getCashedQty()) {
-              throw new ServiceException("奖品数量不能少于已兑奖数量");
+
+        // 清除指定渠道内容
+        ticketBoxChannelService.remove(
+            new LambdaUpdateWrapper<TicketBoxChannel>().eq(TicketBoxChannel::getBoxId, ticketBox.getBoxId()));
+
+        // 指定渠道
+        if (TicketBoxSaleChannelTypeEnum.PART.getValue().equals(param.getSaleChannelType())) {
+            List<Long> channelIdList = param.getChannelIdList();
+            if (CollectionUtils.isEmpty(channelIdList)) {
+                throw new ServiceException("渠道列表为空");
             }
-            // 更新奖级信息等
-            rtn = ticketAwardsPrizeService.update(new LambdaUpdateWrapper<TicketAwardsPrize>()
-                    .set(TicketAwardsPrize::getSortWeight, ticketAwardsPrizeParam.getSortWeight())
-                    .set(TicketAwardsPrize::getQuantity, ticketAwardsPrizeParam.getQuantity())
-                    .set(TicketAwardsPrize::getRemainQty, ticketAwardsPrizeParam.getQuantity() - ticketAwardsPrize.getCashedQty())
-                    .eq(TicketAwardsPrize::getPrizeId, ticketAwardsPrizeParam.getPrizeId())
-                    .eq(TicketAwardsPrize::getRemainQty, ticketAwardsPrize.getRemainQty()));
-
-          } else {
-            // 更新排序权重字段
-            rtn = ticketAwardsPrizeService.update(new LambdaUpdateWrapper<TicketAwardsPrize>()
-                    .set(TicketAwardsPrize::getSortWeight, ticketAwardsPrizeParam.getSortWeight())
-                    .eq(TicketAwardsPrize::getPrizeId, ticketAwardsPrizeParam.getPrizeId()));
-          }
-          if (!rtn) {
-            throw new ServiceException("操作盲票频繁,请重试");
-          }
+            // 校验嵌套问题
+            List<String> channelNoList = channelService.list(new LambdaQueryWrapper<Channel>()
+                    .in(Channel::getChannelId, channelIdList)
+                    .orderByDesc(Channel::getLevel))
+                .stream().map(Channel::getChannelNo)
+                .collect(Collectors.toList());
+            for (int i = 0; i < channelNoList.size(); i++) {
+                for (int j = 0; j < channelNoList.size(); j++) {
+                    if (i == j) {
+                        continue;
+                    }
+
+                    boolean flag = channelNoList.get(i).startsWith(channelNoList.get(j) + ".");
+                    if (flag) {
+                        throw new ServiceException("已选择更高级的渠道,不支持渠道相互嵌套!");
+                    }
+                }
+            }
+            List<TicketBoxChannel> ticketBoxChannelList = new ArrayList<>();
+            for (Long channelId : channelIdList) {
+                TicketBoxChannel ticketBoxChannel = new TicketBoxChannel();
+                ticketBoxChannel.setBoxId(ticketBox.getBoxId());
+                ticketBoxChannel.setChannelId(channelId);
+                ticketBoxChannelList.add(ticketBoxChannel);
+            }
+            ticketBoxChannelService.saveBatch(ticketBoxChannelList);
+        }
 
+        // 校验更新奖品信息
+        if (CollectionUtils.isEmpty(param.getAwardsList())) {
+            throw new ServiceException("奖品列表不能为空");
         }
-        return ticketAwardsPrizeParam.getPrizeId();
-      }).collect(Collectors.toList());
-
-      // 如果新的奖品id为空,则清除原来的所有奖品
-      if (CollectionUtils.isEmpty(prizeIdList)) {
-        if (TicketTypeEnum.ONLINE.equals(ticketBox.getType())) {
-          int cashedCount = ticketAwardsPrizeService.count(new LambdaQueryWrapper<TicketAwardsPrize>()
-                  .eq(TicketAwardsPrize::getAwardsId, ticketAwardsParam.getAwardsId())
-                  .ne(TicketAwardsPrize::getCashedQty, 0));
-          if (cashedCount != 0) {
-            throw new ServiceException("包含已兑奖记录的奖品不能从奖级中删除");
-          }
+        // 校验奖品信息
+        int count = ticketAwardsService.count(
+            new LambdaQueryWrapper<TicketAwards>().eq(TicketAwards::getBoxId, param.getBoxId()));
+        if (count != param.getAwardsList().size()) {
+            throw new ServiceException("奖级数量与原来不同");
         }
 
-        ticketAwardsPrizeService.update(new LambdaUpdateWrapper<TicketAwardsPrize>().set(TicketAwardsPrize::getIsDeleted, 1).eq(TicketAwardsPrize::getAwardsId, ticketAwardsParam.getAwardsId()));
-      } else {
-        // 去重后,清除原来的奖品
-        // 查询原来的奖品信息
-        List<TicketAwardsPrize> oldTicketAwardsPrizeList = ticketAwardsPrizeService.list(new LambdaQueryWrapper<TicketAwardsPrize>()
-                .select(TicketAwardsPrize::getPrizeId)
-                .eq(TicketAwardsPrize::getAwardsId, ticketAwardsParam.getAwardsId())
-            .eq(TicketAwardsPrize::getIsDeleted, 0));
-        if (CollectionUtils.isEmpty(oldTicketAwardsPrizeList)) {
-          throw new ServiceException("原奖品列表为空");
-        }
-        List<String> oldPrizeIdList = oldTicketAwardsPrizeList.stream().map(TicketAwardsPrize::getPrizeId).collect(Collectors.toList());
-        // 去重原来的奖品信息
-        oldPrizeIdList.removeAll(prizeIdList);
-
-        if (CollectionUtils.isNotEmpty(oldPrizeIdList)) {
-          if (TicketTypeEnum.ONLINE.equals(ticketBox.getType())) {
-            int cashedCount = ticketAwardsPrizeService.count(new LambdaQueryWrapper<TicketAwardsPrize>()
-                    .in(TicketAwardsPrize::getPrizeId, oldPrizeIdList)
-                    .ne(TicketAwardsPrize::getCashedQty, 0));
-            if (cashedCount != 0) {
-              throw new ServiceException("包含已兑奖记录的奖品不能从奖级中删除");
+        List<TicketAwards> ticketAwardsList = new ArrayList<>();
+        // 更新奖品信息
+        for (TicketAwardsParam ticketAwardsParam : param.getAwardsList()) {
+            if (CollectionUtils.isEmpty(ticketAwardsParam.getPrizeList())) {
+                throw new ServiceException("奖品列表不能为空");
             }
-          }
 
-          // 删除原来的奖品信息
-          ticketAwardsPrizeService.update(new LambdaUpdateWrapper<TicketAwardsPrize>().set(TicketAwardsPrize::getIsDeleted, 1).in(TicketAwardsPrize::getPrizeId, oldPrizeIdList));
-        }
-      }
+            // 线上票需要判断商品数量合法性
+//            if (TicketTypeEnum.ONLINE.equals(ticketBox.getType())) {
+//                int quantity = ticketAwardsParam.getPrizeList().stream().mapToInt(TicketAwardsPrizeParam::getQuantity)
+//                    .sum();
+//                if (quantity != ticketAwardsParam.getQuantity()) {
+//                    throw new ServiceException("奖品总数值不相同");
+//                }
+//            }
+            TicketAwards ticketAwards = new TicketAwards();
+            ticketAwards.setAwardsId(ticketAwardsParam.getAwardsId());
+            ticketAwards.setAwardsLabel(ticketAwardsParam.getAwardsLabel());
+            ticketAwardsList.add(ticketAwards);
+
+            List<TicketAwardsPrize> ticketAwardsPrizeList = new ArrayList<>();
+            List<String> prizeIdList = ticketAwardsParam.getPrizeList().stream().map(ticketAwardsPrizeParam -> {
+                // 奖品id为空则封装要新增的奖品
+                if (StringUtils.isBlank(ticketAwardsPrizeParam.getPrizeId())) {
+                    // 封装奖品信息
+                    TicketAwardsPrize awardsPrize = mapperFacade.map(ticketAwardsPrizeParam, TicketAwardsPrize.class);
+                    awardsPrize.setPrizeId(bizIdGenerator.newId());
+                    awardsPrize.setBoxId(ticketBox.getBoxId());
+                    awardsPrize.setAwardsId(ticketAwardsParam.getAwardsId());
+                    if (TicketTypeEnum.OFFLINE.equals(ticketBox.getType())) {
+                        // 线下票的则默认为整个奖项的数量
+                        awardsPrize.setQuantity(ticketAwardsParam.getQuantity());
+                    }
+                    awardsPrize.setRemainQty(awardsPrize.getQuantity());
+                    awardsPrize.setCashedQty(0);
+                    if (ticketAwardsPrizeParam.getPrizeType() == TicketPrizeTypeEnum.GOODS) {
+                        Goods goods = goodsService.getById(awardsPrize.getRefId());
+                        awardsPrize.setTitle(goods.getTitle());
+                        awardsPrize.setPicUrl(goods.getPicUrl());
+                        awardsPrize.setValue(goods.getValue());
+                    } else if (ticketAwardsPrizeParam.getPrizeType() == TicketPrizeTypeEnum.COUPON) {
+                        Coupon coupon = couponService.getById(awardsPrize.getRefId());
+                        awardsPrize.setTitle(coupon.getTitle());
+                        awardsPrize.setPicUrl(coupon.getPicUrl());
+                        awardsPrize.setValue(coupon.getDiscount());
+                    } else if (ticketAwardsPrizeParam.getPrizeType() == TicketPrizeTypeEnum.COUPON_PKG) {
+                        CouponPkg couponPkg = couponPkgService.getById(awardsPrize.getRefId());
+                        awardsPrize.setTitle(couponPkg.getTitle());
+                        awardsPrize.setValue(couponPkg.getFacePrice());
+                        awardsPrize.setPicUrl(couponPkg.getPicUrl());
+                    } else {
+                        awardsPrize.setTitle("盲豆");
+                        awardsPrize.setPicUrl(Constants.MANGDOU_PIC);
+                    }
+                    ticketAwardsPrizeList.add(awardsPrize);
+                } else {
+                    boolean rtn = true;
+                    if (TicketTypeEnum.ONLINE.equals(ticketBox.getType())) {
+                        TicketAwardsPrize ticketAwardsPrize = ticketAwardsPrizeService.getById(
+                            ticketAwardsPrizeParam.getPrizeId());
+                        // 校验奖品数量不能少于已兑奖数量
+                        if (ticketAwardsPrizeParam.getQuantity() < ticketAwardsPrize.getCashedQty()) {
+                            throw new ServiceException("奖品数量不能少于已兑奖数量");
+                        }
+                        // 更新奖级信息等
+                        rtn = ticketAwardsPrizeService.update(new LambdaUpdateWrapper<TicketAwardsPrize>()
+                            .set(TicketAwardsPrize::getSortWeight, ticketAwardsPrizeParam.getSortWeight())
+                            .set(TicketAwardsPrize::getQuantity, ticketAwardsPrizeParam.getQuantity())
+                            .set(TicketAwardsPrize::getRemainQty,
+                                ticketAwardsPrizeParam.getQuantity() - ticketAwardsPrize.getCashedQty())
+                            .eq(TicketAwardsPrize::getPrizeId, ticketAwardsPrizeParam.getPrizeId())
+                            .eq(TicketAwardsPrize::getRemainQty, ticketAwardsPrize.getRemainQty()));
+
+                    } else {
+                        // 更新排序权重字段
+                        rtn = ticketAwardsPrizeService.update(new LambdaUpdateWrapper<TicketAwardsPrize>()
+                            .set(TicketAwardsPrize::getSortWeight, ticketAwardsPrizeParam.getSortWeight())
+                            .eq(TicketAwardsPrize::getPrizeId, ticketAwardsPrizeParam.getPrizeId()));
+                    }
+                    if (!rtn) {
+                        throw new ServiceException("操作盲票频繁,请重试");
+                    }
+
+                }
+                return ticketAwardsPrizeParam.getPrizeId();
+            }).collect(Collectors.toList());
+
+            // 如果新的奖品id为空,则清除原来的所有奖品
+            if (CollectionUtils.isEmpty(prizeIdList)) {
+                if (TicketTypeEnum.ONLINE.equals(ticketBox.getType())) {
+                    int cashedCount = ticketAwardsPrizeService.count(new LambdaQueryWrapper<TicketAwardsPrize>()
+                        .eq(TicketAwardsPrize::getAwardsId, ticketAwardsParam.getAwardsId())
+                        .ne(TicketAwardsPrize::getCashedQty, 0));
+                    if (cashedCount != 0) {
+                        throw new ServiceException("包含已兑奖记录的奖品不能从奖级中删除");
+                    }
+                }
+
+                ticketAwardsPrizeService.update(
+                    new LambdaUpdateWrapper<TicketAwardsPrize>().set(TicketAwardsPrize::getIsDeleted, 1)
+                        .eq(TicketAwardsPrize::getAwardsId, ticketAwardsParam.getAwardsId()));
+            } else {
+                // 去重后,清除原来的奖品
+                // 查询原来的奖品信息
+                List<TicketAwardsPrize> oldTicketAwardsPrizeList = ticketAwardsPrizeService.list(
+                    new LambdaQueryWrapper<TicketAwardsPrize>()
+                        .select(TicketAwardsPrize::getPrizeId)
+                        .eq(TicketAwardsPrize::getAwardsId, ticketAwardsParam.getAwardsId())
+                        .eq(TicketAwardsPrize::getIsDeleted, 0));
+                if (CollectionUtils.isEmpty(oldTicketAwardsPrizeList)) {
+                    throw new ServiceException("原奖品列表为空");
+                }
+                List<String> oldPrizeIdList = oldTicketAwardsPrizeList.stream().map(TicketAwardsPrize::getPrizeId)
+                    .collect(Collectors.toList());
+                // 去重原来的奖品信息
+                oldPrizeIdList.removeAll(prizeIdList);
+
+                if (CollectionUtils.isNotEmpty(oldPrizeIdList)) {
+                    if (TicketTypeEnum.ONLINE.equals(ticketBox.getType())) {
+                        int cashedCount = ticketAwardsPrizeService.count(new LambdaQueryWrapper<TicketAwardsPrize>()
+                            .in(TicketAwardsPrize::getPrizeId, oldPrizeIdList)
+                            .ne(TicketAwardsPrize::getCashedQty, 0));
+                        if (cashedCount != 0) {
+                            throw new ServiceException("包含已兑奖记录的奖品不能从奖级中删除");
+                        }
+                    }
+
+                    // 删除原来的奖品信息
+                    ticketAwardsPrizeService.update(
+                        new LambdaUpdateWrapper<TicketAwardsPrize>().set(TicketAwardsPrize::getIsDeleted, 1)
+                            .in(TicketAwardsPrize::getPrizeId, oldPrizeIdList));
+                }
+            }
 
-      // 新增奖品
-      if (CollectionUtils.isNotEmpty(ticketAwardsPrizeList)) {
-        ticketAwardsPrizeService.saveBatch(ticketAwardsPrizeList);
-      }
+            // 新增奖品
+            if (CollectionUtils.isNotEmpty(ticketAwardsPrizeList)) {
+                ticketAwardsPrizeService.saveBatch(ticketAwardsPrizeList);
+            }
 
-    }
-    //更新奖级信息
-    ticketAwardsService.updateBatchById(ticketAwardsList);
-    return true;
-  }
-
-  @Override
-  @Transactional(rollbackFor = Exception.class)
-  public String createTicketBox(TicketBoxCreateParam param) {
-    // 创建盲票组
-    TicketBox ticketBox = mapperFacade.map(param, TicketBox.class);
-    ticketBox.setPkgQty(ticketBox.getQuantity() / ticketBox.getPkgUnit());
-    ticketBox.setStatus(TicketBoxStatusEnum.WAIT);
-    ticketBox.setBoxNo(ticketBoxSerialService.generateSerial(ticketBox.getType()));
-    ticketBox.setBoxId(bizIdGenerator.newId());
-    // 序列号加密
-    ticketBox.setIsEncrypt(1);
-    ticketBox.setSaleChannelType(param.getSaleChannelType());
-    save(ticketBox);
-
-
-    // 关联商品
-    if (CollectionUtils.isNotEmpty(param.getGoodsList())) {
-      // 设置boxId和商品信息
-      for (TicketBoxGoods ticketBoxGoods : param.getGoodsList()) {
-        ticketBoxGoods.setBoxId(ticketBox.getBoxId());
-        Goods goods = goodsService.getById(ticketBoxGoods.getRefId());
-        if (goods != null) {
-          ticketBoxGoods.setTitle(goods.getTitle());
-          ticketBoxGoods.setPicUrl(goods.getPicUrl());
-          ticketBoxGoods.setValue(goods.getValue());
         }
-      }
-      ticketBoxGoodsService.saveBatch(param.getGoodsList());
+        //更新奖级信息
+        ticketAwardsService.updateBatchById(ticketAwardsList);
+        return true;
     }
 
-    // 指定渠道
-    if (TicketBoxSaleChannelTypeEnum.PART.getValue().equals(param.getSaleChannelType())) {
-      List<Long> channelIdList = param.getChannelIdList();
-      if (CollectionUtils.isEmpty(channelIdList)) {
-        throw new ServiceException("渠道列表为空");
-      }
-
-      // 校验嵌套问题
-      List<String> channelNoList = channelService.list(new LambdaQueryWrapper<Channel>()
-                                .in(Channel::getChannelId, channelIdList)
-                                .orderByDesc(Channel::getLevel))
-                                .stream().map(Channel::getChannelNo)
-                                .collect(Collectors.toList());
-      for (int i = 0; i < channelNoList.size(); i++) {
-        for (int j = 0; j < channelNoList.size(); j++) {
-          if (i == j) {
-            continue;
-          }
-          boolean flag = channelNoList.get(i).startsWith(channelNoList.get(j) + ".");
-          if (flag) {
-            throw new ServiceException("已选择更高级的渠道,不支持渠道相互嵌套!");
-          }
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public String createTicketBox(TicketBoxCreateParam param) {
+        // 创建盲票组
+        TicketBox ticketBox = mapperFacade.map(param, TicketBox.class);
+        ticketBox.setPkgQty(ticketBox.getQuantity() / ticketBox.getPkgUnit());
+        ticketBox.setStatus(TicketBoxStatusEnum.WAIT);
+        ticketBox.setBoxNo(ticketBoxSerialService.generateSerial(ticketBox.getType()));
+        ticketBox.setBoxId(bizIdGenerator.newId());
+        // 序列号加密
+        ticketBox.setIsEncrypt(1);
+        ticketBox.setSaleChannelType(param.getSaleChannelType());
+        save(ticketBox);
+
+        // 关联商品
+        if (CollectionUtils.isNotEmpty(param.getGoodsList())) {
+            // 设置boxId和商品信息
+            for (TicketBoxGoods ticketBoxGoods : param.getGoodsList()) {
+                ticketBoxGoods.setBoxId(ticketBox.getBoxId());
+                Goods goods = goodsService.getById(ticketBoxGoods.getRefId());
+                if (goods != null) {
+                    ticketBoxGoods.setTitle(goods.getTitle());
+                    ticketBoxGoods.setPicUrl(goods.getPicUrl());
+                    ticketBoxGoods.setValue(goods.getValue());
+                }
+            }
+            ticketBoxGoodsService.saveBatch(param.getGoodsList());
+        }
+
+        // 指定渠道
+        if (TicketBoxSaleChannelTypeEnum.PART.getValue().equals(param.getSaleChannelType())) {
+            List<Long> channelIdList = param.getChannelIdList();
+            if (CollectionUtils.isEmpty(channelIdList)) {
+                throw new ServiceException("渠道列表为空");
+            }
+
+            // 校验嵌套问题
+            List<String> channelNoList = channelService.list(new LambdaQueryWrapper<Channel>()
+                    .in(Channel::getChannelId, channelIdList)
+                    .orderByDesc(Channel::getLevel))
+                .stream().map(Channel::getChannelNo)
+                .collect(Collectors.toList());
+            for (int i = 0; i < channelNoList.size(); i++) {
+                for (int j = 0; j < channelNoList.size(); j++) {
+                    if (i == j) {
+                        continue;
+                    }
+                    boolean flag = channelNoList.get(i).startsWith(channelNoList.get(j) + ".");
+                    if (flag) {
+                        throw new ServiceException("已选择更高级的渠道,不支持渠道相互嵌套!");
+                    }
+                }
+            }
+
+            List<TicketBoxChannel> ticketBoxChannelList = new ArrayList<>();
+            for (Long channelId : channelIdList) {
+                TicketBoxChannel ticketBoxChannel = new TicketBoxChannel();
+                ticketBoxChannel.setBoxId(ticketBox.getBoxId());
+                ticketBoxChannel.setChannelId(channelId);
+                ticketBoxChannelList.add(ticketBoxChannel);
+            }
+            ticketBoxChannelService.saveBatch(ticketBoxChannelList);
         }
-      }
-
-      List<TicketBoxChannel> ticketBoxChannelList = new ArrayList<>();
-      for (Long channelId : channelIdList) {
-        TicketBoxChannel ticketBoxChannel = new TicketBoxChannel();
-        ticketBoxChannel.setBoxId(ticketBox.getBoxId());
-        ticketBoxChannel.setChannelId(channelId);
-        ticketBoxChannelList.add(ticketBoxChannel);
-      }
-      ticketBoxChannelService.saveBatch(ticketBoxChannelList);
-    }
 
-    // 创建奖级
-    List<TicketAwards> ticketAwardsList = new ArrayList<>();
-    List<TicketAwardsPrize> awardsPrizeList = new ArrayList<>();
-    BigDecimal sumHitRate = BigDecimal.ZERO;
-    for (int i = 0; i < param.getAwardsList().size(); i ++) {
-      TicketAwardsParam awardsParam = param.getAwardsList().get(i);
-      TicketAwards ticketAwards = mapperFacade.map(awardsParam, TicketAwards.class);
-      ticketAwards.setAwardsId(bizIdGenerator.newId());
-      ticketAwards.setBoxId(ticketBox.getBoxId());
-      if (i == param.getAwardsList().size() - 1) {
-        ticketAwards.setHitRate(new BigDecimal(100).subtract(sumHitRate));
-      } else {
-        BigDecimal hitRate = new BigDecimal(awardsParam.getQuantity() * 100).divide(
-            new BigDecimal(ticketBox.getQuantity()), 4, RoundingMode.DOWN);
-        sumHitRate = sumHitRate.add(hitRate);
-        ticketAwards.setHitRate(hitRate);
-      }
-      ticketAwardsList.add(ticketAwards);
-
-      for (TicketAwardsPrizeParam prizeParam : awardsParam.getPrizeList()) {
-        TicketAwardsPrize awardsPrize = mapperFacade.map(prizeParam, TicketAwardsPrize.class);
-        awardsPrize.setPrizeId(bizIdGenerator.newId());
-        awardsPrize.setBoxId(ticketBox.getBoxId());
-        awardsPrize.setAwardsId(ticketAwards.getAwardsId());
-        if (TicketTypeEnum.OFFLINE.equals(ticketBox.getType())) {
-          // 线下票的则默认为整个奖项的数量
-          awardsPrize.setQuantity(ticketAwards.getQuantity());
+        // 创建奖级
+        List<TicketAwards> ticketAwardsList = new ArrayList<>();
+        List<TicketAwardsPrize> awardsPrizeList = new ArrayList<>();
+        BigDecimal sumHitRate = BigDecimal.ZERO;
+        for (int i = 0; i < param.getAwardsList().size(); i++) {
+            TicketAwardsParam awardsParam = param.getAwardsList().get(i);
+            TicketAwards ticketAwards = mapperFacade.map(awardsParam, TicketAwards.class);
+            ticketAwards.setAwardsId(bizIdGenerator.newId());
+            ticketAwards.setBoxId(ticketBox.getBoxId());
+            if (i == param.getAwardsList().size() - 1) {
+                ticketAwards.setHitRate(new BigDecimal(100).subtract(sumHitRate));
+            } else {
+                BigDecimal hitRate = new BigDecimal(awardsParam.getQuantity() * 100).divide(
+                    new BigDecimal(ticketBox.getQuantity()), 4, RoundingMode.DOWN);
+                sumHitRate = sumHitRate.add(hitRate);
+                ticketAwards.setHitRate(hitRate);
+            }
+            ticketAwardsList.add(ticketAwards);
+
+            for (TicketAwardsPrizeParam prizeParam : awardsParam.getPrizeList()) {
+                TicketAwardsPrize awardsPrize = mapperFacade.map(prizeParam, TicketAwardsPrize.class);
+                awardsPrize.setPrizeId(bizIdGenerator.newId());
+                awardsPrize.setBoxId(ticketBox.getBoxId());
+                awardsPrize.setAwardsId(ticketAwards.getAwardsId());
+                if (TicketTypeEnum.OFFLINE.equals(ticketBox.getType())) {
+                    // 线下票的则默认为整个奖项的数量
+                    awardsPrize.setQuantity(ticketAwards.getQuantity());
+                }
+                awardsPrize.setRemainQty(awardsPrize.getQuantity());
+                awardsPrize.setCashedQty(0);
+                if (prizeParam.getPrizeType() == TicketPrizeTypeEnum.GOODS) {
+                    Goods goods = goodsService.getById(awardsPrize.getRefId());
+                    awardsPrize.setTitle(goods.getTitle());
+                    awardsPrize.setPicUrl(goods.getPicUrl());
+                    awardsPrize.setValue(goods.getValue());
+                } else if (prizeParam.getPrizeType() == TicketPrizeTypeEnum.COUPON) {
+                    Coupon coupon = couponService.getById(awardsPrize.getRefId());
+                    awardsPrize.setTitle(coupon.getTitle());
+                    awardsPrize.setPicUrl(coupon.getPicUrl());
+                    awardsPrize.setValue(coupon.getDiscount());
+                } else if (prizeParam.getPrizeType() == TicketPrizeTypeEnum.COUPON_PKG) {
+                    CouponPkg couponPkg = couponPkgService.getById(awardsPrize.getRefId());
+                    awardsPrize.setTitle(couponPkg.getTitle());
+                    awardsPrize.setValue(couponPkg.getFacePrice());
+                    awardsPrize.setPicUrl(couponPkg.getPicUrl());
+                } else {
+                    awardsPrize.setTitle("盲豆");
+                    awardsPrize.setPicUrl(Constants.MANGDOU_PIC);
+                }
+                awardsPrizeList.add(awardsPrize);
+            }
         }
-        awardsPrize.setRemainQty(awardsPrize.getQuantity());
-        awardsPrize.setCashedQty(0);
-        if (prizeParam.getPrizeType() == TicketPrizeTypeEnum.GOODS) {
-          Goods goods = goodsService.getById(awardsPrize.getRefId());
-          awardsPrize.setTitle(goods.getTitle());
-          awardsPrize.setPicUrl(goods.getPicUrl());
-          awardsPrize.setValue(goods.getValue());
-        } else if (prizeParam.getPrizeType() == TicketPrizeTypeEnum.COUPON) {
-          Coupon coupon = couponService.getById(awardsPrize.getRefId());
-          awardsPrize.setTitle(coupon.getTitle());
-          awardsPrize.setPicUrl(coupon.getPicUrl());
-          awardsPrize.setValue(coupon.getDiscount());
-        } else if (prizeParam.getPrizeType() == TicketPrizeTypeEnum.COUPON_PKG) {
-          CouponPkg couponPkg = couponPkgService.getById(awardsPrize.getRefId());
-          awardsPrize.setTitle(couponPkg.getTitle());
-          awardsPrize.setValue(couponPkg.getFacePrice());
-          awardsPrize.setPicUrl(couponPkg.getPicUrl());
-        } else {
-          awardsPrize.setTitle("盲豆");
-          awardsPrize.setPicUrl(Constants.MANGDOU_PIC);
+        ticketAwardsService.saveBatch(ticketAwardsList);
+        ticketAwardsPrizeService.saveBatch(awardsPrizeList);
+
+        if (StringUtils.isNotBlank(ticketBox.getBoxId())) {
+            // 插入盲票生成异步任务
+            Assert.isTrue(asyncTaskService.insertAsyncTask(AsyncTaskTypeEnum.TICKET_GENERATE, ticketBox.getBoxId()),
+                "盲票组保存,创建异步任务失败. boxId:" + ticketBox.getBoxId());
         }
-        awardsPrizeList.add(awardsPrize);
-      }
+
+        return ticketBox.getBoxId();
     }
-    ticketAwardsService.saveBatch(ticketAwardsList);
-    ticketAwardsPrizeService.saveBatch(awardsPrizeList);
 
-    if (StringUtils.isNotBlank(ticketBox.getBoxId())) {
-      // 插入盲票生成异步任务
-      Assert.isTrue(asyncTaskService.insertAsyncTask(AsyncTaskTypeEnum.TICKET_GENERATE, ticketBox.getBoxId()),"盲票组保存,创建异步任务失败. boxId:" +  ticketBox.getBoxId());
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void removeTicketBox(String boxId) {
+        removeById(boxId);
+        ticketPackageService.remove(new LambdaQueryWrapper<TicketPackage>().eq(TicketPackage::getBoxId, boxId));
+        ticketService.remove(new LambdaQueryWrapper<Ticket>().eq(Ticket::getBoxId, boxId));
+        ticketAwardsService.remove(new LambdaQueryWrapper<TicketAwards>().eq(TicketAwards::getBoxId, boxId));
+        ticketAwardsPrizeService.remove(
+            new LambdaQueryWrapper<TicketAwardsPrize>().eq(TicketAwardsPrize::getBoxId, boxId));
     }
 
-    return ticketBox.getBoxId();
-  }
-
-  @Override
-  @Transactional(rollbackFor = Exception.class)
-  public void removeTicketBox(String boxId) {
-    removeById(boxId);
-    ticketPackageService.remove(new LambdaQueryWrapper<TicketPackage>().eq(TicketPackage::getBoxId, boxId));
-    ticketService.remove(new LambdaQueryWrapper<Ticket>().eq(Ticket::getBoxId, boxId));
-    ticketAwardsService.remove(new LambdaQueryWrapper<TicketAwards>().eq(TicketAwards::getBoxId, boxId));
-    ticketAwardsPrizeService.remove(new LambdaQueryWrapper<TicketAwardsPrize>().eq(TicketAwardsPrize::getBoxId, boxId));
-  }
-
-  @Override
-  @Transactional(rollbackFor = Exception.class)
-  public void generateTicket(String boxId) {
-    TicketBox ticketBox = getById(boxId);
-    Assert.isTrue(ticketBox.getStatus() == TicketBoxStatusEnum.WAIT,
-        "盲票生成时,票组状态不是出票中,boxId=" + boxId);
-    List<TicketAwards> ticketAwardsList = ticketAwardsService.list(
-        new LambdaQueryWrapper<TicketAwards>()
-            .eq(TicketAwards::getBoxId, ticketBox.getBoxId())
-            .orderByAsc(TicketAwards::getQuantity));
-    // 分包
-    int pkgNum = ticketBox.getPkgQty();
-    int pkgUnit = ticketBox.getPkgUnit();
-
-    Map<Integer, List<PkgAwards>> pkgAwardsMap = generatePkgAwards(
-        ticketBox, ticketAwardsList, pkgNum, pkgUnit);
-
-    // 生成票包记录和盲票记录
-    int pkgCnt = 0;
-    int ticketCnt = 0;
-    List<TicketPackage> ticketPackageList = new ArrayList<>();
-    for (Integer key : pkgAwardsMap.keySet()) {
-      pkgCnt += 1;
-      TicketPackage ticketPackage = new TicketPackage();
-      ticketPackage.setPkgId(bizIdGenerator.newId());
-      ticketPackage.setBoxId(ticketBox.getBoxId());
-      ticketPackage.setPkgNo(ticketBox.getBoxNo() + "-" + String.format("%1$04d", pkgCnt));
-      ticketPackage.setStartSn(
-          ticketPackage.getPkgNo() + "-" + String.format("%1$07d", ticketCnt + 1));
-      ticketPackage.setEndSn(
-          ticketPackage.getPkgNo() + "-" + String.format("%1$07d", ticketCnt + pkgUnit));
-      ticketPackage.setStatus(TicketPkgStatusEnum.FOR_SALE);
-      ticketPackage.setSaleStatus(TicketPkgSaleStatusEnum.WAIT_SALE);
-      ticketPackage.setSaleQty(0);
-      ticketPackage.setPkgUnit(ticketBox.getPkgUnit());
-      ticketPackageList.add(ticketPackage);
-
-      List<PkgAwards> pkgAwardsList = pkgAwardsMap.get(key);
-      LogUtil.debug(logger, "第{0}包盲票奖项数量为{1}", pkgCnt, pkgAwardsList);
-      List<Ticket> ticketList = new ArrayList<>();
-      for (int j = 1; j <= pkgUnit; j++) {
-        ticketCnt += 1;
-        Iterator<PkgAwards> iterator = pkgAwardsList.iterator();
-        while (iterator.hasNext()) {
-          PkgAwards next = iterator.next();
-          if (next.getQuantity() == 0) {
-            iterator.remove();
-          }
-        }
-        LogUtil.debug(logger, "开始生成第{0}包、第{1}盲票", pkgCnt, j);
-        int random = getPrizeIndex(pkgAwardsList);
-        PkgAwards pkgAwards = pkgAwardsList.get(random);
-        pkgAwards.setQuantity(pkgAwards.getQuantity() - 1);
-
-        Ticket ticket = new Ticket();
-        ticket.setTicketId(bizIdGenerator.newIdWithUidSharding(ticketBox.getBoxNo()));
-        ticket.setBoxId(ticketBox.getBoxId());
-        ticket.setPkgId(ticketPackage.getPkgId());
-        ticket.setTitle(ticketBox.getTitle());
-        ticket.setSerialNo(ticketPackage.getPkgNo() + "-" + String.format("%1$07d", ticketCnt));
-        ticket.setFacePrice(ticketBox.getFacePrice());
-        int luckyNum = new Random().nextInt(99) + 1;
-        ticket.setCipherLuckyNum(RSAUtil.encrypt(String.valueOf(luckyNum)));
-        List<TicketDrawNumDTO> drawNumDTOList = new ArrayList<>();
-        drawNumDTOList.add(new TicketDrawNumDTO(pkgAwards.getName(), luckyNum));
-        // 再生成17个随机数字
-        List<Integer> randomNumList = getRandomList(Arrays.asList(luckyNum), 17, 99);
-        for (Integer drawNum : randomNumList) {
-          int awardsNum = new Random().nextInt(ticketAwardsList.size());
-          drawNumDTOList.add(
-              new TicketDrawNumDTO(ticketAwardsList.get(awardsNum).getName(), drawNum));
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void generateTicket(String boxId) {
+        TicketBox ticketBox = getById(boxId);
+        Assert.isTrue(ticketBox.getStatus() == TicketBoxStatusEnum.WAIT,
+            "盲票生成时,票组状态不是出票中,boxId=" + boxId);
+        List<TicketAwards> ticketAwardsList = ticketAwardsService.list(
+            new LambdaQueryWrapper<TicketAwards>()
+                .eq(TicketAwards::getBoxId, ticketBox.getBoxId())
+                .orderByAsc(TicketAwards::getQuantity));
+        // 分包
+        int pkgNum = ticketBox.getPkgQty();
+        int pkgUnit = ticketBox.getPkgUnit();
+
+        Map<Integer, List<PkgAwards>> pkgAwardsMap = generatePkgAwards(
+            ticketBox, ticketAwardsList, pkgNum, pkgUnit);
+
+        // 生成票包记录和盲票记录
+        int pkgCnt = 0;
+        int ticketCnt = 0;
+        List<TicketPackage> ticketPackageList = new ArrayList<>();
+        for (Integer key : pkgAwardsMap.keySet()) {
+            pkgCnt += 1;
+            TicketPackage ticketPackage = new TicketPackage();
+            ticketPackage.setPkgId(bizIdGenerator.newId());
+            ticketPackage.setBoxId(ticketBox.getBoxId());
+            ticketPackage.setPkgNo(ticketBox.getBoxNo() + "-" + String.format("%1$04d", pkgCnt));
+            ticketPackage.setStartSn(
+                ticketPackage.getPkgNo() + "-" + String.format("%1$07d", ticketCnt + 1));
+            ticketPackage.setEndSn(
+                ticketPackage.getPkgNo() + "-" + String.format("%1$07d", ticketCnt + pkgUnit));
+            ticketPackage.setStatus(TicketPkgStatusEnum.FOR_SALE);
+            ticketPackage.setSaleStatus(TicketPkgSaleStatusEnum.WAIT_SALE);
+            ticketPackage.setSaleQty(0);
+            ticketPackage.setPkgUnit(ticketBox.getPkgUnit());
+            ticketPackageList.add(ticketPackage);
+
+            List<PkgAwards> pkgAwardsList = pkgAwardsMap.get(key);
+            LogUtil.debug(logger, "第{0}包盲票奖项数量为{1}", pkgCnt, pkgAwardsList);
+            List<Ticket> ticketList = new ArrayList<>();
+            for (int j = 1; j <= pkgUnit; j++) {
+                ticketCnt += 1;
+                Iterator<PkgAwards> iterator = pkgAwardsList.iterator();
+                while (iterator.hasNext()) {
+                    PkgAwards next = iterator.next();
+                    if (next.getQuantity() == 0) {
+                        iterator.remove();
+                    }
+                }
+                LogUtil.debug(logger, "开始生成第{0}包、第{1}盲票", pkgCnt, j);
+                int random = getPrizeIndex(pkgAwardsList);
+                PkgAwards pkgAwards = pkgAwardsList.get(random);
+                pkgAwards.setQuantity(pkgAwards.getQuantity() - 1);
+
+                Ticket ticket = new Ticket();
+                ticket.setTicketId(bizIdGenerator.newIdWithUidSharding(ticketBox.getBoxNo()));
+                ticket.setBoxId(ticketBox.getBoxId());
+                ticket.setPkgId(ticketPackage.getPkgId());
+                ticket.setTitle(ticketBox.getTitle());
+                ticket.setSerialNo(ticketPackage.getPkgNo() + "-" + String.format("%1$07d", ticketCnt));
+                ticket.setFacePrice(ticketBox.getFacePrice());
+                int luckyNum = new Random().nextInt(99) + 1;
+                ticket.setCipherLuckyNum(RSAUtil.encrypt(String.valueOf(luckyNum)));
+                List<TicketDrawNumDTO> drawNumDTOList = new ArrayList<>();
+                drawNumDTOList.add(new TicketDrawNumDTO(pkgAwards.getName(), luckyNum));
+                // 再生成17个随机数字
+                List<Integer> randomNumList = getRandomList(Arrays.asList(luckyNum), 17, 99);
+                for (Integer drawNum : randomNumList) {
+                    int awardsNum = new Random().nextInt(ticketAwardsList.size());
+                    drawNumDTOList.add(
+                        new TicketDrawNumDTO(ticketAwardsList.get(awardsNum).getName(), drawNum));
+                }
+                Collections.shuffle(drawNumDTOList);
+
+                ticket.setDrawNum(JSONObject.toJSONString(drawNumDTOList));
+                ticket.setIsPhysical(1);
+                ticket.setStatus(TicketStatusEnum.NOT_PAY);
+                ticketList.add(ticket);
+            }
+            ticketService.saveBatch(ticketList);
         }
-        Collections.shuffle(drawNumDTOList);
-
-        ticket.setDrawNum(JSONObject.toJSONString(drawNumDTOList));
-        ticket.setIsPhysical(1);
-        ticket.setStatus(TicketStatusEnum.NOT_PAY);
-        ticketList.add(ticket);
-      }
-      ticketService.saveBatch(ticketList);
-    }
-    ticketPackageService.saveBatch(ticketPackageList);
-
-    boolean rst = update(new LambdaUpdateWrapper<TicketBox>().set(TicketBox::getStatus, TicketBoxStatusEnum.DONE)
-        .eq(TicketBox::getBoxId, boxId).eq(TicketBox::getStatus, TicketBoxStatusEnum.WAIT));
-    Assert.isTrue(rst, "盲票生成完,更新盲票组状态失败。boxId:{0}" + ticketBox.getBoxId());
-  }
-
-  private Map<Integer, List<PkgAwards>> generatePkgAwards(TicketBox ticketBox,
-      List<TicketAwards> ticketAwardsList, int pkgNum, int pkgUnit) {
-    // 1.把各奖级的中奖数量分摊到每包上
-    Map<Integer, List<PkgAwards>> pkgAwardsMap = new HashMap<>();
-    for (int m = 1; m <= pkgNum; m++) {
-      pkgAwardsMap.put(m, new ArrayList<PkgAwards>());
+        ticketPackageService.saveBatch(ticketPackageList);
+
+        boolean rst = update(new LambdaUpdateWrapper<TicketBox>().set(TicketBox::getStatus, TicketBoxStatusEnum.DONE)
+            .eq(TicketBox::getBoxId, boxId).eq(TicketBox::getStatus, TicketBoxStatusEnum.WAIT));
+        Assert.isTrue(rst, "盲票生成完,更新盲票组状态失败。boxId:{0}" + ticketBox.getBoxId());
     }
-    List<Integer> excludePkgList = new ArrayList<>();
-    for (int k = 0; k < ticketAwardsList.size(); k++) {
-      TicketAwards ticketAwards = ticketAwardsList.get(k);
-      if (ticketAwards.getQuantity() < pkgNum) {
-        // 奖级数量少于包数的,随机不重复分配,随机数从1开始
-        int totalNone = pkgNum - ticketAwards.getQuantity(); // 轮空数
-        int moreExInt = excludePkgList.size() - totalNone; // 本轮要排除的数 - 轮空数
-        if (moreExInt > 0) {
-          // 多出来的数,从末尾开始删除
-          for (int l = 0; l < moreExInt; l++) {
-            excludePkgList.remove(excludePkgList.size() - 1);
-          }
+
+    private Map<Integer, List<PkgAwards>> generatePkgAwards(TicketBox ticketBox,
+        List<TicketAwards> ticketAwardsList, int pkgNum, int pkgUnit) {
+        // 1.把各奖级的中奖数量分摊到每包上
+        Map<Integer, List<PkgAwards>> pkgAwardsMap = new HashMap<>();
+        for (int m = 1; m <= pkgNum; m++) {
+            pkgAwardsMap.put(m, new ArrayList<PkgAwards>());
         }
-        List<Integer> randomList = getRandomList(excludePkgList, ticketAwards.getQuantity(),
-            pkgNum);
-        excludePkgList.addAll(randomList);
+        List<Integer> excludePkgList = new ArrayList<>();
+        for (int k = 0; k < ticketAwardsList.size(); k++) {
+            TicketAwards ticketAwards = ticketAwardsList.get(k);
+            if (ticketAwards.getQuantity() < pkgNum) {
+                // 奖级数量少于包数的,随机不重复分配,随机数从1开始
+                int totalNone = pkgNum - ticketAwards.getQuantity(); // 轮空数
+                int moreExInt = excludePkgList.size() - totalNone; // 本轮要排除的数 - 轮空数
+                if (moreExInt > 0) {
+                    // 多出来的数,从末尾开始删除
+                    for (int l = 0; l < moreExInt; l++) {
+                        excludePkgList.remove(excludePkgList.size() - 1);
+                    }
+                }
+                List<Integer> randomList = getRandomList(excludePkgList, ticketAwards.getQuantity(),
+                    pkgNum);
+                excludePkgList.addAll(randomList);
 //        LogUtil.debug(logger, "随机分配到的包序号为:{0}", JSONObject.toJSONString(randomList));
-        for (Integer pkgId : randomList) {
-          pkgAwardsMap.get(pkgId).add(
-              new PkgAwards(ticketAwards.getAwardsId(), ticketAwards.getName(),
-                  ticketAwards.getSort(), 1));
-        }
-      } else {
-        // 奖级数量大于包数的,平均分配,四舍五入
-        int remainQty = ticketAwards.getQuantity();
-        for (int i = 1; i <= pkgNum; i++) {
-          int quantity;
-          if (k == ticketAwardsList.size() - 1) {
-            // 最后一个奖项直接分配奖级数量差额即可
-            int hasQty = pkgAwardsMap.get(i).stream().mapToInt(PkgAwards::getQuantity).sum();
-            quantity = pkgUnit - hasQty;
-          } else {
-            if (i == pkgNum) {
-              quantity = remainQty;
+                for (Integer pkgId : randomList) {
+                    pkgAwardsMap.get(pkgId).add(
+                        new PkgAwards(ticketAwards.getAwardsId(), ticketAwards.getName(),
+                            ticketAwards.getSort(), 1));
+                }
             } else {
-              quantity = new BigDecimal(remainQty).divide(new BigDecimal(pkgNum - i + 1), 0,
-                  RoundingMode.HALF_UP).intValue();
+                // 奖级数量大于包数的,平均分配,四舍五入
+                int remainQty = ticketAwards.getQuantity();
+                for (int i = 1; i <= pkgNum; i++) {
+                    int quantity;
+                    if (k == ticketAwardsList.size() - 1) {
+                        // 最后一个奖项直接分配奖级数量差额即可
+                        int hasQty = pkgAwardsMap.get(i).stream().mapToInt(PkgAwards::getQuantity).sum();
+                        quantity = pkgUnit - hasQty;
+                    } else {
+                        if (i == pkgNum) {
+                            quantity = remainQty;
+                        } else {
+                            quantity = new BigDecimal(remainQty).divide(new BigDecimal(pkgNum - i + 1), 0,
+                                RoundingMode.HALF_UP).intValue();
+                        }
+                    }
+                    remainQty -= quantity;
+                    Assert.isTrue(remainQty >= 0, "剩余奖级数量不足分配。boxId:" + ticketBox.getBoxId());
+                    pkgAwardsMap.get(i).add(
+                        new PkgAwards(ticketAwards.getAwardsId(), ticketAwards.getName(),
+                            ticketAwards.getSort(), quantity));
+                }
             }
-          }
-          remainQty -= quantity;
-          Assert.isTrue(remainQty >= 0, "剩余奖级数量不足分配。boxId:" + ticketBox.getBoxId());
-          pkgAwardsMap.get(i).add(
-              new PkgAwards(ticketAwards.getAwardsId(), ticketAwards.getName(),
-                  ticketAwards.getSort(), quantity));
-        }
-      }
       /*LogUtil.debug(logger, "奖级{0}分包结果:{1}",
           k, JSONObject.toJSONString(pkgAwardsMap));*/
+        }
+        return pkgAwardsMap;
     }
-    return pkgAwardsMap;
-  }
-
-  /**
-   * 根据Math.random()产生一个double型的随机数,判断每个奖品出现的概率
-   *
-   * @param prizes
-   * @return random:奖品列表prizes中的序列(prizes中的第random个就是抽中的奖品)
-   */
-  public int getPrizeIndex(List<PkgAwards> prizes) {
-    DecimalFormat df = new DecimalFormat("######0.00");
-    int random = -1;
-
-    //计算总权重
-    double sumWeight = 0;
-    for (PkgAwards p : prizes) {
-      sumWeight += p.getQuantity();
-    }
-    LogUtil.info(logger, "sumWeight:{0}", sumWeight);
-    //产生随机数
-    double randomNumber;
-    randomNumber = Math.random();
-    LogUtil.debug(logger, "随机数:" + randomNumber);
-    //根据随机数在所有奖品分布的区域并确定所抽奖品
-    double d1 = 0;
-    double d2 = 0;
-    for (int i = 0; i < prizes.size(); i++) {
-      d2 += Double.parseDouble(String.valueOf(prizes.get(i).getQuantity())) / sumWeight;
-      if (i == 0) {
-        d1 = 0;
-      } else {
-        d1 += Double.parseDouble(String.valueOf(prizes.get(i - 1).getQuantity())) / sumWeight;
-      }
-      LogUtil.debug(logger, "prize:{0},区间 d1:{1}, d2:{2}",
-          JSONObject.toJSONString(prizes.get(i)), d1, d2);
-      if (randomNumber >= d1 && randomNumber < d2) {
-        random = i;
-        break;
-      }
-    }
-    LogUtil.debug(logger, "抽中序号:{0}", random);
-    return random;
-  }
-
-  /**
-   * 从total中随机取n个不重复的数,范围[1, total]
-   *
-   * @param n
-   * @param total
-   * @return
-   */
-  private List<Integer> getRandomList(List<Integer> excludeList, int n, int total) {
-    List<Integer> randomList = new ArrayList<>();
-    Random rand = new Random();
-    boolean[] bool = new boolean[total];
-    for (Integer exInt : excludeList) {
-      bool[exInt - 1] = true;
-    }
-    int randInt = 0;
-    for (int i = 0; i < n; i++) {
-      do {
-        randInt = rand.nextInt(total);
-      } while (bool[randInt]);
-      bool[randInt] = true;
-      randomList.add(randInt + 1);
-    }
-    return randomList;
-  }
-
-  @Data
-  private static class PkgAwards {
-
-    private String awardsId;
 
     /**
-     * 奖项名
+     * 根据Math.random()产生一个double型的随机数,判断每个奖品出现的概率
+     *
+     * @param prizes
+     * @return random:奖品列表prizes中的序列(prizes中的第random个就是抽中的奖品)
      */
-    private String name;
+    public int getPrizeIndex(List<PkgAwards> prizes) {
+        DecimalFormat df = new DecimalFormat("######0.00");
+        int random = -1;
+
+        //计算总权重
+        double sumWeight = 0;
+        for (PkgAwards p : prizes) {
+            sumWeight += p.getQuantity();
+        }
+        LogUtil.info(logger, "sumWeight:{0}", sumWeight);
+        //产生随机数
+        double randomNumber;
+        randomNumber = Math.random();
+        LogUtil.debug(logger, "随机数:" + randomNumber);
+        //根据随机数在所有奖品分布的区域并确定所抽奖品
+        double d1 = 0;
+        double d2 = 0;
+        for (int i = 0; i < prizes.size(); i++) {
+            d2 += Double.parseDouble(String.valueOf(prizes.get(i).getQuantity())) / sumWeight;
+            if (i == 0) {
+                d1 = 0;
+            } else {
+                d1 += Double.parseDouble(String.valueOf(prizes.get(i - 1).getQuantity())) / sumWeight;
+            }
+            LogUtil.debug(logger, "prize:{0},区间 d1:{1}, d2:{2}",
+                JSONObject.toJSONString(prizes.get(i)), d1, d2);
+            if (randomNumber >= d1 && randomNumber < d2) {
+                random = i;
+                break;
+            }
+        }
+        LogUtil.debug(logger, "抽中序号:{0}", random);
+        return random;
+    }
 
     /**
-     * 奖项顺序
+     * 从total中随机取n个不重复的数,范围[1, total]
+     *
+     * @param n
+     * @param total
+     * @return
      */
-    private Integer sort;
+    private List<Integer> getRandomList(List<Integer> excludeList, int n, int total) {
+        List<Integer> randomList = new ArrayList<>();
+        Random rand = new Random();
+        boolean[] bool = new boolean[total];
+        for (Integer exInt : excludeList) {
+            bool[exInt - 1] = true;
+        }
+        int randInt = 0;
+        for (int i = 0; i < n; i++) {
+            do {
+                randInt = rand.nextInt(total);
+            } while (bool[randInt]);
+            bool[randInt] = true;
+            randomList.add(randInt + 1);
+        }
+        return randomList;
+    }
 
-    /**
-     * 奖项数量
-     */
-    private Integer quantity;
+    @Data
+    private static class PkgAwards {
+
+        private String awardsId;
 
-    PkgAwards(String awardsId, String name, Integer sort, Integer quantity) {
-      this.awardsId = awardsId;
-      this.name = name;
-      this.sort = sort;
-      this.quantity = quantity;
+        /**
+         * 奖项名
+         */
+        private String name;
+
+        /**
+         * 奖项顺序
+         */
+        private Integer sort;
+
+        /**
+         * 奖项数量
+         */
+        private Integer quantity;
+
+        PkgAwards(String awardsId, String name, Integer sort, Integer quantity) {
+            this.awardsId = awardsId;
+            this.name = name;
+            this.sort = sort;
+            this.quantity = quantity;
+        }
     }
-  }
 }

+ 28 - 27
mp-service/src/main/java/com/qs/mp/channel/domain/vo/ChannelVO.java

@@ -12,31 +12,32 @@ import lombok.Data;
 @Data
 @ApiModel("渠道经销商相关出参类")
 public class ChannelVO extends Channel {
-  @ApiModelProperty("经销网点数")
-  long siteCnt;   // 经销网点数
-  @ApiModelProperty("用户数")
-  long userCnt;   // 用户数
-
-  @ApiModelProperty("上级渠道名称")
-  String parentName; // 上级渠道名称
-
-  @ApiModelProperty("订单数")
-  long orderCnt;   // 订单数
-  @ApiModelProperty("子渠道数量")
-  int childCnt;  // 子渠道数量
-  @ApiModelProperty("经营数据")
-  ChannelOperDataVO operData;  // 经营数据
-  // SysUser sysUser;  // 关联的用户账号信息
-
-  @ApiModelProperty("所有上级渠道名称 eg: 一级渠道 > 上N级渠道 ** > 上级渠道")
-  String parentsName; // 所有上级渠道名称 eg: 一级渠道 > 上N级渠道 ** > 上级渠道
-
-  @ApiModelProperty("线下库存(盲票张数)")
-  long offLineQtyCnt; // 线下库存(盲票张数)
-  @ApiModelProperty("线下销售(线下盲票销售张数)")
-  long offLineSaleCnt; // 线下销售(线下盲票销售张数)
-  @ApiModelProperty("线上销售(显示盲票销售张数)")
-  long onLineSaleCnt; // 线上销售(显示盲票销售张数)
-  
-  
+
+    @ApiModelProperty("经销网点数")
+    long siteCnt;   // 经销网点数
+    @ApiModelProperty("用户数")
+    long userCnt;   // 用户数
+
+    @ApiModelProperty("上级渠道名称")
+    String parentName; // 上级渠道名称
+
+    @ApiModelProperty("订单数")
+    long orderCnt;   // 订单数
+    @ApiModelProperty("子渠道数量")
+    int childCnt;  // 子渠道数量
+    @ApiModelProperty("经营数据")
+    ChannelOperDataVO operData;  // 经营数据
+    // SysUser sysUser;  // 关联的用户账号信息
+
+    @ApiModelProperty("所有上级渠道名称 eg: 一级渠道 > 上N级渠道 ** > 上级渠道")
+    String parentsName; // 所有上级渠道名称 eg: 一级渠道 > 上N级渠道 ** > 上级渠道
+
+    @ApiModelProperty("线下库存(盲票张数)")
+    long offLineQtyCnt; // 线下库存(盲票张数)
+    @ApiModelProperty("线下销售(线下盲票销售张数)")
+    long offLineSaleCnt; // 线下销售(线下盲票销售张数)
+    @ApiModelProperty("线上销售(显示盲票销售张数)")
+    long onLineSaleCnt; // 线上销售(显示盲票销售张数)
+
+
 }