16 changed files with 681 additions and 4 deletions
@ -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; |
||||
|
|
||||
|
} |
@ -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<DateSplitDTO> 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<DateSplitDTO> 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; |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
} |
@ -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<PageVo<BirRoiRate>> getPage(BirRoiRate param){ |
||||
|
LambdaQueryWrapper<BirRoiRate> lqw = new LambdaQueryWrapper<>(param); |
||||
|
PageUtil.startPage(); |
||||
|
List<BirRoiRate> list = birRoiRateService.list(lqw); |
||||
|
return R.byPageHelperList(list); |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
@ -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; |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
@ -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; |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
@ -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<BirBaseActivity> { |
||||
|
|
||||
|
} |
||||
|
|
@ -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<BirRoiRate> { |
||||
|
|
||||
|
} |
||||
|
|
@ -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<BirBaseActivity> { |
||||
|
|
||||
|
/** |
||||
|
* 创建 |
||||
|
* @param year |
||||
|
* @param month |
||||
|
*/ |
||||
|
void buildReport(int year, int month); |
||||
|
} |
||||
|
|
@ -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<BirRoiRate> { |
||||
|
|
||||
|
|
||||
|
} |
||||
|
|
@ -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<BirBaseActivityMapper,BirBaseActivity> 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<TbsActivity> 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<TbsActivity> activityList = activityMapper.selectList(activityLqw); |
||||
|
List<BirBaseActivity> 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<DateSplitDTO> 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); |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
@ -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<BirRoiRateMapper,BirRoiRate> implements BirRoiRateService { |
||||
|
|
||||
|
} |
||||
|
|
Loading…
Reference in new issue