Bläddra i källkod

设备活动满减

zoujiajian 2 år sedan
förälder
incheckning
8dfcb35371

+ 7 - 0
netflix-common/src/main/java/com/cyksj/common/constant/Constant.java

@@ -1,5 +1,6 @@
 package com.cyksj.common.constant;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 /*
@@ -257,4 +258,10 @@ public interface Constant {
 	 * 系统周末值班客服变更通知手机号
 	 */
 	String DUTY_SERVICE_CHANGE_NOTIFY_PHONE = "17681947535";
+
+	BigDecimal FIVE_HUNDRED = BigDecimal.valueOf(50000);
+
+	BigDecimal THOUSAND = BigDecimal.valueOf(100000);
+
+	BigDecimal TWO_THOUSAND = BigDecimal.valueOf(200000);
 }

+ 17 - 0
netflix-dao/src/main/java/com/cyksj/mapper/EquipmentActivityReduceMapper.java

@@ -0,0 +1,17 @@
+package com.cyksj.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.EquipmentActivityReduce;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.Date;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: EquipmentActivityReduceMapper
+ * 创建者: JavaZou
+ * 创建时间:2024/1/30 11:00
+ */
+public interface EquipmentActivityReduceMapper extends BaseMapper<EquipmentActivityReduce> {
+	Integer checkDupmentTimeDuration(@Param("id") Long id, @Param("st") Date st, @Param("et") Date et);
+}

+ 45 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/EquipmentActivityReduce.java

@@ -0,0 +1,45 @@
+package com.cyksj.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: EquipmentActivityReduce
+ * 创建者: JavaZou
+ * 创建时间:2024/1/30 10:57
+ */
+@Getter
+@Setter
+public class EquipmentActivityReduce extends BaseEntity{
+
+	/**
+	 * 满500满减多少
+	 */
+	private BigDecimal f;
+
+	/**
+	 * 满1000满减多少
+	 */
+	private BigDecimal q;
+
+	/**
+	 * 满2000满减多少
+	 */
+	private BigDecimal tq;
+
+	/**
+	 * 活动开始时间
+	 */
+	private Date st;
+
+	/**
+	 * 活动结束时间
+	 */
+	private Date et;
+
+	private Boolean deleted;
+}

+ 5 - 0
netflix-dao/src/main/java/com/cyksj/model/request/OrderPayRequest.java

@@ -150,4 +150,9 @@ public class OrderPayRequest {
     private String ip;
 
     private String location;
+
+    /**
+     * 是否设备满减活动优惠
+     */
+    private Boolean isAcReduce;
 }

