From 58b460e1227c5324e9b23fc3d173d12caeb123a8 Mon Sep 17 00:00:00 2001 From: Donghuang Date: Mon, 18 Oct 2021 23:38:03 +0800 Subject: [PATCH] add CampaignQuotaService --- .../controller/CampaignQuotaController.java | 23 +++++++ .../form/create/FormCreateCampaignQuota.java | 30 +++++++++ .../form/update/FormUpdateCampaignQuota.java | 27 ++++++++ .../yo/cms/service/CampaignQuotaService.java | 17 +++++ .../impl/CampaignQuotaServiceImpl.java | 65 +++++++++++++++++++ .../yo/mapper/CampaignQuotaMapper.java | 11 ++++ .../yo/mapper/CampaignQuotaMapper.xml | 12 ++++ .../yo/mapper/CampaignQuotaMapperTest.java | 25 +++++++ .../com/pudonghot/yo/model/DailyTime.java | 10 ++- .../yo/model/domain/CampaignQuota.java | 26 ++++++++ 10 files changed, 245 insertions(+), 1 deletion(-) create mode 100644 cms/src/main/java/com/pudonghot/yo/cms/controller/CampaignQuotaController.java create mode 100644 cms/src/main/java/com/pudonghot/yo/cms/form/create/FormCreateCampaignQuota.java create mode 100644 cms/src/main/java/com/pudonghot/yo/cms/form/update/FormUpdateCampaignQuota.java create mode 100644 cms/src/main/java/com/pudonghot/yo/cms/service/CampaignQuotaService.java create mode 100644 cms/src/main/java/com/pudonghot/yo/cms/service/impl/CampaignQuotaServiceImpl.java create mode 100644 lib/mapper/src/main/java/com/pudonghot/yo/mapper/CampaignQuotaMapper.java create mode 100644 lib/mapper/src/main/java/com/pudonghot/yo/mapper/CampaignQuotaMapper.xml create mode 100644 lib/mapper/src/test/java/com/pudonghot/yo/mapper/CampaignQuotaMapperTest.java create mode 100644 lib/model/src/main/java/com/pudonghot/yo/model/domain/CampaignQuota.java diff --git a/cms/src/main/java/com/pudonghot/yo/cms/controller/CampaignQuotaController.java b/cms/src/main/java/com/pudonghot/yo/cms/controller/CampaignQuotaController.java new file mode 100644 index 00000000..431f17ac --- /dev/null +++ b/cms/src/main/java/com/pudonghot/yo/cms/controller/CampaignQuotaController.java @@ -0,0 +1,23 @@ +package com.pudonghot.yo.cms.controller; + +import com.wacai.tigon.form.FormList; +import org.springframework.stereotype.Controller; +import com.pudonghot.yo.model.domain.CampaignQuota; +import com.wacai.tigon.web.controller.BaseCrudController; +import org.springframework.web.bind.annotation.RequestMapping; +import com.pudonghot.yo.cms.form.create.FormCreateCampaignQuota; +import com.pudonghot.yo.cms.form.update.FormUpdateCampaignQuota; + +/** + * @author Donghuang + * @date Oct 14, 2021 14:24:45 + */ +@Controller +@RequestMapping("/campaign-quota") +public class CampaignQuotaController + extends BaseCrudController { +} \ No newline at end of file diff --git a/cms/src/main/java/com/pudonghot/yo/cms/form/create/FormCreateCampaignQuota.java b/cms/src/main/java/com/pudonghot/yo/cms/form/create/FormCreateCampaignQuota.java new file mode 100644 index 00000000..a50d568f --- /dev/null +++ b/cms/src/main/java/com/pudonghot/yo/cms/form/create/FormCreateCampaignQuota.java @@ -0,0 +1,30 @@ +package com.pudonghot.yo.cms.form.create; + +import lombok.Getter; +import lombok.Setter; +import javax.validation.constraints.Min; +import com.pudonghot.yo.model.DailyTime; +import javax.validation.constraints.NotNull; +import com.pudonghot.yo.cms.form.BaseCreateForm; + +/** + * @author Donghuang + * @date Oct 14, 2021 14:24:45 + */ +@Getter +@Setter +public class FormCreateCampaignQuota extends BaseCreateForm { + private static final long serialVersionUID = 1L; + + @Min(1) + @NotNull + private Integer campaignId; + @NotNull + private DailyTime dailyFrom; + @NotNull + private DailyTime dailyTo; + + @Min(1) + @NotNull + private Integer quota; +} \ No newline at end of file diff --git a/cms/src/main/java/com/pudonghot/yo/cms/form/update/FormUpdateCampaignQuota.java b/cms/src/main/java/com/pudonghot/yo/cms/form/update/FormUpdateCampaignQuota.java new file mode 100644 index 00000000..93dba142 --- /dev/null +++ b/cms/src/main/java/com/pudonghot/yo/cms/form/update/FormUpdateCampaignQuota.java @@ -0,0 +1,27 @@ +package com.pudonghot.yo.cms.form.update; + +import lombok.Getter; +import lombok.Setter; +import com.pudonghot.yo.model.DailyTime; +import javax.validation.constraints.Min; +import javax.validation.constraints.NotNull; +import com.pudonghot.yo.cms.form.BaseUpdateForm; + +/** + * @author Donghuang + * @date Oct 14, 2021 14:24:45 + */ +@Getter +@Setter +public class FormUpdateCampaignQuota extends BaseUpdateForm { + private static final long serialVersionUID = 1L; + + @NotNull + private DailyTime dailyFrom; + @NotNull + private DailyTime dailyTo; + + @Min(1) + @NotNull + private Integer quota; +} \ No newline at end of file diff --git a/cms/src/main/java/com/pudonghot/yo/cms/service/CampaignQuotaService.java b/cms/src/main/java/com/pudonghot/yo/cms/service/CampaignQuotaService.java new file mode 100644 index 00000000..367613b7 --- /dev/null +++ b/cms/src/main/java/com/pudonghot/yo/cms/service/CampaignQuotaService.java @@ -0,0 +1,17 @@ +package com.pudonghot.yo.cms.service; + +import com.pudonghot.yo.model.domain.CampaignQuota; +import com.wacai.tigon.service.BaseCrudByFormService; +import com.pudonghot.yo.cms.form.create.FormCreateCampaignQuota; +import com.pudonghot.yo.cms.form.update.FormUpdateCampaignQuota; + +/** + * @author Donghuang + * @date Oct 14, 2021 14:24:45 + */ +public interface CampaignQuotaService + extends BaseCrudByFormService { +} \ No newline at end of file diff --git a/cms/src/main/java/com/pudonghot/yo/cms/service/impl/CampaignQuotaServiceImpl.java b/cms/src/main/java/com/pudonghot/yo/cms/service/impl/CampaignQuotaServiceImpl.java new file mode 100644 index 00000000..27ba86aa --- /dev/null +++ b/cms/src/main/java/com/pudonghot/yo/cms/service/impl/CampaignQuotaServiceImpl.java @@ -0,0 +1,65 @@ +package com.pudonghot.yo.cms.service.impl; + +import lombok.val; +import org.springframework.util.Assert; +import me.chyxion.tigon.mybatis.Search; +import com.pudonghot.yo.model.DailyTime; +import org.springframework.stereotype.Service; +import com.pudonghot.yo.model.domain.CampaignQuota; +import com.pudonghot.yo.mapper.CampaignQuotaMapper; +import com.pudonghot.yo.cms.service.CampaignQuotaService; +import com.pudonghot.yo.cms.form.create.FormCreateCampaignQuota; +import com.pudonghot.yo.cms.form.update.FormUpdateCampaignQuota; +import com.wacai.tigon.service.support.BaseCrudByFormServiceSupport; + +/** + * @author Donghuang + * @date Oct 14, 2021 14:24:45 + */ +@Service +public class CampaignQuotaServiceImpl + extends BaseCrudByFormServiceSupport + implements CampaignQuotaService { + + /** + * {@inheritDoc} + */ + @Override + protected void beforeCreate(final FormCreateCampaignQuota form, final CampaignQuota model) { + super.beforeCreate(form, model); + validateDailyTime(form.getCampaignId(), form.getDailyFrom(), form.getDailyTo()); + } + + /** + * {@inheritDoc} + */ + @Override + protected void beforeUpdate(final FormUpdateCampaignQuota form, final CampaignQuota model) { + super.beforeUpdate(form, model); + validateDailyTime(model.getCampaignId(), form.getDailyFrom(), form.getDailyTo()); + } + + void validateDailyTime(final Integer campaignId, final DailyTime dailyFrom, final DailyTime dailyTo) { + Assert.state(dailyFrom.getSecondOfDay() < dailyTo.getSecondOfDay(), + () -> "无效开始时间[" + dailyFrom + "]和结束时间[" + dailyTo + "],开始时间须小于结束时间"); + + mapper.scan(128, new Search(CampaignQuota.CAMPAIGN_ID, campaignId), item -> { + val itemDailyFrom = item.getDailyFrom(); + val itemDailyTo = item.getDailyTo(); + + val secondOfDay1 = dailyFrom.getSecondOfDay(); + Assert.state(!(secondOfDay1 > itemDailyFrom.getSecondOfDay() + && secondOfDay1 < itemDailyTo.getSecondOfDay()), + () -> "开始时间[" + dailyFrom + "]与区间[" + itemDailyFrom + ", " + itemDailyTo + "]重叠"); + + val secondOfDay2 = dailyTo.getSecondOfDay(); + Assert.state(!(secondOfDay2 > itemDailyFrom.getSecondOfDay() + && secondOfDay2 < itemDailyTo.getSecondOfDay()), + () -> "结束时间[" + dailyTo + "]与区间[" + itemDailyFrom + ", " + itemDailyTo + "]重叠"); + }); + } +} \ No newline at end of file diff --git a/lib/mapper/src/main/java/com/pudonghot/yo/mapper/CampaignQuotaMapper.java b/lib/mapper/src/main/java/com/pudonghot/yo/mapper/CampaignQuotaMapper.java new file mode 100644 index 00000000..4aab156a --- /dev/null +++ b/lib/mapper/src/main/java/com/pudonghot/yo/mapper/CampaignQuotaMapper.java @@ -0,0 +1,11 @@ +package com.pudonghot.yo.mapper; + +import me.chyxion.tigon.mybatis.BaseMapper; +import com.pudonghot.yo.model.domain.CampaignQuota; + +/** + * @author Donghuang + * @date Oct 14, 2021 14:24:45 + */ +public interface CampaignQuotaMapper extends BaseMapper { +} \ No newline at end of file diff --git a/lib/mapper/src/main/java/com/pudonghot/yo/mapper/CampaignQuotaMapper.xml b/lib/mapper/src/main/java/com/pudonghot/yo/mapper/CampaignQuotaMapper.xml new file mode 100644 index 00000000..64802eb1 --- /dev/null +++ b/lib/mapper/src/main/java/com/pudonghot/yo/mapper/CampaignQuotaMapper.xml @@ -0,0 +1,12 @@ + + + + + \ No newline at end of file diff --git a/lib/mapper/src/test/java/com/pudonghot/yo/mapper/CampaignQuotaMapperTest.java b/lib/mapper/src/test/java/com/pudonghot/yo/mapper/CampaignQuotaMapperTest.java new file mode 100644 index 00000000..b1245678 --- /dev/null +++ b/lib/mapper/src/test/java/com/pudonghot/yo/mapper/CampaignQuotaMapperTest.java @@ -0,0 +1,25 @@ +package com.pudonghot.yo.mapper; + +import org.junit.Test; +import org.junit.runner.RunWith; +import me.chyxion.tigon.mybatis.Search; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests; + +/** + * @author Donghuang + * @date Oct 14, 2021 14:24:45 + */ +@RunWith(SpringJUnit4ClassRunner.class) +@SpringBootTest(classes = TestDriver.class) +public class CampaignQuotaMapperTest extends AbstractTransactionalJUnit4SpringContextTests { + @Autowired + private CampaignQuotaMapper mapper; + + @Test + public void mapperTest() { + mapper.list(new Search().limit(8)); + } +} \ No newline at end of file diff --git a/lib/model/src/main/java/com/pudonghot/yo/model/DailyTime.java b/lib/model/src/main/java/com/pudonghot/yo/model/DailyTime.java index 79ab116c..7e64a51e 100644 --- a/lib/model/src/main/java/com/pudonghot/yo/model/DailyTime.java +++ b/lib/model/src/main/java/com/pudonghot/yo/model/DailyTime.java @@ -13,7 +13,7 @@ import com.fasterxml.jackson.annotation.JsonCreator; * @date Jul 19, 2020 11:18:45 */ @Getter -public class DailyTime implements Serializable { +public class DailyTime implements Comparable, Serializable { private static final long serialVersionUID = 1L; @JsonValue private final String text; @@ -61,4 +61,12 @@ public class DailyTime implements Serializable { public String toString() { return text; } + + /** + * {@inheritDoc} + */ + @Override + public int compareTo(final DailyTime o) { + return secondOfDay - o.secondOfDay; + } } diff --git a/lib/model/src/main/java/com/pudonghot/yo/model/domain/CampaignQuota.java b/lib/model/src/main/java/com/pudonghot/yo/model/domain/CampaignQuota.java new file mode 100644 index 00000000..4287744e --- /dev/null +++ b/lib/model/src/main/java/com/pudonghot/yo/model/domain/CampaignQuota.java @@ -0,0 +1,26 @@ +package com.pudonghot.yo.model.domain; + +import lombok.Getter; +import lombok.Setter; +import me.chyxion.tigon.mybatis.Table; +import com.pudonghot.yo.model.DailyTime; +import me.chyxion.tigon.mybatis.NotUpdate; +import lombok.experimental.FieldNameConstants; + +/** + * @author Donghuang + * @date Oct 14, 2021 14:24:45 + */ +@Getter +@Setter +@Table("br_campaign_quota") +@FieldNameConstants(prefix = "") +public class CampaignQuota extends BaseDomain { + private static final long serialVersionUID = 1L; + + @NotUpdate + private Integer campaignId; + private DailyTime dailyFrom; + private DailyTime dailyTo; + private Integer quota; +} \ No newline at end of file