소스 검색

商品、代金券列表、添加、编辑、上架下架接口

guanglong 3 년 전
부모
커밋
4846165820

+ 81 - 142
mp-admin/src/main/java/com/qs/mp/web/controller/api/admin/CouponMgrController.java

@@ -3,15 +3,17 @@ package com.qs.mp.web.controller.api.admin;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.qs.mp.channel.domain.Channel;
-import com.qs.mp.channel.domain.param.ChannelParam;
-import com.qs.mp.channel.domain.vo.ChannelVO;
-import com.qs.mp.channel.service.IChannelService;
-import com.qs.mp.channel.service.IChannelUserRelService;
+import com.qs.mp.admin.domain.Coupon;
+import com.qs.mp.admin.domain.CouponTicket;
+import com.qs.mp.admin.domain.param.CouponParam;
+import com.qs.mp.admin.domain.param.GoodsParam;
+import com.qs.mp.admin.domain.vo.CouponVO;
+import com.qs.mp.admin.service.ICouponService;
+import com.qs.mp.admin.service.ICouponTicketService;
 import com.qs.mp.common.constant.UserConstants;
 import com.qs.mp.common.core.domain.AjaxResult;
 import com.qs.mp.common.core.page.TableDataInfo;
-import com.qs.mp.common.enums.ChannelRoleEnum;
+import com.qs.mp.common.enums.CouponStatusEnum;
 import com.qs.mp.common.enums.ErrorCodeEnum;
 import com.qs.mp.system.domain.SysUser;
 import com.qs.mp.system.service.ISysUserService;
@@ -39,17 +41,17 @@ import org.springframework.web.bind.annotation.RestController;
  * @create 2022-03-09 23:45:48
  * @describe 代金券管理前端控制器
  */
-@Api("渠道管理API")
+@Api("代金券管理API")
 @RestController
 @RequestMapping("/api/v1/mp/admin/coupon/*")
 @Component
 public class CouponMgrController extends BaseApiController {
 
 	@Autowired
-	private IChannelService channelService;
+	private ICouponService couponService;
 	
 	@Autowired
-	private IChannelUserRelService channelUserRelService;
+	private ICouponTicketService couponTicketService;
 	
 	@Autowired
 	private ISysUserService userService;
@@ -58,188 +60,125 @@ public class CouponMgrController extends BaseApiController {
 	private MapperFacade mapperFacade;
 
 	/**
-	 * 获取我的下级渠道列表信息,支持翻页
+	 * 获取我的下级代金券列表信息,支持翻页
 	 *
 	 * @return
 	 */
 	@PostMapping("/list")
-	public TableDataInfo listChannel(@RequestBody Channel channel) {
-		List<ChannelVO> list = new ArrayList<ChannelVO>();
+	public TableDataInfo listCoupon(@RequestBody Coupon coupon) {
+		List<Coupon> list = new ArrayList<Coupon>();
 		startPage();
-		QueryWrapper<Channel> queryWrapper = new QueryWrapper<>();
-		if(null!=channel && null != channel.getParentId()) {
-			queryWrapper.eq("t1.parent_id", channel.getParentId());
-		}
-		queryWrapper.gt("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.orderByAsc("t1.channel_id");
-		list = channelService.selectChannelVoList(queryWrapper);
-		if(null != list && list.size() > 0) {
-			for(ChannelVO channelVO : list) {
-				if(null != channelVO && StringUtils.isNotBlank(channelVO.getChannelNo())) {
-					int siteCnt = channelService.getChannelSiteCnt(channelVO.getChannelNo());
-					int userCnt = channelUserRelService.getChannelTotalUserCnt(channelVO.getChannelNo());
-					channelVO.setSiteCnt(siteCnt);
-					channelVO.setUserCnt(userCnt);
-					// 查询用户信息
-					// SysUser sysUser = userService.selectUserById(channelVO.getUserId());
-					// channelVO.setSysUser(sysUser);
- 				}
-			}
-		}
+		LambdaQueryWrapper<Coupon> queryWrapper = new LambdaQueryWrapper<Coupon>();
+		queryWrapper.like(null != coupon && StringUtils.isNotBlank(coupon.getTitle()), Coupon::getTitle, coupon.getTitle());
+		queryWrapper.like(null != coupon && StringUtils.isNotBlank(coupon.getStatus().getValue()), Coupon::getStatus, coupon.getStatus().getValue());
+		queryWrapper.orderByAsc(Coupon::getCreatedTime);
+		list = couponService.list(queryWrapper);
 		return getDataTable(list);
 	}
 	
 	
 	/**
-	 * 新增子渠道信息
+	 * 新增代金券信息
 	 * @param
 	 * @return
 	 */
-	@ApiOperation(value = "新增子渠道信息", notes = "渠道端新增子渠道")
+	@ApiOperation(value = "新增代金券信息", notes = "代金券端新增代金券")
 	@PostMapping("/create")
-	public AjaxResult channelCreate(@Validated @RequestBody ChannelParam 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.gt(Channel::getLevel, 1);
-		int nameCount = channelService.count(queryWrapper);
+	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());
+		int nameCount = couponService.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("");
+			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);
+	        }
 		}
 		// 3.插入数据
 		try {
-			channelService.saveChannel(channel,ChannelRoleEnum.CHANNEL);
+			couponService.saveCoupon(coupon,ticketList);
 		} catch (Exception e) {
-			return AjaxResult.error("渠道'" + channel.getName() + "'新增失败" + e.getMessage());
+			return AjaxResult.error("代金券'" + coupon.getTitle() + "'新增失败" + e.getMessage());
 		}
 		
-		return AjaxResult.success("渠道'" + channel.getName() + "'新增成功");
+		return AjaxResult.success("代金券'" + coupon.getTitle() + "'新增成功");
 	}
 
 	/**
-	 * 编辑子渠道信息
+	 * 编辑代金券信息
 	 * @param
 	 * @return
 	 */