+ 16 - 0
netflix-dao/src/main/resources/mapper/EquipmentActivityReduceMapper.xml

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.cyksj.mapper.EquipmentActivityReduceMapper">
+
+    <select id="checkDupmentTimeDuration" resultType="java.lang.Integer">
+        select count(*) from equipment_activity_reduce where
+        <if test="id != null">
+            id != #{id} and
+        </if>
+        deleted is true and ((st >= #{st} and st &lt; #{et} or et
+        >= #{st} and et &lt; #{et}) or (#{st} >= st and #{st} &lt; et or
+        #{et} >= st and #{et} &lt; et))
+        limit 1
+    </select>
+</mapper>

+ 15 - 0
netflix-service/src/main/java/com/cyksj/service/coupon/EquipmentActivityReduceService.java

@@ -0,0 +1,15 @@
+package com.cyksj.service.coupon;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.cyksj.model.entity.EquipmentActivityReduce;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: EquipmentActivityReduceService
+ * 创建者: JavaZou
+ * 创建时间:2024/1/30 11:04
+ */
+public interface EquipmentActivityReduceService extends IService<EquipmentActivityReduce> {
+
+	void saveOrUpdateEquipmentAcReduceConfig(EquipmentActivityReduce equipmentActivityReduce);
+}

+ 51 - 0
netflix-service/src/main/java/com/cyksj/service/coupon/impl/EquipmentActivityReduceServiceImpl.java

@@ -0,0 +1,51 @@
+package com.cyksj.service.coupon.impl;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.cyksj.common.exception.BusinessRuntimeException;
+import com.cyksj.mapper.EquipmentActivityReduceMapper;
+import com.cyksj.model.entity.EquipmentActivityReduce;
+import com.cyksj.service.coupon.EquipmentActivityReduceService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: EquipmentActivityReduceServiceImpl
+ * 创建者: JavaZou
+ * 创建时间:2024/1/30 11:05
+ */
+@Service
+@RequiredArgsConstructor
+public class EquipmentActivityReduceServiceImpl extends ServiceImpl<EquipmentActivityReduceMapper,EquipmentActivityReduce> implements EquipmentActivityReduceService {
+	private final EquipmentActivityReduceMapper equipmentActivityReduceMapper;
+
+	@Override
+	public void saveOrUpdateEquipmentAcReduceConfig(EquipmentActivityReduce equipmentActivityReduce) {
+		checkParams(equipmentActivityReduce);
+		this.saveOrUpdate(equipmentActivityReduce);
+	}
+
+	public void checkParams(EquipmentActivityReduce equipmentActivityReduce) {
+		BigDecimal f = equipmentActivityReduce.getF();
+		BigDecimal q = equipmentActivityReduce.getQ();
+		BigDecimal tq = equipmentActivityReduce.getTq();
+		Date st = equipmentActivityReduce.getSt();
+		Date et = equipmentActivityReduce.getEt();
+		if (ObjectUtil.hasEmpty(f, q, tq, st, et)) {
+			throw BusinessRuntimeException.getInstance("请补充必填项..");
+		}
+		BigDecimal zero = BigDecimal.ZERO;
+		if (f.compareTo(zero) < 0 || q.compareTo(zero) < 0 || tq.compareTo(zero) < 0) {
+			throw BusinessRuntimeException.getInstance("满减金额不可小于0");
+		}
+
+		Integer count = equipmentActivityReduceMapper.checkDupmentTimeDuration(equipmentActivityReduce.getId(), st, et);
+		if (count > 0) {
+			throw BusinessRuntimeException.getInstance("存在活动时间重叠的记录..");
+		}
+	}
+}

+ 39 - 3
netflix-service/src/main/java/com/cyksj/service/order/impl/OrderDonServiceImpl.java

@@ -259,6 +259,8 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 
 	private final UserDistributeSharedRelateUnbindMapper userDistributeSharedRelateUnbindMapper;
 
+	private final EquipmentActivityReduceMapper equipmentActivityReduceMapper;
+
 	private final List<String> noChekGoodsTemp = List.of("Apple One", "Youtube", "Spotify");
 
 	@Transactional(rollbackFor = Throwable.class)
@@ -431,7 +433,7 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 		}
 		if (sku != null) {
 			//扣除使用优惠券、余额的订单金额
-			deductOrderMoney(orderDon, couponUser, payRequest.getBalance(), user, sku.getPrice(), goodsDon.getType(), payRequest.getGcCash(), payRequest.getGcpIds());
+			deductOrderMoney(orderDon, couponUser, payRequest.getBalance(), user, sku.getPrice(), goodsDon.getType(), payRequest.getGcCash(), payRequest.getGcpIds(), payRequest.getIsAcReduce());
 		}
 
 		if (isSpecificPrice && (orderDon.getMoney().compareTo(BigDecimal.ZERO) == 0 || orderDon.getMoney().compareTo(specificPrice) != 0)) {
@@ -957,7 +959,7 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 		}
 		orderDon.setRealMoney(orderDon.getMoney());
 		//扣除使用优惠券、余额的订单金额
-		deductOrderMoney(orderDon, couponUser, payRequest.getBalance(), user, sku.getPrice(), goodsDon.getType(), payRequest.getGcCash(), payRequest.getGcpIds());
+		deductOrderMoney(orderDon, couponUser, payRequest.getBalance(), user, sku.getPrice(), goodsDon.getType(), payRequest.getGcCash(), payRequest.getGcpIds(), false);
 		this.saveOrUpdate(orderDon);
 		if (orderDon.getStatus() == OrderDon.Status.noPayment) {
 			jobManager.addJob(EXPIRY_TIME, () -> {
@@ -2035,7 +2037,7 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 	/**
 	 * 使用优惠营销 订单金额抵扣
 	 */
-	public void deductOrderMoney(OrderDon orderDon, CouponUser couponUser, BigDecimal balance, User user, BigDecimal skuMoney, Integer goodsType, BigDecimal gcCash, List<Long> gcpIds) {
+	public void deductOrderMoney(OrderDon orderDon, CouponUser couponUser, BigDecimal balance, User user, BigDecimal skuMoney, Integer goodsType, BigDecimal gcCash, List<Long> gcpIds, Boolean isAcReduce) {
 		if (gcCash != null && gcCash.compareTo(BigDecimal.ZERO) > 0 && couponUser != null) {
 			throw BusinessRuntimeException.getInstance("现金卡不能与其他优惠叠加使用");
 		}
@@ -2085,6 +2087,11 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 			}
 			return;
 		}
+		//针对设备 满减活动优惠 不支持使用优惠券等优惠
+		if (isAcReduce != null && isAcReduce && orderDon.getGoodsId() == 15) {
+			epOrderDonActivityReduce(orderDon);
+			return;
+		}
 		//存在优惠券
 		if (couponUser != null) {
 			Long couponId = couponUser.getCouponId();
@@ -2734,4 +2741,33 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 		orderRefundService.refundRecord(orderDon, orderRefundReq.getRefundMoney(), null, goodsDon, sku, outNo, orderDon.getType().getType());
 		return;
 	}
+
+	public void epOrderDonActivityReduce(OrderDon orderDon) {
+		if (orderDon.getMoney().compareTo(Constant.FIVE_HUNDRED) < 0) {
+			return;
+		}
+		DateTime now = DateTime.now();
+		EquipmentActivityReduce equipmentActivityReduce = equipmentActivityReduceMapper.selectOne(Wrappers.lambdaQuery(EquipmentActivityReduce.class)
+				.ge(EquipmentActivityReduce::getSt, now)
+				.lt(EquipmentActivityReduce::getEt, now)
+				.eq(EquipmentActivityReduce::getDeleted, true)
+				.last("limit 1"));
+		BigDecimal money = orderDon.getMoney();
+		BigDecimal acReduceMoney = BigDecimal.ZERO;
+		if (money.compareTo(Constant.FIVE_HUNDRED) >= 0 && money.compareTo(Constant.THOUSAND) < 0) {
+			//500-1000
+			acReduceMoney = equipmentActivityReduce.getF();
+			log.info("活动设备订单:{}达到500元资格,满减金额:{}", orderDon.getId(), acReduceMoney.divide(BigDecimal.valueOf(100)));
+		} else if (money.compareTo(Constant.THOUSAND) >= 0 && money.compareTo(Constant.TWO_THOUSAND) < 0) {
+			//1000-2000
+			acReduceMoney = equipmentActivityReduce.getQ();
+			log.info("活动设备订单:{}达到1000元资格,满减金额:{}", orderDon.getId(), acReduceMoney.divide(BigDecimal.valueOf(100)));
+		} else if (money.compareTo(Constant.TWO_THOUSAND) >= 0) {
+			//2000
+			acReduceMoney = equipmentActivityReduce.getTq();
+			log.info("活动设备订单:{}达到2000元资格,满减金额:{}", orderDon.getId(), acReduceMoney.divide(BigDecimal.valueOf(100)));
+		}
+		orderDon.setMoney(orderDon.getMoney().subtract(acReduceMoney));
+		orderDon.setCouponMoney(acReduceMoney);
+	}
 }

+ 15 - 0
netflix-web/src/main/java/com/cyksj/web/controller/goods/GoodsDonController.java

@@ -1031,4 +1031,19 @@ public class GoodsDonController {
 		});
 		return GatewayResponse.SUCCESS.newBuilder().toResult(list);
 	}
+
+	/**
+	 * 获取设备活动详情
+	 */
+	@GetMapping("/get/equipment/activity")
+	public Result<EquipmentActivityReduce> getEpActivity() {
+		DateTime now = DateTime.now();
+		EquipmentActivityReduce equipmentActivityReduce = beanSearcher.searchFirst(EquipmentActivityReduce.class, MapUtils.builder()
+				.field(EquipmentActivityReduce::getSt, now).op(Operator.LessEqual)
+				.field(EquipmentActivityReduce::getEt, now).op(Operator.GreaterThan)
+				.field(EquipmentActivityReduce::getDeleted, 1)
+				.onlySelect(EquipmentActivityReduce::getF, EquipmentActivityReduce::getQ, EquipmentActivityReduce::getTq)
+				.build());
+		return GatewayResponse.SUCCESS.newBuilder().toResult(equipmentActivityReduce);
+	}
 }

