瀏覽代碼

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

Dev

See merge request quanshu/mp-server!68
zhong chunping 3 年之前
父節點
當前提交
1ea8a125f6

+ 31 - 8
mp-admin/src/main/java/com/qs/mp/web/controller/api/admin/GoodsMgrController.java

@@ -7,6 +7,7 @@ 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.GoodsSku;
 import com.qs.mp.admin.domain.param.CouponParam;
 import com.qs.mp.admin.domain.param.GoodsParam;
 import com.qs.mp.admin.domain.vo.GoodsListVO;
@@ -110,13 +111,24 @@ public class GoodsMgrController extends BaseApiController {
 		}
 		
 		// 多SKU
-		if(goods.getMultiSku() == 1 
-				&&  (null == goodsParam.getSkuList() || goodsParam.getSkuList().size() == 0)) {
-			return AjaxResult.error("商品" + goods.getTitle() + "不满足多SKU条件!");
+		List<GoodsSku> skuList = goodsParam.getSkuList();
+		if(goods.getMultiSku() == 1) { // 
+			if((null == skuList || skuList.size() == 0)) {
+				return AjaxResult.error("商品" + goods.getTitle() + "不满足多SKU条件!");
+			}else {
+				GoodsSku firstGoodsSku = skuList.get(0);
+				goods.setOriginPrice(firstGoodsSku.getOriginPrice());
+				goods.setExchangePrice(firstGoodsSku.getExchangePrice());
+				goods.setValue(firstGoodsSku.getValue());
+				goods.setCost(firstGoodsSku.getCost());
+				// 累计库存
+				int totalQuantity = skuList.stream().mapToInt(GoodsSku::getQuantity).sum();
+				goods.setQuantity(totalQuantity);
+			}
 		}
 		// 3.插入数据
 		try {
-			goodsService.saveGoods(goods, goodsParam.getSkuList());
+			goodsService.saveGoods(goods, skuList);
 		} catch (Exception e) {
 			return AjaxResult.error("商品'" + goods.getTitle() + "'新增失败" + e.getMessage());
 		}
@@ -151,13 +163,24 @@ public class GoodsMgrController extends BaseApiController {
 		}
 		
 		// 多SKU
-		if(goods.getMultiSku() == 1 
-				&&  (null == goodsParam.getSkuList() || goodsParam.getSkuList().size() == 0)) {
-			return AjaxResult.error("商品" + goods.getTitle() + "不满足多SKU条件!");
+		List<GoodsSku> skuList = goodsParam.getSkuList();
+		if(goods.getMultiSku() == 1) {
+			if((null == skuList || skuList.size() == 0)) {
+				return AjaxResult.error("商品" + goods.getTitle() + "不满足多SKU条件!");
+			}else {
+				GoodsSku firstGoodsSku = skuList.get(0);
+				goods.setOriginPrice(firstGoodsSku.getOriginPrice());
+				goods.setExchangePrice(firstGoodsSku.getExchangePrice());
+				goods.setValue(firstGoodsSku.getValue());
+				goods.setCost(firstGoodsSku.getCost());
+				// 累计库存
+				int totalQuantity = skuList.stream().mapToInt(GoodsSku::getQuantity).sum();
+				goods.setQuantity(totalQuantity);
+			}
 		}
 		// 3.插入数据
 		try {
-			goodsService.updateGoods(goods, goodsParam.getSkuList());
+			goodsService.updateGoods(goods, skuList);
 		} catch (Exception e) {
 			return AjaxResult.error("商品'" + goods.getTitle() + "'新增失败" + e.getMessage());
 		}

+ 9 - 1
mp-admin/src/main/java/com/qs/mp/web/controller/api/admin/TicketBoxMgrController.java

@@ -17,6 +17,7 @@ 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.ErrorCodeEnum;
+import com.qs.mp.common.enums.TicketTypeEnum;
 import com.qs.mp.system.service.ISysUserService;
 import com.qs.mp.web.controller.common.BaseApiController;
 import io.swagger.annotations.Api;
@@ -80,7 +81,14 @@ public class TicketBoxMgrController extends BaseApiController {
 	@PostMapping("/create")
 	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");
+			}
+		}
 		return AjaxResult.success();
 	}
 

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