-	@ApiOperation(value = "编辑子渠道信息", notes = "渠道端编辑子渠道")
+	@ApiOperation(value = "编辑代金券信息", notes = "代金券端编辑代金券")
 	@PostMapping("/update")
-	public AjaxResult channelUpdate(@Validated @RequestBody ChannelParam channelParam) {
-		if (null == channelParam || null == channelParam.getChannelId()) {
+	public AjaxResult couponUpdate(@Validated @RequestBody CouponParam couponParam) {
+		if (null == couponParam || StringUtils.isBlank(couponParam.getCouponId())) {
 			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.gt(Channel::getLevel, 1);
-			int nameCount = channelService.count(queryWrapper);
+		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());
+			int nameCount = couponService.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() + "已注册!");
+				return AjaxResult.error("代金券名称" + coupon.getTitle() + "已存在!");
 			}
-			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("父渠道不存在");
 		}
-		// 查询子渠道的最大佣金比例
-		QueryWrapper<Channel> queryWrapper = new QueryWrapper<Channel>();
-		queryWrapper.select("IFNULL(max(comm_rate),0) as commRate");
-		queryWrapper.lambda().eq(Channel::getParentId, channel.getChannelId());
-		Map<String, Object> map = channelService.getMap(queryWrapper);
-		if(null != map && map.containsKey("commRate")) {
-			BigDecimal commRate = new BigDecimal(map.get("commRate").toString());
-			if(!commRate.equals(BigDecimal.ZERO) && channel.getCommRate().compareTo(commRate) < 0) {
-				return AjaxResult.error("不能低于其子渠道的最大佣金比例");
-			}
+		// 使用范围
+		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());
+	        }
 		}
 		try {
-			channelService.updateChannel(channel, mobileChange);
+			couponService.updateCoupon(coupon, ticketList);
 		} catch (Exception e) {
 			return AjaxResult.error(e.getMessage());
 		}
-		return AjaxResult.success("渠道'" + channel.getName() + "'编辑成功");
+		return AjaxResult.success("代金券'" + coupon.getTitle() + "'编辑成功");
 	}
 	
 	
 	/**
-	 * 停用、启用渠道
+	 * 停用、启用代金券
 	 * @param
 	 * @return
 	 */
-	@ApiOperation(value = "停用、启用渠道信息", notes = "渠道管理编辑子渠道")
+	@ApiOperation(value = "停用、启用代金券信息", notes = "代金券管理编辑代金券")
 	@PostMapping("/status")
