From f57023830fa22fb72c9e7487f713045a38a0e24e Mon Sep 17 00:00:00 2001 From: Yen Date: Mon, 5 Jun 2023 15:57:03 +0800 Subject: [PATCH] =?UTF-8?q?ROI=E8=B4=B9=E7=8E=87=E5=BA=95=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serve/common/model/dto/DateSplitDTO.java | 29 ++++ .../qs/serve/common/util/DateSplitUtil.java | 67 +++++++++ .../com/qs/serve/common/util/DateUtils.java | 22 ++- .../bir/controller/BirRoiRateController.java | 51 +++++++ .../modules/bir/entity/BirBaseActivity.java | 136 ++++++++++++++++++ .../serve/modules/bir/entity/BirRoiRate.java | 134 +++++++++++++++++ .../bir/mapper/BirBaseActivityMapper.java | 14 ++ .../modules/bir/mapper/BirRoiRateMapper.java | 14 ++ .../bir/service/BirBaseActivityService.java | 20 +++ .../bir/service/BirRoiRateService.java | 15 ++ .../impl/BirBaseActivityServiceImpl.java | 124 ++++++++++++++++ .../service/impl/BirRoiRateServiceImpl.java | 36 +++++ .../serve/modules/tbs/entity/TbsActivity.java | 9 ++ .../modules/tbs/entity/bo/TbsActivityBo.java | 10 ++ .../service/impl/TbsActivityServiceImpl.java | 3 + .../service/VtbVerificationApplication.java | 1 + 16 files changed, 681 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/qs/serve/common/model/dto/DateSplitDTO.java create mode 100644 src/main/java/com/qs/serve/common/util/DateSplitUtil.java create mode 100644 src/main/java/com/qs/serve/modules/bir/controller/BirRoiRateController.java create mode 100644 src/main/java/com/qs/serve/modules/bir/entity/BirBaseActivity.java create mode 100644 src/main/java/com/qs/serve/modules/bir/entity/BirRoiRate.java create mode 100644 src/main/java/com/qs/serve/modules/bir/mapper/BirBaseActivityMapper.java create mode 100644 src/main/java/com/qs/serve/modules/bir/mapper/BirRoiRateMapper.java create mode 100644 src/main/java/com/qs/serve/modules/bir/service/BirBaseActivityService.java create mode 100644 src/main/java/com/qs/serve/modules/bir/service/BirRoiRateService.java create mode 100644 src/main/java/com/qs/serve/modules/bir/service/impl/BirBaseActivityServiceImpl.java create mode 100644 src/main/java/com/qs/serve/modules/bir/service/impl/BirRoiRateServiceImpl.java diff --git a/src/main/java/com/qs/serve/common/model/dto/DateSplitDTO.java b/src/main/java/com/qs/serve/common/model/dto/DateSplitDTO.java new file mode 100644 index 00000000..5f843930 --- /dev/null +++ b/src/main/java/com/qs/serve/common/model/dto/DateSplitDTO.java @@ -0,0 +1,29 @@ +package com.qs.serve.common.model.dto; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDate; +import java.util.Date; + +/** + * @author YenHex + * @since 2023/6/5 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class DateSplitDTO { + + Integer days; + + LocalDate startDate; + + LocalDate endDate; + + Integer yearMonth; + + Integer sort; + +} diff --git a/src/main/java/com/qs/serve/common/util/DateSplitUtil.java b/src/main/java/com/qs/serve/common/util/DateSplitUtil.java new file mode 100644 index 00000000..dcb76b98 --- /dev/null +++ b/src/main/java/com/qs/serve/common/util/DateSplitUtil.java @@ -0,0 +1,67 @@ +package com.qs.serve.common.util; + +import com.qs.serve.common.model.dto.DateSplitDTO; +import lombok.experimental.UtilityClass; + +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Date; +import java.util.List; + +/** + * 分割时间DTO工具类 + * @author YenHex + * @since 2023/6/5 + */ +@UtilityClass +public class DateSplitUtil { + + public static List getSplitDto(LocalDate sDate, LocalDate eDate){ + int diffYear = eDate.getYear() - sDate.getYear(); + int diffMonthOfYear = eDate.getMonthValue() - sDate.getMonthValue(); + int diffMonth = diffYear * 12 + diffMonthOfYear; + //最后一个月的年月数 + int lastYearMonth = eDate.getYear()*100 + eDate.getMonthValue(); + int firstYearMonth = sDate.getYear()*100 + sDate.getMonthValue(); + if(diffMonth<1){ + //同一个月 + int days = eDate.getDayOfMonth() - sDate.getDayOfMonth() + 1; + DateSplitDTO splitDTO = new DateSplitDTO(days,sDate,eDate,lastYearMonth,1); + return Arrays.asList(splitDTO); + }else { + List dateSplitDTOS = new ArrayList<>(); + for (int i = 0; i < diffMonth+2; i++) { + int sort = i+1; + LocalDate newStartDate = sDate.plusMonths(i); + int currYearMonth = newStartDate.getYear()*100 + newStartDate.getMonthValue(); + //第一个月 + if(firstYearMonth==currYearMonth){ + int days = sDate.lengthOfMonth() - sDate.getDayOfMonth() + 1; + //当月最后一天 + LocalDate endLocalDate = LocalDate.of(sDate.getYear(),sDate.getMonth(),sDate.lengthOfMonth()); + DateSplitDTO splitDTO = new DateSplitDTO(days,sDate,endLocalDate,currYearMonth,sort); + dateSplitDTOS.add(splitDTO); + }else if(currYearMonth==lastYearMonth){ + int days = eDate.getDayOfMonth(); + //当月第一天 + LocalDate startDate = newStartDate.withDayOfMonth(1); + DateSplitDTO splitDTO = new DateSplitDTO(days,startDate,eDate,currYearMonth,sort); + dateSplitDTOS.add(splitDTO); + break; + }else { + int days = newStartDate.lengthOfMonth(); + //当月第一天 + LocalDate startDate = newStartDate.withDayOfMonth(1); + //当月最后一天 + LocalDate endLocalDate = LocalDate.of(newStartDate.getYear(),newStartDate.getMonth(),newStartDate.lengthOfMonth()); + DateSplitDTO splitDTO = new DateSplitDTO(days,startDate,endLocalDate,currYearMonth,sort); + dateSplitDTOS.add(splitDTO); + } + } + return dateSplitDTOS; + } + + } + +} diff --git a/src/main/java/com/qs/serve/common/util/DateUtils.java b/src/main/java/com/qs/serve/common/util/DateUtils.java index 1d42791a..cbb0f05e 100644 --- a/src/main/java/com/qs/serve/common/util/DateUtils.java +++ b/src/main/java/com/qs/serve/common/util/DateUtils.java @@ -5,10 +5,7 @@ import lombok.experimental.UtilityClass; import java.text.ParseException; import java.text.SimpleDateFormat; -import java.time.Instant; -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.ZoneId; +import java.time.*; import java.time.format.DateTimeFormatter; import java.time.temporal.ChronoUnit; import java.util.Date; @@ -33,6 +30,23 @@ public class DateUtils { return LocalDateTime.now().format(formatter); } + + public static LocalDate toLocalDate(Date date){ +// Instant instant = date.toInstant(); +// ZoneId zoneId = ZoneId.systemDefault(); +// return instant.atZone(zoneId).toLocalDate(); + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); + String str = dateFormat.format(date); + String[] a = str.split("-"); + return LocalDate.of(Integer.parseInt(a[0]),Integer.parseInt(a[1]),Integer.parseInt(a[2])); + } + + public static Date toDate(LocalDate localDate){ + ZoneId zoneId = ZoneId.systemDefault(); + ZonedDateTime zdt = localDate.atStartOfDay(zoneId); + return Date.from(zdt.toInstant()); + } + /** * 获取设置后得时间 * @param time diff --git a/src/main/java/com/qs/serve/modules/bir/controller/BirRoiRateController.java b/src/main/java/com/qs/serve/modules/bir/controller/BirRoiRateController.java new file mode 100644 index 00000000..dcef13c7 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/bir/controller/BirRoiRateController.java @@ -0,0 +1,51 @@ +package com.qs.serve.modules.bir.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.qs.serve.common.model.annotation.SysLog; +import com.qs.serve.common.model.dto.PageVo; +import com.qs.serve.common.model.dto.R; +import com.qs.serve.common.model.enums.BizType; +import com.qs.serve.common.model.enums.SystemModule; +import com.qs.serve.common.util.PageUtil; +import com.qs.serve.common.util.CopierUtil; +import com.qs.serve.common.util.StringUtils; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import com.qs.serve.modules.bir.entity.BirRoiRate; +import com.qs.serve.modules.bir.service.BirRoiRateService; + +import javax.validation.Valid; +import java.util.List; + +/** + * BI报表 ROI费率 + * @author YenHex + * @since 2023-06-05 + */ +@Slf4j +@AllArgsConstructor +@RestController +@RequestMapping("bir/roiRate") +public class BirRoiRateController { + + private BirRoiRateService birRoiRateService; + + /** + * 翻页 + * @param param + * @return + */ + //@GetMapping("/page") + @PreAuthorize("hasRole('bir:roiRate:query')") + public R> getPage(BirRoiRate param){ + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(param); + PageUtil.startPage(); + List list = birRoiRateService.list(lqw); + return R.byPageHelperList(list); + } + +} + diff --git a/src/main/java/com/qs/serve/modules/bir/entity/BirBaseActivity.java b/src/main/java/com/qs/serve/modules/bir/entity/BirBaseActivity.java new file mode 100644 index 00000000..46668a9a --- /dev/null +++ b/src/main/java/com/qs/serve/modules/bir/entity/BirBaseActivity.java @@ -0,0 +1,136 @@ +package com.qs.serve.modules.bir.entity; + +import java.time.LocalDate; +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; +import org.hibernate.validator.constraints.Length; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.NotNull; +import javax.validation.constraints.NotBlank; + +/** + * ROI费率(活动档案) 实体类 + * @author YenHex + * @since 2023-06-05 + */ +@Data +@TableName("bir_base_activity") +public class BirBaseActivity implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 编号 */ + @TableId(type = IdType.AUTO) + private Long id; + + /** 键值(日期数) */ + @NotNull(message = "键值(日期数)不能为空") + private Integer keyNum; + + /** 活动id */ + @NotNull(message = "活动id不能为空") + private Long activityId; + + /** 活动金额(费用投入金额) */ + @NotNull(message = "活动金额(费用投入金额)不能为空") + private BigDecimal activityAmt; + + /** 活动金额(费用投入金额) */ + @NotNull(message = "活动总金额(费用投入金额)不能为空") + private BigDecimal activityTotalAmt; + + /** 核销金额 */ + @NotNull(message = "核销金额不能为空") + private BigDecimal verificationAmt; + + /** 客户id */ + @NotNull(message = "客户id不能为空") + private Long supplierId; + + /** 客户编码 */ + @NotBlank(message = "客户编码不能为空") + @Length(max = 30,message = "客户编码长度不能超过30字") + private String supplierCode; + + /** 客户名称 */ + @NotBlank(message = "客户名称不能为空") + @Length(max = 200,message = "客户名称长度不能超过200字") + private String supplierName; + + /** 用户id */ + @NotBlank(message = "用户id不能为空") + @Length(max = 64,message = "用户id长度不能超过64字") + private String userId; + + /** 用户编码 */ + @NotBlank(message = "用户编码不能为空") + @Length(max = 255,message = "用户编码长度不能超过255字") + private String userCode; + + /** 用户名 */ + @NotBlank(message = "用户名不能为空") + @Length(max = 255,message = "用户名长度不能超过255字") + private String userName; + + /** 当月有多少天 */ + private Integer monthDays; + + /** 活动总天数 */ + @Length(max = 255,message = "活动总天数长度不能超过255字") + private Integer totalDays; + + /** 创建时间 */ + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; + + /** 最后更新时间 */ + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") + @TableField(fill = FieldFill.UPDATE) + private LocalDateTime updateTime; + + /** 所属租户 */ + @JsonIgnore + @JsonProperty + private String tenantId; + + /** 逻辑删除标记(0:显示;1:隐藏) */ + @JsonIgnore + @JsonProperty + private String delFlag; + + + public static BirBaseActivity toNewObject(BirBaseActivity source){ + BirBaseActivity baseActivity = new BirBaseActivity(); + baseActivity.setId(source.getId()); + baseActivity.setKeyNum(source.getKeyNum()); + baseActivity.setActivityId(source.getActivityId()); + baseActivity.setActivityAmt(source.getActivityAmt()); + baseActivity.setVerificationAmt(source.getVerificationAmt()); + baseActivity.setSupplierId(source.getSupplierId()); + baseActivity.setSupplierCode(source.getSupplierCode()); + baseActivity.setSupplierName(source.getSupplierName()); + baseActivity.setUserId(source.getUserId()); + baseActivity.setUserCode(source.getUserCode()); + baseActivity.setUserName(source.getUserName()); + baseActivity.setMonthDays(source.getMonthDays()); + baseActivity.setTotalDays(source.getTotalDays()); + baseActivity.setCreateTime(source.getCreateTime()); + baseActivity.setUpdateTime(source.getUpdateTime()); + baseActivity.setTenantId(source.getTenantId()); + baseActivity.setDelFlag(source.getDelFlag()); + return baseActivity; + } + +} + diff --git a/src/main/java/com/qs/serve/modules/bir/entity/BirRoiRate.java b/src/main/java/com/qs/serve/modules/bir/entity/BirRoiRate.java new file mode 100644 index 00000000..e9f9faad --- /dev/null +++ b/src/main/java/com/qs/serve/modules/bir/entity/BirRoiRate.java @@ -0,0 +1,134 @@ +package com.qs.serve.modules.bir.entity; + +import java.time.LocalDate; +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; +import org.hibernate.validator.constraints.Length; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.NotNull; +import javax.validation.constraints.NotBlank; + +/** + * ROI费率 实体类 + * @author YenHex + * @since 2023-06-05 + */ +@Data +@TableName("bir_roi_rate") +public class BirRoiRate implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 编号 */ + @TableId(type = IdType.AUTO) + private Long id; + + /** 键值(日期数) */ + @NotNull(message = "键值(日期数)不能为空") + private Integer keyNum; + + /** 活动金额(费用投入金额) */ + @NotNull(message = "活动金额(费用投入金额)不能为空") + private BigDecimal activityAmt; + + /** 核销金额 */ + @NotNull(message = "核销金额不能为空") + private BigDecimal verificationAmt; + + /** 活动状态 */ + private Integer activityState; + + /** 发货量类型:0->预估;1->实际 */ + private Integer shipmentType; + + /** 发货量 */ + private Long shipmentQty; + + /** 发货金额 */ + private BigDecimal shipmentAmt; + + /** 客户id */ + @NotNull(message = "客户id不能为空") + private Long supplierId; + + /** 客户编码 */ + @NotBlank(message = "客户编码不能为空") + @Length(max = 30,message = "客户编码长度不能超过30字") + private String supplierCode; + + /** 客户名称 */ + @NotBlank(message = "客户名称不能为空") + @Length(max = 200,message = "客户名称长度不能超过200字") + private String supplierName; + + /** 用户id */ + @NotBlank(message = "用户id不能为空") + @Length(max = 64,message = "用户id长度不能超过64字") + private String userId; + + /** 用户编码 */ + @NotBlank(message = "用户编码不能为空") + @Length(max = 255,message = "用户编码长度不能超过255字") + private String userCode; + + /** 用户名 */ + @NotBlank(message = "用户名不能为空") + @Length(max = 255,message = "用户名长度不能超过255字") + private String userName; + + /** 创建时间 */ + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; + + /** 最后更新时间 */ + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") + @TableField(fill = FieldFill.UPDATE) + private LocalDateTime updateTime; + + /** 所属租户 */ + @JsonIgnore + @JsonProperty + private String tenantId; + + /** 逻辑删除标记(0:显示;1:隐藏) */ + @JsonIgnore + @JsonProperty + private String delFlag; + + + public static BirRoiRate toNewObject(BirRoiRate source){ + BirRoiRate roiRate = new BirRoiRate(); + roiRate.setId(source.getId()); + roiRate.setKeyNum(source.getKeyNum()); + roiRate.setActivityAmt(source.getActivityAmt()); + roiRate.setVerificationAmt(source.getVerificationAmt()); + roiRate.setActivityState(source.getActivityState()); + roiRate.setShipmentType(source.getShipmentType()); + roiRate.setShipmentQty(source.getShipmentQty()); + roiRate.setShipmentAmt(source.getShipmentAmt()); + roiRate.setSupplierId(source.getSupplierId()); + roiRate.setSupplierCode(source.getSupplierCode()); + roiRate.setSupplierName(source.getSupplierName()); + roiRate.setUserId(source.getUserId()); + roiRate.setUserCode(source.getUserCode()); + roiRate.setUserName(source.getUserName()); + roiRate.setCreateTime(source.getCreateTime()); + roiRate.setUpdateTime(source.getUpdateTime()); + roiRate.setTenantId(source.getTenantId()); + roiRate.setDelFlag(source.getDelFlag()); + return roiRate; + } + +} + diff --git a/src/main/java/com/qs/serve/modules/bir/mapper/BirBaseActivityMapper.java b/src/main/java/com/qs/serve/modules/bir/mapper/BirBaseActivityMapper.java new file mode 100644 index 00000000..f06d7a99 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/bir/mapper/BirBaseActivityMapper.java @@ -0,0 +1,14 @@ +package com.qs.serve.modules.bir.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.qs.serve.modules.bir.entity.BirBaseActivity; + +/** + * ROI费率(活动档案) Mapper + * @author YenHex + * @date 2023-06-05 + */ +public interface BirBaseActivityMapper extends BaseMapper { + +} + diff --git a/src/main/java/com/qs/serve/modules/bir/mapper/BirRoiRateMapper.java b/src/main/java/com/qs/serve/modules/bir/mapper/BirRoiRateMapper.java new file mode 100644 index 00000000..1e434b99 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/bir/mapper/BirRoiRateMapper.java @@ -0,0 +1,14 @@ +package com.qs.serve.modules.bir.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.qs.serve.modules.bir.entity.BirRoiRate; + +/** + * Mapper + * @author YenHex + * @date 2023-06-05 + */ +public interface BirRoiRateMapper extends BaseMapper { + +} + diff --git a/src/main/java/com/qs/serve/modules/bir/service/BirBaseActivityService.java b/src/main/java/com/qs/serve/modules/bir/service/BirBaseActivityService.java new file mode 100644 index 00000000..baa2c149 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/bir/service/BirBaseActivityService.java @@ -0,0 +1,20 @@ +package com.qs.serve.modules.bir.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.qs.serve.modules.bir.entity.BirBaseActivity; + +/** + * ROI费率(活动档案) 服务接口 + * @author YenHex + * @date 2023-06-05 + */ +public interface BirBaseActivityService extends IService { + + /** + * 创建 + * @param year + * @param month + */ + void buildReport(int year, int month); +} + diff --git a/src/main/java/com/qs/serve/modules/bir/service/BirRoiRateService.java b/src/main/java/com/qs/serve/modules/bir/service/BirRoiRateService.java new file mode 100644 index 00000000..ae5f5542 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/bir/service/BirRoiRateService.java @@ -0,0 +1,15 @@ +package com.qs.serve.modules.bir.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.qs.serve.modules.bir.entity.BirRoiRate; + +/** + * 服务接口 + * @author YenHex + * @date 2023-06-05 + */ +public interface BirRoiRateService extends IService { + + +} + diff --git a/src/main/java/com/qs/serve/modules/bir/service/impl/BirBaseActivityServiceImpl.java b/src/main/java/com/qs/serve/modules/bir/service/impl/BirBaseActivityServiceImpl.java new file mode 100644 index 00000000..81f887c6 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/bir/service/impl/BirBaseActivityServiceImpl.java @@ -0,0 +1,124 @@ +package com.qs.serve.modules.bir.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.qs.serve.common.model.dto.DateSplitDTO; +import com.qs.serve.common.util.Assert; +import com.qs.serve.common.util.DateSplitUtil; +import com.qs.serve.modules.sys.mapper.SysUserMapper; +import com.qs.serve.modules.tbs.entity.TbsActivity; +import com.qs.serve.modules.tbs.mapper.TbsActivityMapper; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import com.qs.serve.modules.bir.entity.BirBaseActivity; +import com.qs.serve.modules.bir.service.BirBaseActivityService; +import com.qs.serve.modules.bir.mapper.BirBaseActivityMapper; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.time.LocalDate; +import java.time.Period; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +/** + * ROI费率(活动档案) 服务实现类 + * @author YenHex + * @since 2023-06-05 + */ +@Slf4j +@Service +@AllArgsConstructor +public class BirBaseActivityServiceImpl extends ServiceImpl implements BirBaseActivityService { + + + private final TbsActivityMapper activityMapper; + private final SysUserMapper userMapper; + + @Override + public void buildReport(int year, int month) { + int yearMonth = Integer.parseInt(year+""+month); + LocalDate startDate = LocalDate.of(year,month,1); + int lastDayNum2 = startDate.lengthOfMonth(); + LocalDate endDate = LocalDate.of(year,month,lastDayNum2); + LambdaQueryWrapper activityLqw = new LambdaQueryWrapper<>(); + //todo dev activityLqw.eq(TbsActivity::getCostPassFlag,1); + activityLqw.and(qw->{ + qw.between(TbsActivity::getActStartDate,startDate,endDate) + .or().between(TbsActivity::getActEndDate,startDate,endDate); + }); + + List activityList = activityMapper.selectList(activityLqw); + List birBaseActivities = new ArrayList<>(); + for (TbsActivity activity : activityList) { + LocalDate actStartDate = activity.getActStartDate(); + LocalDate actEndDate = activity.getActEndDate(); + Period period = Period.between(startDate, endDate); + int currentActDays = period.getDays()+1; + BigDecimal amount = activity.getTotalAmount(); + List dateSplitList = DateSplitUtil.getSplitDto(actStartDate,actEndDate); + //活动金额 + BigDecimal currentAmount = null; + //核销金额 + BigDecimal currentCheckAmount = null; + Integer currItemDays = null; + if(dateSplitList.size()>1){ + //当前年月 + DateSplitDTO currDateSplit = dateSplitList.stream() + .filter(a->a.getYearMonth().equals(yearMonth)) + .collect(Collectors.toList()).get(0); + currItemDays = currDateSplit.getDays(); + if(currDateSplit.getSort().equals(dateSplitList.size())){ + //活动金额 + currentAmount = activity.getTotalAmount(); + //核销金额 + currentCheckAmount = activity.getUsedAmount(); + for (DateSplitDTO splitDTO : dateSplitList) { + //跳过当前年月 + if(splitDTO.getYearMonth().equals(yearMonth)){ + continue; + } + //日期占比 + BigDecimal dayRate = new BigDecimal(splitDTO.getDays()+"") + .multiply(new BigDecimal(currentActDays+"")) + .divide(new BigDecimal("100"), RoundingMode.HALF_DOWN); + currentAmount = currentAmount.subtract(amount.multiply(dayRate)); + currentCheckAmount = currentCheckAmount.subtract(activity.getUsedAmount().multiply(dayRate)); + } + }else { + //日期占比 + BigDecimal dayRate = new BigDecimal(currDateSplit.getDays()+"") + .multiply(new BigDecimal(currentActDays+"")) + .divide(new BigDecimal("100"), RoundingMode.HALF_DOWN); + currentAmount = amount.multiply(dayRate); + currentCheckAmount = activity.getUsedAmount().multiply(dayRate); + } + }else if (dateSplitList.size()==1){ + DateSplitDTO dateSplit = dateSplitList.get(0); + currentAmount = amount; + currentCheckAmount = activity.getUsedAmount(); + currItemDays = dateSplit.getDays(); + }else { + Assert.throwEx("dateSplitList is empty"); + } + BirBaseActivity baseActivity = new BirBaseActivity(); + baseActivity.setKeyNum(yearMonth); + baseActivity.setActivityId(activity.getId()); + baseActivity.setActivityAmt(currentAmount); + baseActivity.setActivityTotalAmt(activity.getTotalAmount()); + baseActivity.setVerificationAmt(currentCheckAmount); + baseActivity.setSupplierId(activity.getSupplierId()); + baseActivity.setSupplierCode(activity.getSupplierCode()); + baseActivity.setSupplierName(activity.getSupplierName()); + baseActivity.setUserId(activity.getCreateBy()); + baseActivity.setMonthDays(currItemDays); + baseActivity.setTotalDays(currentActDays); + birBaseActivities.add(baseActivity); + } + this.saveBatch(birBaseActivities); + } + +} + diff --git a/src/main/java/com/qs/serve/modules/bir/service/impl/BirRoiRateServiceImpl.java b/src/main/java/com/qs/serve/modules/bir/service/impl/BirRoiRateServiceImpl.java new file mode 100644 index 00000000..6f17168b --- /dev/null +++ b/src/main/java/com/qs/serve/modules/bir/service/impl/BirRoiRateServiceImpl.java @@ -0,0 +1,36 @@ +package com.qs.serve.modules.bir.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.qs.serve.common.model.dto.DateSplitDTO; +import com.qs.serve.common.util.Assert; +import com.qs.serve.common.util.DateSplitUtil; +import com.qs.serve.modules.sys.entity.SysUser; +import com.qs.serve.modules.sys.mapper.SysUserMapper; +import com.qs.serve.modules.tbs.entity.TbsActivity; +import com.qs.serve.modules.tbs.mapper.TbsActivityMapper; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import com.qs.serve.modules.bir.entity.BirRoiRate; +import com.qs.serve.modules.bir.service.BirRoiRateService; +import com.qs.serve.modules.bir.mapper.BirRoiRateMapper; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.time.LocalDate; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 服务实现类 + * @author YenHex + * @since 2023-06-05 + */ +@Slf4j +@Service +@AllArgsConstructor +public class BirRoiRateServiceImpl extends ServiceImpl implements BirRoiRateService { + +} + diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivity.java b/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivity.java index 807ad50d..58066df1 100644 --- a/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivity.java +++ b/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivity.java @@ -138,6 +138,15 @@ public class TbsActivity implements Serializable { @TableField(fill = FieldFill.UPDATE) private LocalDateTime finishedTime; + /** 预计活动销量 */ + private Long preActQuantity; + + /** 预计不做活动销量 */ + private Long preNotActQuantity; + + /** 预估roi费率(人工输入) */ + private BigDecimal preRoiRate; + /** 合计金额 */ private BigDecimal totalAmount; diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsActivityBo.java b/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsActivityBo.java index 26506d73..a1945e6d 100644 --- a/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsActivityBo.java +++ b/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsActivityBo.java @@ -1,5 +1,6 @@ package com.qs.serve.modules.tbs.entity.bo; +import java.math.BigDecimal; import java.time.LocalDate; import java.io.Serializable; @@ -61,6 +62,15 @@ public class TbsActivityBo implements Serializable { @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8") private LocalDate preCheckDate; + /** 预计活动销量 */ + private Long preActQuantity; + + /** 预计不做活动销量 */ + private Long preNotActQuantity; + + /** 预估roi费率(人工输入) */ + private BigDecimal preRoiRate; + /** 备注 */ @Length(max = 255,message = "备注长度不能超过255字") private String remark; diff --git a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsActivityServiceImpl.java b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsActivityServiceImpl.java index a4e71ba8..53e8e7b7 100644 --- a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsActivityServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsActivityServiceImpl.java @@ -131,6 +131,9 @@ public class TbsActivityServiceImpl extends ServiceImpl=0){ activity4Upd.setActivityState(TbsActivityState.STATE_1_Finished); }else {