Przeglądaj źródła

fix 批发下单

zoujiajian 2 lat temu
rodzic
commit
691ca44013

+ 5 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/GoodsWholesale.java

@@ -20,6 +20,11 @@ public class GoodsWholesale extends BaseEntity{
 
 
 	private String Config;
 	private String Config;
 
 
+	/**
+	 * 单价
+	 */
+	private BigDecimal single;
+
 	/**
 	/**
 	 * 返差价
 	 * 返差价
 	 */
 	 */

+ 22 - 2
netflix-dao/src/main/java/com/cyksj/model/entity/GoodsWholesaleUserDeposit.java

@@ -27,9 +27,9 @@ public class GoodsWholesaleUserDeposit extends BaseEntity{
 	private Type type;
 	private Type type;
 
 
 	/**
 	/**
-	 * 抵押状态 默认抵押中
+	 * 抵押状态
 	 */
 	 */
-	private Boolean status;
+	private Status status;
 
 
 	/**
 	/**
 	 * 累积批发
 	 * 累积批发
@@ -54,6 +54,26 @@ public class GoodsWholesaleUserDeposit extends BaseEntity{
 
 
 	private String transactionId;
 	private String transactionId;
 
 
+	public enum Status {
+		/**
+		 * 订单状态
+		 */
+		noPayment("待付款"),
+		hasPayment("已付款"),
+		refund("已退款"),
+		;
+
+		private String desc;
+
+		Status(String desc) {
+			this.desc = desc;
+		}
+
+		public String getDesc() {
+			return desc;
+		}
+	}
+
 
 
 	@Getter
 	@Getter
 	@AllArgsConstructor
 	@AllArgsConstructor

+ 29 - 0
netflix-dao/src/main/java/com/cyksj/model/request/GoodsWholesaleOrderPayReq.java

@@ -0,0 +1,29 @@
+package com.cyksj.model.request;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: GoodsWholesaleOrderPayReq
+ * 创建者: JavaZou
+ * 创建时间:2024/8/26 18:41
+ */
+@Getter
+@Setter
+public class GoodsWholesaleOrderPayReq {
+	@NotNull
+	private Long id;
+
+	private Long userId;
+
+	/**
+	 * 数量
+	 */
+	@NotNull
+	@Min(value = 1)
+	private Integer num;
+}

+ 45 - 0
netflix-dao/src/main/java/com/cyksj/model/views/GoodsWholesaleFrontView.java

@@ -0,0 +1,45 @@
+package com.cyksj.model.views;
+
+import com.ejlchina.searcher.bean.DbField;
+import com.ejlchina.searcher.bean.DbIgnore;
+import com.ejlchina.searcher.bean.SearchBean;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: GoodsWholesaleFrontView
+ * 创建者: JavaZou
+ * 创建时间:2024/8/26 17:46
+ */
+@Getter
+@Setter
+@SearchBean(tables = "goods_wholesale gw" +
+		" inner join goods_don g on g,id = gw.goods_id and g.status is true and g.deleted is true" +
+		" inner join goods_don_sku sku on sku.id = gw.sku_id and sku.status is true",
+		where = "gw.status is true and gw.deleted is true")
+public class GoodsWholesaleFrontView {
+	@DbField("gw.id")
+	private Long id;
+
+	@DbField("gw.goods_id")
+	private Long goodsId;
+
+	@DbField("gw.sku_id")
+	private Long skuId;
+
+	@DbField("g.title")
+	private String title;
+
+	@DbField("sku.spec_val")
+	private String specVal;
+
+	@DbField("gw.config")
+	private String config;
+
+	@DbField("gw.is_return")
+	private Boolean isReturn;
+
+	@DbIgnore
+	private Integer total;
+}

+ 1 - 0
netflix-service/src/main/java/com/cyksj/redis/RedisService.java

@@ -846,6 +846,7 @@ public class RedisService {
         LUMA_USER("luma_user:", "luma_user", 60 * 60 * 2L),
         LUMA_USER("luma_user:", "luma_user", 60 * 60 * 2L),
         LUMA_NUM_LIMIT("luma_num_limit:", "luma次数", 60 * 60 * 48L),
         LUMA_NUM_LIMIT("luma_num_limit:", "luma次数", 60 * 60 * 48L),
         NF_SET_TIME_LIMIT("nf_set_time_limit:", "设置pin码", 60l),
         NF_SET_TIME_LIMIT("nf_set_time_limit:", "设置pin码", 60l),
+        GOODS_WHOLESALE_KEY("goods_wholesale_key", "平台批发", 60 * 60 * 4L),
         ;
         ;
 
 
         private String name;
         private String name;

+ 14 - 0
netflix-service/src/main/java/com/cyksj/service/order/GoodsWholesalePayService.java

@@ -0,0 +1,14 @@
+package com.cyksj.service.order;
+
+import com.cyksj.model.entity.GoodsWholesaleOrderDon;
+import com.cyksj.model.request.GoodsWholesaleOrderPayReq;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: GoodsWholesalePayService
+ * 创建者: JavaZou
+ * 创建时间:2024/8/26 18:43
+ */
+public interface GoodsWholesalePayService {
+	GoodsWholesaleOrderDon unifiedPay(GoodsWholesaleOrderPayReq payReq);
+}

+ 86 - 0
netflix-service/src/main/java/com/cyksj/service/order/impl/GoodsWholesalePayServiceImpl.java

@@ -0,0 +1,86 @@
+package com.cyksj.service.order.impl;
+
+import cn.hutool.core.lang.Assert;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.cyksj.common.exception.BusinessRuntimeException;
+import com.cyksj.common.snowflake.Sequence;
+import com.cyksj.mapper.GoodsDonSkuMapper;
+import com.cyksj.mapper.GoodsWholesaleMapper;
+import com.cyksj.mapper.GoodsWholesaleOrderDonMapper;
+import com.cyksj.model.entity.GoodsDonSku;
+import com.cyksj.model.entity.GoodsWholesale;
+import com.cyksj.model.entity.GoodsWholesaleOrderDon;
+import com.cyksj.model.request.GoodsWholesaleOrderPayReq;
+import com.cyksj.service.order.GoodsWholesalePayService;
+import com.cyksj.service.user.UserBindRelationService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: GoodsWholesalePayServiceImpl
+ * 创建者: JavaZou
+ * 创建时间:2024/8/26 18:43
+ */
+@Service
+@RequiredArgsConstructor
+@Slf4j
+public class GoodsWholesalePayServiceImpl implements GoodsWholesalePayService {
+	private final GoodsWholesaleOrderDonMapper goodsWholesaleOrderDonMapper;
+
+	private final UserBindRelationService userBindRelationService;
+
+	private final GoodsWholesaleMapper goodsWholesaleMapper;
+
+	private final GoodsDonSkuMapper skuMapper;
+
+	private static final Sequence SEQUENCE = new Sequence(0);
+
+	@Override
+	public GoodsWholesaleOrderDon unifiedPay(GoodsWholesaleOrderPayReq payReq) {
+		Long userId = payReq.getUserId();
+		Long id = payReq.getId();
+		GoodsWholesale goodsWholesale = goodsWholesaleMapper.selectById(id);
+		Assert.notNull(goodsWholesale, "商品不存在");
+
+		if (!goodsWholesale.getStatus()) {
+			Assert.notNull(goodsWholesale, "商品已下架");
+		}
+		if (!goodsWholesale.getDeleted()) {
+			throw BusinessRuntimeException.getInstance("商品不存在");
+		}
+		List<Long> userIdList = userBindRelationService.getRelationUserIdList(userId, null);
+		Integer selectCount = goodsWholesaleOrderDonMapper.selectCount(Wrappers.lambdaQuery(GoodsWholesaleOrderDon.class)
+				.eq(GoodsWholesaleOrderDon::getSkuId, goodsWholesale.getSkuId())
+				.in(GoodsWholesaleOrderDon::getUserId, userIdList)
+				.eq(GoodsWholesaleOrderDon::getStatus, GoodsWholesaleOrderDon.Status.noPayment));
+		if (selectCount > 0) {
+			throw BusinessRuntimeException.getInstance("已有待支付订单");
+		}
+		BigDecimal singlePrice = goodsWholesale.getSingle();
+		GoodsDonSku sku = skuMapper.selectById(goodsWholesale.getSkuId());
+		if (sku == null) {
+			throw BusinessRuntimeException.getInstance("规格不存在");
+		}
+		if (!sku.getStatus()) {
+			throw BusinessRuntimeException.getInstance("规格已下架");
+		}
+		//是否交过押金
+		if (false) {
+			singlePrice = sku.getPrice();
+		}
+		GoodsWholesaleOrderDon orderDon = new GoodsWholesaleOrderDon();
+		orderDon.setUserId(userId);
+		orderDon.setGoodsId(goodsWholesale.getGoodsId());
+		orderDon.setSkuId(goodsWholesale.getSkuId());
+		orderDon.setMoney(BigDecimal.valueOf(payReq.getNum()).multiply(singlePrice));
+		String orderNo = SEQUENCE.nextId().toString();
+		orderDon.setOrderNo(orderNo);
+		goodsWholesaleOrderDonMapper.insert(orderDon);
+		return orderDon;
+	}
+}

+ 2 - 2
netflix-web/src/main/java/com/cyksj/web/controller/manage/goods/GoodsDonWholeSaleController.java

@@ -54,7 +54,7 @@ public class GoodsDonWholeSaleController {
 	 * 新增批发平台
 	 * 新增批发平台
 	 */
 	 */
 	@PostMapping("/post")
 	@PostMapping("/post")
-	public Result<String> saveWholesale(@RequestBody GoodsWholesale wholesale) {
+	public Result<String> saveWholesale(@RequestBody GoodsWholesale wholesale) throws Exception {
 		goodsWholesaleService.saveOrUpdateWholesale(wholesale);
 		goodsWholesaleService.saveOrUpdateWholesale(wholesale);
 		return GatewayResponse.SUCCESS.newBuilder().toResult();
 		return GatewayResponse.SUCCESS.newBuilder().toResult();
 	}
 	}
@@ -64,7 +64,7 @@ public class GoodsDonWholeSaleController {
 	 * 编辑批发平台
 	 * 编辑批发平台
 	 */
 	 */
 	@PostMapping("/post")
 	@PostMapping("/post")
-	public Result<String> updateWholesale(@RequestBody GoodsWholesale wholesale) {
+	public Result<String> updateWholesale(@RequestBody GoodsWholesale wholesale) throws Exception {
 		goodsWholesaleService.saveOrUpdateWholesale(wholesale);
 		goodsWholesaleService.saveOrUpdateWholesale(wholesale);
 		return GatewayResponse.SUCCESS.newBuilder().toResult();
 		return GatewayResponse.SUCCESS.newBuilder().toResult();
 	}
 	}

+ 98 - 0
netflix-web/src/main/java/com/cyksj/web/controller/wholesale/GoodsWholesaleWebController.java

@@ -0,0 +1,98 @@
+package com.cyksj.web.controller.wholesale;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.cyksj.dto.Result;
+import com.cyksj.enums.GatewayResponse;
+import com.cyksj.mapper.GoodsWholesaleOrderDonMapper;
+import com.cyksj.mapper.GoodsWholesaleUserDepositMapper;
+import com.cyksj.model.entity.GoodsWholesaleOrderDon;
+import com.cyksj.model.entity.GoodsWholesaleUserDeposit;
+import com.cyksj.model.request.GoodsWholesaleOrderPayReq;
+import com.cyksj.model.views.GoodsWholesaleFrontView;
+import com.cyksj.redis.RedisService;
+import com.cyksj.service.order.GoodsWholesalePayService;
+import com.cyksj.service.user.UserBindRelationService;
+import com.cyksj.web.util.StpUserUtil;
+import com.ejlchina.searcher.BeanSearcher;
+import com.ejlchina.searcher.util.MapUtils;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: GoodsWholesaleWebControlelr
+ * 创建者: JavaZou
+ * 创建时间:2024/8/26 17:41
+ */
+@RestController
+@RequestMapping("/applet/wholesale")
+@RequiredArgsConstructor
+public class GoodsWholesaleWebController {
+	private final BeanSearcher beanSearcher;
+
+	private final HttpServletRequest request;
+
+	private final RedisService redisService;
+
+	private final GoodsWholesaleOrderDonMapper orderDonMapper;
+
+	private final UserBindRelationService userBindRelationService;
+
+	private final GoodsWholesaleUserDepositMapper goodsWholesaleUserDepositMapper;
+
+	private final GoodsWholesalePayService goodsWholesalePayService;
+
+
+	/**
+	 * 平台批发列表
+	 */
+	@GetMapping("/get")
+	public Result<List<GoodsWholesaleFrontView>> goodsWholesaleList() {
+		long userId = StpUserUtil.getLoginIdAsLong();
+		String key = RedisService.key.GOODS_WHOLESALE_KEY.getName();
+		List<GoodsWholesaleFrontView> list = (List<GoodsWholesaleFrontView>) redisService.get(key);
+
+		if (list == null) {
+			list = beanSearcher.searchAll(GoodsWholesaleFrontView.class, MapUtils.builder().build());
+			redisService.setNx(key, list, RedisService.key.GOODS_WHOLESALE_KEY.getTimeout());
+		}
+		List<Long> userIdList = userBindRelationService.getRelationUserIdList(userId, null);
+		list.forEach(data->{
+			data.setTotal(orderDonMapper.getUserWholesaleNumByUserIds(userIdList));
+		});
+		return GatewayResponse.SUCCESS.newBuilder().toResult(list);
+	}
+
+	@GetMapping("/get/deposit/detail")
+	public Result<String> getUserDepositDetail() {
+		long userId = StpUserUtil.getLoginIdAsLong();
+		List<Long> userIdList = userBindRelationService.getRelationUserIdList(userId, null);
+		GoodsWholesaleUserDeposit goodsWholesaleUserDeposit = goodsWholesaleUserDepositMapper.selectOne(Wrappers.lambdaQuery(GoodsWholesaleUserDeposit.class)
+				.in(GoodsWholesaleUserDeposit::getUserId, userIdList)
+				.last("limit 1"));
+		if (goodsWholesaleUserDeposit == null) {
+			return GatewayResponse.SUCCESS.newBuilder().toResult(GoodsWholesaleUserDeposit.Status.noPayment.name());
+		}
+		return GatewayResponse.SUCCESS.newBuilder().toResult(goodsWholesaleUserDeposit.getStatus().name());
+	}
+
+	/**
+	 * 支付押金
+	 */
+
+	/**
+	 * 下单批发
+	 */
+	@PostMapping("/post/submit")
+	public Result<GoodsWholesaleOrderDon> submit(@RequestBody @Validated GoodsWholesaleOrderPayReq payReq) {
+		long userId = StpUserUtil.getLoginIdAsLong();
+		payReq.setUserId(userId);
+		GoodsWholesaleOrderDon orderDon = goodsWholesalePayService.unifiedPay(payReq);
+		return GatewayResponse.SUCCESS.newBuilder().toResult(orderDon);
+	}
+
+}