+ 51 - 0
netflix-web/src/main/java/com/cyksj/web/controller/manage/coupon/CouponController.java

@@ -23,6 +23,7 @@ import com.cyksj.model.request.CouponDistributeReq;
 import com.cyksj.model.request.corp.CorpXmlMessage;
 import com.cyksj.model.views.*;
 import com.cyksj.service.corp.msg.CorpEventActionService;
+import com.cyksj.service.coupon.EquipmentActivityReduceService;
 import com.cyksj.service.mange.coupon.CouponCommonService;
 import com.ejlchina.searcher.BeanSearcher;
 import com.ejlchina.searcher.SearchResult;
@@ -38,6 +39,7 @@ import org.springframework.web.bind.annotation.*;
 import javax.servlet.http.HttpServletRequest;
 import javax.validation.constraints.Min;
 import java.util.List;
+import java.util.Optional;
 import java.util.stream.Collectors;
 
 /*
@@ -79,6 +81,8 @@ public class CouponController {
 
 	private final HttpServletRequest request;
 
+	private final EquipmentActivityReduceService equipmentActivityReduceService;
+
 	/**
 	 * 新增优惠券
 	 */
@@ -460,4 +464,51 @@ public class CouponController {
 		}
 		return corpUser.getUnionid();
 	}