@@ -58,8 +58,8 @@ public class GoodsSku implements Serializable {
   /**
    * 现兑换价格
    */
-  @TableField("sale_price")
-  private Integer salePrice;
+  @TableField("exchange_price")
+  private Integer exchangePrice;
 
   /**
    * 商品价格

+ 15 - 0
mp-service/src/main/java/com/qs/mp/admin/domain/param/TicketAwardsParam.java

@@ -1,7 +1,10 @@
 package com.qs.mp.admin.domain.param;
 
 import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
 import java.util.List;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
 import lombok.Data;
 
 /**
@@ -11,5 +14,17 @@ import lombok.Data;
 @ApiModel(value= "盲票组奖级参数")
 @Data
 public class TicketAwardsParam {
+
+  @NotEmpty(message = "奖品列表不能为空")
+  @ApiModelProperty(value = "奖品列表",required=true)
   List<TicketAwardsPrizeParam> prizeList;
+
+  @NotNull(message = "奖级名称不能为空")
+  @ApiModelProperty(value = "奖级名称",required=true)
+  private String name;
+
+  @NotNull(message = "奖级数量不能为空")
+  @ApiModelProperty(value = "奖级数量",required=true)
+  private Integer quantity;
+
 }

+ 5 - 0
mp-service/src/main/java/com/qs/mp/admin/domain/param/TicketBoxCreateParam.java

@@ -3,6 +3,8 @@ package com.qs.mp.admin.domain.param;
 import com.qs.mp.common.enums.TicketTypeEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import java.util.List;
+import javax.validation.constraints.NotEmpty;
 import javax.validation.constraints.NotNull;
 import lombok.Data;
 
@@ -44,4 +46,7 @@ public class TicketBoxCreateParam {
 	@ApiModelProperty(value = "分佣基数",required=true)
 	private Integer saleCommRate;
 
+	@NotEmpty(message = "奖级列表不能为空")
+	@ApiModelProperty(value = "奖级列表",required=true)
+	List<TicketAwardsParam> awardsList;
 }

+ 7 - 0
mp-service/src/main/java/com/qs/mp/admin/service/ITicketBoxService.java

@@ -2,6 +2,7 @@ package com.qs.mp.admin.service;
 
 import com.qs.mp.admin.domain.TicketBox;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.qs.mp.admin.domain.param.TicketBoxCreateParam;
 
 /**
  * <p>
@@ -13,4 +14,10 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface ITicketBoxService extends IService<TicketBox> {
 
+  /**
+   * 创建票组
+   * @param param
+   * @return
+   */
+  boolean createTicketBox(TicketBoxCreateParam param);
 }

+ 91 - 0
mp-service/src/main/java/com/qs/mp/admin/service/impl/TicketBoxServiceImpl.java

@@ -1,9 +1,30 @@
 package com.qs.mp.admin.service.impl;
 
+import com.qs.mp.admin.domain.Coupon;
+import com.qs.mp.admin.domain.Goods;
+import com.qs.mp.admin.domain.TicketAwards;
+import com.qs.mp.admin.domain.TicketAwardsPrize;
 import com.qs.mp.admin.domain.TicketBox;
+import com.qs.mp.admin.domain.param.TicketAwardsParam;
+import com.qs.mp.admin.domain.param.TicketAwardsPrizeParam;
+import com.qs.mp.admin.domain.param.TicketBoxCreateParam;
 import com.qs.mp.admin.mapper.TicketBoxMapper;