-	public AjaxResult channelStatus(@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)) {
+	public AjaxResult couponStatus(@RequestBody CouponParam couponParam) {
+		String couponId = (null != couponParam && StringUtils.isNotBlank(couponParam.getCouponId()))?couponParam.getCouponId():"";
+		CouponStatusEnum status = null != couponParam ?couponParam.getStatus():null;
+		if (StringUtils.isBlank(couponId)
+				|| null == 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();
-//				sysUser.setUserId(channel.getUserId());
-//				sysUser.setStatus(status);
-//				userService.updateUserStatus(sysUser);
-//			}
+			couponService.lambdaUpdate().set(Coupon::getStatus, couponParam.getStatus()).eq(Coupon::getCouponId, couponId).update();
+			// 查询代金券信息
 		} catch (Exception e) {
 			return AjaxResult.error("操作失败");
 		}

+ 70 - 114
mp-admin/src/main/java/com/qs/mp/web/controller/api/admin/GoodsMgrController.java

@@ -3,9 +3,16 @@ package com.qs.mp.web.controller.api.admin;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.qs.mp.admin.domain.Coupon;
 import com.qs.mp.admin.domain.Goods;
+import com.qs.mp.admin.domain.GoodsCategory;
+import com.qs.mp.admin.domain.param.CouponParam;
+import com.qs.mp.admin.domain.param.GoodsParam;
 import com.qs.mp.admin.domain.vo.GoodsListVO;
+import com.qs.mp.admin.service.IGoodsCategoryService;
 import com.qs.mp.admin.service.IGoodsService;
+import com.qs.mp.admin.service.IGoodsSkuService;
 import com.qs.mp.channel.domain.Channel;
 import com.qs.mp.channel.domain.param.ChannelParam;
 import com.qs.mp.channel.domain.vo.ChannelVO;
@@ -15,6 +22,7 @@ import com.qs.mp.common.constant.UserConstants;
 import com.qs.mp.common.core.domain.AjaxResult;
 import com.qs.mp.common.core.page.TableDataInfo;
 import com.qs.mp.common.enums.ChannelRoleEnum;
+import com.qs.mp.common.enums.CouponStatusEnum;
 import com.qs.mp.common.enums.ErrorCodeEnum;
 import com.qs.mp.system.domain.SysUser;
 import com.qs.mp.system.service.ISysUserService;
@@ -50,10 +58,13 @@ public class GoodsMgrController extends BaseApiController {
 
 	@Autowired
 	private IGoodsService goodsService;
-
+	
 	@Autowired
-	private IChannelService channelService;
-
+	private IGoodsSkuService goodsSkuService;
+	
+	@Autowired
+	private IGoodsCategoryService goodsCategoryService;
+	
 	@Autowired
 	private ISysUserService sysUserService;
 
@@ -62,7 +73,7 @@ public class GoodsMgrController extends BaseApiController {
 
 
 	/**
-	 * 获取我的下级渠道列表信息,支持翻页
+	 * 查询商品列表, 支持翻页
 	 *
 	 * @return
 	 */
@@ -79,56 +90,37 @@ public class GoodsMgrController extends BaseApiController {
 
 
 	/**
-	 * 新增子渠道信息
+	 * 新增商品信息
 	 * @param
 	 * @return
 	 */
-	@ApiOperation(value = "新增子渠道信息", notes = "渠道端新增子渠道")
+	@ApiOperation(value = "新增商品信息", notes = "后台商品管理新增商品")
 	@PostMapping("/create")
-	public AjaxResult channelCreate(@Validated @RequestBody ChannelParam 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.gt(Channel::getLevel, 1);
-		int nameCount = channelService.count(queryWrapper);
-		if(nameCount > 0) {
-			return AjaxResult.error("渠道名称" + channel.getName() + "已存在!");
+	public AjaxResult channelCreate(@Validated @RequestBody GoodsParam goodsParam) {
+		if (goodsParam.getGoodsId() != null && goodsParam.getGoodsId() != 0) {
+			return AjaxResult.error("该商品已存在");
 		}
-		int mobileCount = channelService.count(
-		        new LambdaQueryWrapper<Channel>().eq(Channel::getMobile, channel.getMobile()));
-		if(mobileCount > 0) {
-			 return AjaxResult.error("手机号码" + channel.getMobile() + "已注册!");
+		Goods goods = mapperFacade.map(goodsParam, Goods.class);
+		// 1、校验名称是否重复(商品表)
+		LambdaQueryWrapper<Goods> queryWrapper = new LambdaQueryWrapper<>();
+		queryWrapper.eq(Goods::getTitle, goods.getTitle());
+		int titleCount = goodsService.count(queryWrapper);
+		if(titleCount > 0) {
+			return AjaxResult.error("商品名称" + goods.getTitle() + "已存在!");
 		}
-		// 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("");
+		
+		// 多SKU
+		if(goods.getMultiSku() == 1 
+				&&  (null == goodsParam.getSkuList() || goodsParam.getSkuList().size() == 0)) {
+			return AjaxResult.error("商品" + goods.getTitle() + "不满足多SKU条件!");
 		}
 		// 3.插入数据
 		try {
-			channelService.saveChannel(channel, ChannelRoleEnum.CHANNEL);
+			goodsService.saveGoods(goods, goodsParam.getSkuList());
 		} catch (Exception e) {
-			return AjaxResult.error("渠道'" + channel.getName() + "'新增失败" + e.getMessage());
+			return AjaxResult.error("商品'" + goods.getTitle() + "'新增失败" + e.getMessage());
 		}
-
-		return AjaxResult.success("渠道'" + channel.getName() + "'新增成功");
+		return AjaxResult.success("商品'" + goods.getTitle() + "'新增成功");
 	}
 
 	/**
@@ -136,97 +128,61 @@ public class GoodsMgrController extends BaseApiController {
 	 * @param
 	 * @return
 	 */
-	@ApiOperation(value = "编辑子渠道信息", notes = "渠道端编辑子渠道")
+	@ApiOperation(value = "编辑商品信息", notes = "后台商品管理修改商品信息")
 	@PostMapping("/update")
-	public AjaxResult channelUpdate(@Validated @RequestBody ChannelParam channelParam) {
-		/*if (null == channelParam || null == channelParam.getChannelId()) {
-			return error(ErrorCodeEnum.ERROR_CODE_1001);
+	public AjaxResult channelUpdate(@Validated @RequestBody GoodsParam goodsParam) {
+		
+		if (goodsParam.getGoodsId() != null && goodsParam.getGoodsId() != 0) {
+			return AjaxResult.error("该商品已存在");
 		}
-		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异常");
+		Goods oldGoods = goodsService.getById(goodsParam.getGoodsId());
+		if(null == oldGoods || null == oldGoods.getGoodsId()) {
+			return AjaxResult.error("商品'" + oldGoods.getTitle() + "'编辑失败,商品ID异常");
 		}
-		// 2.校验名称是否重复、手机号是否存在(渠道表);
-		if(!channel.getName().equals(oldChannel.getName())) {
-			LambdaQueryWrapper<Channel> queryWrapper = new LambdaQueryWrapper<>();
-			queryWrapper.eq(Channel::getName, channel.getName());
-			queryWrapper.gt(Channel::getLevel, 1);
-			int nameCount = channelService.count(queryWrapper);
-			if(nameCount > 0) {
-				return AjaxResult.error("渠道名称" + channel.getName() + "已存在!");
+		Goods goods = mapperFacade.map(goodsParam, Goods.class);
+		// 1、校验名称是否重复(商品表)
+		if(!goods.getTitle().equals(oldGoods.getTitle())) {
+			LambdaQueryWrapper<Goods> queryWrapper = new LambdaQueryWrapper<>();
+			queryWrapper.eq(Goods::getTitle, goods.getTitle());
+			int titleCount = goodsService.count(queryWrapper);
+			if(titleCount > 0) {
+				return AjaxResult.error("商品名称" + goods.getTitle() + "已存在!");
 			}
 		}
-		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("父渠道不存在");
-		}
-		// 查询子渠道的最大佣金比例
-		QueryWrapper<Channel> queryWrapper = new QueryWrapper<Channel>();
-		queryWrapper.select("IFNULL(max(comm_rate),0) as commRate");
-		queryWrapper.lambda().eq(Channel::getParentId, channel.getChannelId());
-		Map<String, Object> map = channelService.getMap(queryWrapper);
-		if(null != map && map.containsKey("commRate")) {
-			BigDecimal commRate = new BigDecimal(map.get("commRate").toString());
-			if(!commRate.equals(BigDecimal.ZERO) && channel.getCommRate().compareTo(commRate) < 0) {
-				return AjaxResult.error("不能低于其子渠道的最大佣金比例");
-			}
+		
+		// 多SKU
+		if(goods.getMultiSku() == 1 
+				&&  (null == goodsParam.getSkuList() || goodsParam.getSkuList().size() == 0)) {
+			return AjaxResult.error("商品" + goods.getTitle() + "不满足多SKU条件!");
 		}
+		// 3.插入数据
 		try {
-			channelService.updateChannel(channel, mobileChange);
+			goodsService.updateGoods(goods, goodsParam.getSkuList());
 		} catch (Exception e) {
-			return AjaxResult.error(e.getMessage());
+			return AjaxResult.error("商品'" + goods.getTitle() + "'新增失败" + e.getMessage());
 		}
-		return AjaxResult.success("渠道'" + channel.getName() + "'编辑成功");*/
-		return AjaxResult.success();
+		return AjaxResult.success("商品'" + goods.getTitle() + "'新增成功");
 	}
 
-
+	
+	
 	/**
-	 * 停用、启用渠道
+	 * 停用、启用商品
 	 * @param
 	 * @return
 	 */
-	@ApiOperation(value = "停用、启用渠道信息", notes = "渠道管理编辑子渠道")
+	@ApiOperation(value = "停用、启用代金券信息", notes = "代金券管理编辑代金券")
 	@PostMapping("/status")
-	public AjaxResult channelStatus(@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)
+	public AjaxResult couponStatus(@RequestBody Goods goods) {
+		String goodsId = (null != goods && StringUtils.isNotBlank(goods.getGoodsId()))?goods.getGoodsId():"";
+		String status = (null != goods && StringUtils.isNotBlank(goods.getStatus()))?goods.getStatus():"";
+		if (StringUtils.isBlank(goodsId)
 				|| 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();
-//				sysUser.setUserId(channel.getUserId());
-//				sysUser.setStatus(status);
-//				userService.updateUserStatus(sysUser);
-//			}
+			goodsService.lambdaUpdate().set(Goods::getStatus, goods.getStatus()).eq(Goods::getGoodsId, goodsId).update();
+			// 查询代金券信息
 		} catch (Exception e) {
 			return AjaxResult.error("操作失败");
 		}

+ 2 - 0
mp-service/src/main/java/com/qs/mp/admin/domain/Coupon.java

@@ -92,6 +92,8 @@ public class Coupon implements Serializable {
 
   /**
    * 使用范围;0通用 1生成券时指定范围 2发放时动态指定范围
+   *         0:进票门店  1、指定盲票  2:所有门票
+   *         
    */
   @TableField("use_area")
   @JSONField(serialzeFeatures = SerializerFeature.WriteEnumUsingToString)

+ 133 - 0
mp-service/src/main/java/com/qs/mp/admin/domain/param/CouponParam.java

@@ -0,0 +1,133 @@
+package com.qs.mp.admin.domain.param;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.alibaba.fastjson.serializer.SerializerFeature;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.qs.mp.common.enums.CouponDiscountTypeEnum;
+import com.qs.mp.common.enums.CouponDistributeTypeEnum;
+import com.qs.mp.common.enums.CouponStatusEnum;
+import com.qs.mp.common.enums.CouponTypeEnum;
+import com.qs.mp.common.enums.CouponUseAreaEnum;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.validation.constraints.NotNull;
+
+import lombok.Data;
+
+/**
+ * @describe 优惠券实体类
+ * @auther quanshu
+ * @create 2022-03-07 20:43:44
+ */
+@ApiModel(value = "添加、编辑优惠券参数")
+@Data
+public class CouponParam {
+
+  /**
+   * 主键
+   */
+  @ApiModelProperty(value = "代金券ID", required = false)
+  private String couponId;
+
+  /**
+   * 标题
+   */
+  @NotNull(message = "代金券名称不能为空")
+  @ApiModelProperty(value = "代金券名称", required = true)
+  private String title;
+
+  /**
+   * 类型;1用户盲票购买优惠券、2用户门店消费优惠券、3经销商盲票采购优惠券
+   */
+  @ApiModelProperty(value = "代金券类型", required = false)
+  @JSONField(serialzeFeatures = SerializerFeature.WriteEnumUsingToString)
+  private CouponTypeEnum type;
+
+  /**
+   * 图片
+   */
+  @ApiModelProperty(value = "代金券图片", required = false)
+  private String picUrl;
+
+  /**
+   * 使用说明
+   */
+  @ApiModelProperty(value = "使用说明", required = false)
+  private String description;
+
+  /**
+   * 优惠类型;1代金券(默认)、2折扣券、3兑换券
+   */
+  @ApiModelProperty(value = "优惠类型;1代金券、2折扣券、3兑换券", required = false)
+  @JSONField(serialzeFeatures = SerializerFeature.WriteEnumUsingToString)
+  private CouponDiscountTypeEnum discountType;
+
+  /**
+   * 优惠金额(比例)面值
+   */
+  @NotNull(message = "面值不能为空")
+  @ApiModelProperty(value = "优惠金额", required = true)
+  private Integer discount;
+
+  /**
+   * 最低消费金额
+   */
+  @ApiModelProperty(value = "最低消费金额", required = false)
+  private Integer minOrderAmt;
+
+  /**
+   * 渠道代金券,渠道承担比例
+   */
+  @NotNull(message = "门店默认承担比例不能为空")
+  @ApiModelProperty(value = "渠道代金券,渠道承担比例", required = true)
+  private Integer channelSharedRate;
+
+
+  /**
+   * 状态;off下架 on正常
+   */
+  @ApiModelProperty(value = "状态", required = false)
+  @JSONField(serialzeFeatures = SerializerFeature.WriteEnumUsingToString)
+  private CouponStatusEnum status;
+
+  /**
+   * 使用范围;0通用 1生成券时指定范围 2发放时动态指定范围
+   */
+  @NotNull(message = "代金券使用范围不能为空")
+  @ApiModelProperty(value = "使用范围", required = true)
+  @JSONField(serialzeFeatures = SerializerFeature.WriteEnumUsingToString)
+  private CouponUseAreaEnum useArea;
+
+  /**
+   * 发放方式;1系统发放(默认) 2用户主动领取
+   */
+  @ApiModelProperty(value = "发放方式", required = false)
+  @JSONField(serialzeFeatures = SerializerFeature.WriteEnumUsingToString)
+  private CouponDistributeTypeEnum distributeType;
+
+  /**
+   * 叠加使用;0不允许 1允许
+   */
+  @ApiModelProperty(value = "叠加使用", required = false)
+  private Integer compositeUse;
+
+  /**
+   * 有效期天数;从领券后开始多少天有效,0则使用绝对有效期
+   */
+  @NotNull(message = "有效期天数不能为空")
+  @ApiModelProperty(value = "有效期天数", required = false)
+  private Integer dueDays;
+
+  @ApiModelProperty(value = "盲票购买优惠券使用范围限制实体类列表", required = false)
+  private String boxIds;
+
+
+}

+ 101 - 0
mp-service/src/main/java/com/qs/mp/admin/domain/param/GoodsParam.java

@@ -0,0 +1,101 @@
+package com.qs.mp.admin.domain.param;
+
+import com.qs.mp.admin.domain.GoodsSku;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.List;
+
+import javax.validation.constraints.NotNull;
+
+import lombok.Data;
+
+/**
+ * @describe 商品库实体类
+ * @auther quanshu
+ * @create 2022-03-07 20:43:44
+ */
+@ApiModel(value = "添加、编辑商品参数")
+@Data
+public class GoodsParam {
+
+	@ApiModelProperty(value = "商品ID", required = false)
+	private Long goodsId;
+
+	@NotNull(message = "商品名称不能为空")
+	@ApiModelProperty(value = "商品名称", required = true)
+	private String title;
+
+	@ApiModelProperty(value = "商品类目ID", required = false)
+	private Long categoryId;
+
+	/**
+	 * 商品图片
+	 */
+	@NotNull(message = "商品图片不能为空")
+	@ApiModelProperty(value = "商品图片", required = true)
+	private String picUrl;
+
+	/**
+	 * 详情
+	 */
+	@NotNull(message = "商品详情不能为空")
+	@ApiModelProperty(value = "商品详情", required = true)
+	private String description;
+
+	/**
+	 * 原兑换价格
+	 */
+	@ApiModelProperty(value = "原兑换价格", required = false)
+	private Integer originPrice;
+
+	/**
+	 * 现兑换价格
+	 */
+	@ApiModelProperty(value = "现兑换价格", required = false)
+	private Integer exchangePrice;
+
+	/**
+	 * 商品价值
+	 */
+	@ApiModelProperty(value = "商品价值、成本", required = false)
+	private Integer value;
+
+	/**
+	 * 库存数量
+	 */
+	@ApiModelProperty(value = "库存数量", required = false)
+	private Integer quantity;
+
+	/**
+	 * 已兑换量
+	 */
+	@ApiModelProperty(value = "已兑换量", required = false)
+	private Integer exchangedQty;
+	
+	  /**
+	   * 兑换大厅是否展示,0不展示,1展示
+	   */
+	@NotNull(message = "兑换大厅是否展示不能为空")
+	@ApiModelProperty(value = "换大厅是否展示", required = true)
+	private Integer exchangeShow;
+
+	  /**
+	   * 是否多sku,0否,1是
+	   */
+	@NotNull(message = "是否多sku不能为空")
+	@ApiModelProperty(value = "是否多sku", required = true)
+	private Integer multiSku;
+
+	/**
+	 * 上架状态;上架/下架
+	 */
+	@ApiModelProperty(value = "上架状态", required = false)
+	private String status;
+
+	
+	@ApiModelProperty(value = "商品多SKU列表", required = false)
+	private List<GoodsSku> skuList;
+
+}

+ 0 - 5
mp-service/src/main/java/com/qs/mp/admin/domain/vo/CouponVO.java

@@ -2,16 +2,11 @@ package com.qs.mp.admin.domain.vo;
 
 import com.alibaba.fastjson.annotation.JSONField;
 import com.alibaba.fastjson.serializer.SerializerFeature;
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
 import com.qs.mp.common.enums.CouponDiscountTypeEnum;
 import com.qs.mp.common.enums.CouponDistributeTypeEnum;
 import com.qs.mp.common.enums.CouponStatusEnum;
 import com.qs.mp.common.enums.CouponTypeEnum;
 import com.qs.mp.common.enums.CouponUseAreaEnum;
-import java.io.Serializable;
 import java.util.Date;
 import lombok.Data;
 

+ 27 - 7
mp-service/src/main/java/com/qs/mp/admin/service/ICouponService.java

@@ -1,6 +1,9 @@
 package com.qs.mp.admin.service;
 
 import com.qs.mp.admin.domain.Coupon;
+import com.qs.mp.admin.domain.CouponTicket;
+import java.util.List;
+
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.qs.mp.admin.domain.Ticket;
 
@@ -14,11 +17,28 @@ import com.qs.mp.admin.domain.Ticket;
  */
 public interface ICouponService extends IService<Coupon> {
 
-  /**
-   * 发放
-   * @param ticket
-   * @param userId
-   * @param couponId
-   */
-  void distribute(Ticket ticket, Long userId, String couponId);
+	/**
+	 * 新增信息
+	 * 
+	 * @param coupon
+	 * @param ticketList
+	 */
+	public void saveCoupon(Coupon coupon, List<CouponTicket> ticketList);
+
+	/**
+	 * 修改信息
+	 * 
+	 * @param coupon
+	 * @param ticketList
+	 */
+	public void updateCoupon(Coupon coupon, List<CouponTicket> ticketList);
+
+	/**
+	 * 发放
+	 * 
+	 * @param ticket
+	 * @param userId
+	 * @param couponId
+	 */
+	void distribute(Ticket ticket, Long userId, String couponId);
 }

+ 16 - 0
mp-service/src/main/java/com/qs/mp/admin/service/IGoodsService.java

@@ -1,6 +1,9 @@
 package com.qs.mp.admin.service;
 
 import com.qs.mp.admin.domain.Goods;
+import com.qs.mp.admin.domain.GoodsSku;
+import java.util.List;
+
 import com.baomidou.mybatisplus.extension.service.IService;
 
 /**
@@ -13,4 +16,17 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface IGoodsService extends IService<Goods> {
 
+	/**
+	 * 新增商品信息
+	 * @param goods
+     * @param skuList
+     */
+    public void saveGoods(Goods goods, List<GoodsSku> skuList);
+
+    /**
+     * 编辑商品信息
+     * @param goods
+     * @param skuList
+     */
+    public void updateGoods(Goods goods, List<GoodsSku> skuList);
 }

+ 67 - 0
mp-service/src/main/java/com/qs/mp/admin/service/impl/CouponServiceImpl.java

@@ -2,9 +2,14 @@ package com.qs.mp.admin.service.impl;
 
 import com.alibaba.fastjson.JSONObject;
 import com.qs.mp.admin.domain.Coupon;
+import com.qs.mp.admin.domain.CouponTicket;
+import com.qs.mp.admin.domain.Goods;
+import com.qs.mp.admin.domain.GoodsSku;
 import com.qs.mp.admin.domain.Ticket;
 import com.qs.mp.admin.mapper.CouponMapper;
 import com.qs.mp.admin.service.ICouponService;
+import com.qs.mp.admin.service.ICouponTicketService;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qs.mp.common.enums.CouponUseAreaEnum;
 import com.qs.mp.common.enums.UserCouponStatusEnum;
@@ -18,6 +23,9 @@ import com.qs.mp.user.domain.UserTicketOrderItem;
 import com.qs.mp.user.service.IUserCouponChannelService;
 import com.qs.mp.user.service.IUserCouponService;
 import com.qs.mp.user.service.IUserTicketOrderItemService;
+
+import java.util.List;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -37,11 +45,17 @@ public class CouponServiceImpl extends ServiceImpl<CouponMapper, Coupon> impleme
 
   protected final Logger logger = LoggerFactory.getLogger(this.getClass());
 
+  @Autowired
+  private ICouponService couponService;
+  
   @Autowired
   private IUserCouponService userCouponService;
 
   @Autowired
   private IUserCouponChannelService userCouponChannelService;
+  
+  @Autowired
+  private ICouponTicketService couponTicketService;
 
   @Autowired
   private BizIdGenerator bizIdGenerator;
@@ -82,4 +96,57 @@ public class CouponServiceImpl extends ServiceImpl<CouponMapper, Coupon> impleme
       userCouponChannelService.save(userCouponChannel);
     }
   }
+  
+  @Override
+	@Transactional
+	public void saveCoupon(Coupon coupon, List<CouponTicket> ticketList) {
+	   coupon.setCouponId(bizIdGenerator.newId());
+		boolean res = couponService.save(coupon);
+		if(!res) {
+			throw new ServiceException("请联系管理员");
+		}
+		if(res && null != ticketList
+				&& ticketList.size() > 0) {
+			for(CouponTicket couponTicket:ticketList) {
+				if(null != couponTicket) {
+					couponTicket.setCouponId(coupon.getCouponId());
+				}
+			}
+			boolean skuRes = couponTicketService.saveBatch(ticketList);
+			if(!skuRes) {
+				throw new ServiceException("请联系管理员");
+			}
+		}
+	}
+
+	@Override
+	@Transactional
+	public void updateCoupon(Coupon coupon, List<CouponTicket> ticketList) {
+		boolean res = couponService.updateById(coupon);
+		if(!res) {
+			throw new ServiceException("请联系管理员");
+		}
+		// 多SKU
+		if(res && null != ticketList
+				&& ticketList.size() > 0) {
+			for(CouponTicket couponTicket:ticketList) {
+				if(null != couponTicket) {
+					couponTicket.setCouponId(couponTicket.getCouponId());
+				}
+			}
+			// TODO 未完待续
+			LambdaQueryWrapper<CouponTicket> queryWrapper = new LambdaQueryWrapper<>();
+			queryWrapper.eq(CouponTicket::getCouponId, coupon.getCouponId());
+			boolean delRes = couponTicketService.remove(queryWrapper);
+			if(delRes) {
+				boolean skuRes = couponTicketService.saveBatch(ticketList);
+				if(!skuRes) {
+					throw new ServiceException("请联系管理员");
+				}
+			}else {
+				throw new ServiceException("请联系管理员");
+			}
+			
+		}
+	}
 }

+ 62 - 0
mp-service/src/main/java/com/qs/mp/admin/service/impl/GoodsServiceImpl.java

@@ -1,10 +1,19 @@
 package com.qs.mp.admin.service.impl;
 
 import com.qs.mp.admin.domain.Goods;
+import com.qs.mp.admin.domain.GoodsSku;
 import com.qs.mp.admin.mapper.GoodsMapper;
 import com.qs.mp.admin.service.IGoodsService;
+import com.qs.mp.admin.service.IGoodsSkuService;
+import com.qs.mp.common.exception.ServiceException;
+import com.qs.mp.system.service.id.BizIdGenerator;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 /**
  * <p>
@@ -17,4 +26,57 @@ import org.springframework.stereotype.Service;
 @Service
 public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements IGoodsService {
 
+	@Autowired
+	private IGoodsService goodsService;
+	
+	@Autowired
+	private IGoodsSkuService goodsSkuService;
+	
+    @Autowired
+    private BizIdGenerator bizIdGenerator;
+	
+	@Override
+	@Transactional
+	public void saveGoods(Goods goods, List<GoodsSku> skuList) {
+		goods.setGoodsId(bizIdGenerator.newId());
+		boolean res = goodsService.save(goods);
+		if(!res) {
+			throw new ServiceException("请联系管理员");
+		}
+		if(res && null != skuList
+				&& skuList.size() > 0) {
+			for(GoodsSku goodsSku:skuList) {
+				if(null != goodsSku) {
+					goodsSku.setGoodsId(goods.getGoodsId());
+				}
+			}
+			boolean skuRes = goodsSkuService.saveBatch(skuList);
+			if(!skuRes) {
+				throw new ServiceException("请联系管理员");
+			}
+		}
+	}
+
+	@Override
+	@Transactional
+	public void updateGoods(Goods goods, List<GoodsSku> skuList) {
+		boolean res = goodsService.updateById(goods);
+		if(!res) {
+			throw new ServiceException("请联系管理员");
+		}
+		// 多SKU
+		if(res && null != skuList
+				&& skuList.size() > 0) {
+			for(GoodsSku goodsSku:skuList) {
+				if(null != goodsSku) {
+					goodsSku.setGoodsId(goods.getGoodsId());
+				}
+			}
+			// TODO 未完待续
+			boolean skuRes = goodsSkuService.saveBatch(skuList);
+			if(!skuRes) {
+				throw new ServiceException("请联系管理员");
+			}
+		}
+	}
 }