+
+
+	/**
+	 * 设置 设备活动满减配置
+	 */
+	@PostMapping("/set/equipment/activity/reduce")
+	public Result<String> setEquipmentAcReduceConfig(@RequestBody EquipmentActivityReduce equipmentActivityReduce) {
+		equipmentActivityReduceService.saveOrUpdateEquipmentAcReduceConfig(equipmentActivityReduce);
+		return GatewayResponse.SUCCESS.newBuilder().toResult();
+	}
+
+	/**
+	 * 编辑 设备活动满减配置
+	 */
+	@PutMapping("/put/equipment/activity/reduce")
+	public Result<String> updateEquipmentAcReduceConfig(@RequestBody EquipmentActivityReduce equipmentActivityReduce) {
+		if (equipmentActivityReduce.getId() == null) {
+			throw BusinessRuntimeException.getInstance("记录不存在..");
+		}
+		equipmentActivityReduceService.saveOrUpdateEquipmentAcReduceConfig(equipmentActivityReduce);
+		return GatewayResponse.SUCCESS.newBuilder().toResult();
+	}
+
+	/**
+	 * 设备活动满减列表
+	 */
+	@GetMapping("/get/equipment/activity/reduce")
+	public Result<SearchResult<EquipmentActivityReduce>> getEquipmentAcReduceConfig() {
+		SearchResult<EquipmentActivityReduce> search = beanSearcher.search(EquipmentActivityReduce.class, MapUtils.flatBuilder(request.getParameterMap())
+				.field(EquipmentActivityReduce::getDeleted, true)
+				.orderBy(EquipmentActivityReduce::getId).desc()
+				.build());
+		return GatewayResponse.SUCCESS.newBuilder().toResult(search);
+	}
+
+
+	/**
+	 * 删除设备满减活动
+	 */
+	@DeleteMapping("/del/equipment/activity/reduce/{id}")
+	public Result<String> getEquipmentAcReduceConfig(@PathVariable Long id) {
+		Optional.ofNullable(equipmentActivityReduceService.getById(id)).ifPresent(e -> {
+			e.setDeleted(false);
+			equipmentActivityReduceService.updateById(e);
+		});
+		return GatewayResponse.SUCCESS.newBuilder().toResult();
+	}
 }