+import com.qs.mp.admin.service.ICouponService;
+import com.qs.mp.admin.service.IGoodsService;
+import com.qs.mp.admin.service.ITicketAwardsPrizeService;
+import com.qs.mp.admin.service.ITicketAwardsService;
 import com.qs.mp.admin.service.ITicketBoxService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qs.mp.common.enums.TicketBoxStatusEnum;
+import com.qs.mp.common.enums.TicketPrizeTypeEnum;
+import com.qs.mp.common.enums.TicketTypeEnum;
+import com.qs.mp.system.service.id.BizIdGenerator;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.ArrayList;
+import java.util.List;
+import ma.glasnost.orika.MapperFacade;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 /**
@@ -17,4 +38,74 @@ import org.springframework.stereotype.Service;
 @Service
 public class TicketBoxServiceImpl extends ServiceImpl<TicketBoxMapper, TicketBox> implements ITicketBoxService {
 
+  @Autowired
+  private MapperFacade mapperFacade;
+
+  @Autowired
+  private BizIdGenerator bizIdGenerator;
+
+  @Autowired
+  private ITicketAwardsService ticketAwardsService;
+
+  @Autowired
+  private ITicketAwardsPrizeService ticketAwardsPrizeService;
+
+  @Autowired
+  private IGoodsService goodsService;
+
+  @Autowired
+  private ICouponService couponService;
+
+  @Override
+  public boolean createTicketBox(TicketBoxCreateParam param) {
+    // 创建盲票组
+    TicketBox ticketBox = mapperFacade.map(param, TicketBox.class);
+    if (ticketBox.getType() == TicketTypeEnum.OFFLINE) {
+      ticketBox.setPkgQty(ticketBox.getQuantity() / ticketBox.getPkgUnit());
+    }
+    ticketBox.setStatus(TicketBoxStatusEnum.PUT_OFF);
+    ticketBox.setBoxId(bizIdGenerator.newId());
+    save(ticketBox);
+
+    // 创建奖级
+    List<TicketAwards> ticketAwardsList = new ArrayList<>();
+    List<TicketAwardsPrize> awardsPrizeList = new ArrayList<>();
+    for (TicketAwardsParam awardsParam : param.getAwardsList()) {
+      TicketAwards ticketAwards = mapperFacade.map(awardsParam, TicketAwards.class);
+      ticketAwards.setAwardsId(bizIdGenerator.newId());
+      ticketAwards.setBoxId(ticketBox.getBoxId());
+      BigDecimal hitRate = new BigDecimal(awardsParam.getQuantity()).divide(new BigDecimal(ticketBox.getQuantity()), 4, RoundingMode.DOWN);
+      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());
+        awardsPrize.setRemainQty(awardsPrize.getQuantity());
+        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 {
+          awardsPrize.setTitle("盲豆");
+          awardsPrize.setPicUrl("md.jpeg");
+        }
+        awardsPrizeList.add(awardsPrize);
+      }
+    }
+    ticketAwardsService.saveBatch(ticketAwardsList);
+    ticketAwardsPrizeService.saveBatch(awardsPrizeList);
+
+    // TODO 分包,生成券
+
+    return true;
+  }
 }

+ 2 - 2
mp-service/src/main/resources/mapper/admin/GoodsSkuMapper.xml

@@ -10,7 +10,7 @@
         <result column="pic_url" property="picUrl" />
         <result column="properties" property="properties" />
         <result column="origin_price" property="originPrice" />
-        <result column="sale_price" property="salePrice" />
+        <result column="exchange_price" property="exchangePrice" />
         <result column="value" property="value" />
         <result column="cost" property="cost" />
         <result column="quantity" property="quantity" />
@@ -21,7 +21,7 @@
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        sku_id, goods_id, name, pic_url, properties, origin_price, sale_price, value, cost, quantity, sold_qty, created_time, updated_time
+        sku_id, goods_id, name, pic_url, properties, origin_price, exchange_price, value, cost, quantity, sold_qty, created_time, updated_time
     </sql>
 
 </mapper>