Browse Source

广告管理新增和修改时添加校验

zhaishaofeng 2 years ago
parent
commit
cda0d7a0e5

+ 43 - 0
imcs-bt-be/imcs-business-controller/src/main/java/com/github/zuihou/business/controller/advertisement/AdvertisementController.java

@@ -5,11 +5,16 @@ import com.github.zuihou.business.advertisement.dto.AdvertisementSaveDTO;
 import com.github.zuihou.business.advertisement.dto.AdvertisementUpdateDTO;
 import com.github.zuihou.business.advertisement.dto.AdvertisementPageDTO;
 import com.github.zuihou.business.advertisement.service.AdvertisementService;
+
+import java.time.LocalDateTime;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
 import com.github.zuihou.base.controller.SuperController;
 import com.github.zuihou.base.R;
+import com.github.zuihou.database.mybatis.conditions.Wraps;
+import com.github.zuihou.database.mybatis.conditions.query.LbqWrapper;
+import com.github.zuihou.exception.BizException;
 import io.swagger.annotations.Api;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.validation.annotation.Validated;
@@ -50,4 +55,42 @@ public class AdvertisementController extends SuperController<AdvertisementServic
 
         return R.success(baseService.saveBatch(advertisementList));
     }
+
+    @Override
+    public R<Advertisement> handlerSave(AdvertisementSaveDTO model) {
+        validateTime(model.getDeliveryStartTime(), model.getDeliveryEndTime(), model.getDeliveryEquipmentId());
+        return super.handlerSave(model);
+    }
+
+    @Override
+    public R<Advertisement> handlerUpdate(AdvertisementUpdateDTO model) {
+        validateTime(model.getDeliveryStartTime(), model.getDeliveryEndTime(), model.getDeliveryEquipmentId());
+        return super.handlerUpdate(model);
+    }
+
+    /**
+     * 校验广告时间相关业务
+     *
+     * @param deliveryStartTime 投放设备开始时间
+     * @param deliveryEndTime 投放设备结束时间
+     * @param equId 投放设备ID
+     */
+    private void validateTime(LocalDateTime deliveryStartTime, LocalDateTime deliveryEndTime, Long equId) {
+        if (deliveryStartTime == null || deliveryEndTime == null) {
+            return;
+        }
+        // 1.投放结束时间必须大于投放开始时间
+        if (deliveryEndTime.isBefore(deliveryStartTime)) {
+            throw BizException.validFail("结束时间必须大于开始时间");
+        }
+
+        // 2.同一个设备开始时间和结束时间内只能有一条广告
+        LbqWrapper<Advertisement> countWrapper = Wraps.<Advertisement>lbQ()
+                .eq(Advertisement::getDeliveryEquipmentId, equId)
+                .eq(Advertisement::getAdStatus, "1")
+                .gt(Advertisement::getDeliveryEndTime, deliveryStartTime);
+        if (baseService.count(countWrapper) > 0) {
+            throw BizException.validFail("该时间段已有广告,不能新增");
+        }
+    }
 }