diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxOfflineActivitySettlementController.java b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxOfflineActivitySettlementController.java new file mode 100644 index 000000000..47d47dda5 --- /dev/null +++ b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxOfflineActivitySettlementController.java @@ -0,0 +1,120 @@ +package com.iformall.controller.market; + +import com.github.pagehelper.PageInfo; +import com.iformall.common.Result; +import com.iformall.common.ResultData; +import com.iformall.controller.base.BaseController; +import com.iformall.domain.po.WxOfflineActivity; +import com.iformall.domain.po.WxOfflineActivityGrantAward; +import com.iformall.domain.po.WxOfflineActivityGrantSettlement; +import com.iformall.domain.po.WxOfflineActivityRecord; +import com.iformall.domain.po.base.BaseEntity.SortField; +import com.iformall.domain.po.base.TenantEntity; +import com.iformall.domain.vo.OfflineActivitySettlement; +import com.iformall.service.WxOfflineActivityGrantAwardService; +import com.iformall.service.WxOfflineActivityGrantSettlementService; +import com.iformall.service.WxOfflineActivityRecordService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import jodd.util.StringUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; + +/** + * @author alascor + * + */ +@RestController +@RequestMapping("/offlineSettlement") +@Api(description = "线下活动结算相关接口") +public class WxOfflineActivitySettlementController extends BaseController { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private WxOfflineActivityGrantAwardService wxOfflineActivityGrantAwardService; + + @Autowired + private WxOfflineActivityGrantSettlementService wxOfflineActivityGrantSettlementService; + + @Autowired + private WxOfflineActivityRecordService wxOfflineActivityRecordService; + + @ApiOperation("中奖会员相关统计") + @GetMapping("cusStatistics") + public ResultData cusStatistics() { + Map statisticsMap = wxOfflineActivityGrantAwardService.cusStatistics(getTenantInfo()); + return new ResultData(statisticsMap); + } + + @ApiOperation("发奖结算相关统计") + @GetMapping("settlementStatistics") + public ResultData settlementStatistics() { + Map statisticsMap = wxOfflineActivityGrantSettlementService.settlementStatistics(getTenantInfo()); + return new ResultData(statisticsMap); + } + + @ApiOperation("订单相关统计") + @GetMapping("recordStatistics") + public ResultData recordStatistics() { + Map statisticsMap = wxOfflineActivityRecordService.orderStatistics(getTenantInfo()); + return new ResultData(statisticsMap); + } + + @ApiOperation("活动结算分页列表接口") + @GetMapping("activityList") + @ApiImplicitParams({ + @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), + @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)}) + public ResultData activityList(@ModelAttribute WxOfflineActivity wxOfflineActivity, Integer pageNum, Integer pageSize) { + if (null == wxOfflineActivity) wxOfflineActivity = new WxOfflineActivity(); + TenantEntity tenantInfo = getTenantInfo(); + wxOfflineActivity.updateTenantInfo(tenantInfo); + wxOfflineActivity.setSortColumns(SortField.CreateDate_DESC); + final PageInfo page = wxOfflineActivityGrantSettlementService.activityListAsPage(wxOfflineActivity, pageNum, pageSize); + + return new ResultData(page); + } + + @ApiOperation("单个活动结算列表") + @GetMapping("activitySettlement") + @ApiImplicitParams({}) + public ResultData activitySettlement(@ModelAttribute WxOfflineActivityGrantSettlement grantSettlement) { + + if(grantSettlement.getActivityId() == null){ + return new ResultData(Result.ERROR,"请选择活动"); + } + + TenantEntity tenantInfo = getTenantInfo(); + grantSettlement.updateTenantInfo(tenantInfo); + List recordList = wxOfflineActivityGrantSettlementService.getActivitySettlement(grantSettlement); + + return new ResultData(recordList); + } + + @ApiOperation("单个活动单个门店结算列表") + @GetMapping("merchantSettlement") + @ApiImplicitParams({}) + public ResultData merchantSettlement(@ModelAttribute WxOfflineActivityGrantSettlement grantSettlement) { + + if(grantSettlement.getActivityId() == null){ + return new ResultData(Result.ERROR,"请选择活动"); + } + if(grantSettlement.getMerchantId() == null){ + return new ResultData(Result.ERROR,"请选择门店"); + } + + TenantEntity tenantInfo = getTenantInfo(); + grantSettlement.updateTenantInfo(tenantInfo); + List recordList = wxOfflineActivityGrantSettlementService.findList(grantSettlement); + + return new ResultData(recordList); + } + +} diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivity.java b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivity.java index d6353184f..7eac3b3ad 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivity.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivity.java @@ -85,4 +85,25 @@ public class WxOfflineActivity extends TenantEntity { @TableField(exist = false) private Integer validStatus; + + /** + * 参与订单数 + */ + @TableField(exist = false) + private Integer grantMershantCount; + /** + * 发放订单数 + */ + @TableField(exist = false) + private Integer grantRecordCount; + /** + * 发放总额 + */ + @TableField(exist = false) + private Integer grantPrice; + /** + * 商户结算总额 + */ + @TableField(exist = false) + private Integer merchantSettlmentPrice; } \ No newline at end of file diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantAward.java b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantAward.java index 2d55dc5e6..f3984ebd7 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantAward.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantAward.java @@ -92,6 +92,11 @@ public class WxOfflineActivityGrantAward extends TenantEntity{ @TableField(value = "create_date") private Date createDate; + @TableField(exist = false) + private Date createDateBegin; + @TableField(exist = false) + private Date createDateEnd; + /** * 更新时间 */ diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantItem.java b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantItem.java index 8836dab8d..a227f1703 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantItem.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantItem.java @@ -130,24 +130,12 @@ public class WxOfflineActivityGrantItem extends TenantEntity { @TableField(value = "mall_share_rate") private BigDecimal mallShareRate; - /** - * - */ - @TableField(value = "mall_share_price") - private Integer mallSharePrice; - /** * 商户分担比例 */ @TableField(value = "merchant_share_rate") private BigDecimal merchantShareRate; - /** - * - */ - @TableField(value = "merchant_share_price") - private Integer merchantSharePrice; - /** * 创建时间 */ diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantSettlement.java b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantSettlement.java index 6fd5018d3..3103dfbc8 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantSettlement.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantSettlement.java @@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.annotation.TableName; import java.io.Serializable; import java.math.BigDecimal; import java.util.Date; +import java.util.List; import com.iformall.domain.po.base.TenantEntity; import lombok.Data; @@ -52,6 +53,10 @@ public class WxOfflineActivityGrantSettlement extends TenantEntity { */ @TableField(value = "merchant_id") private Long merchantId; + @TableField(exist = false) + private String merchantName; + @TableField(exist = false) + private List merchantIdList; /** * 活动id @@ -84,13 +89,13 @@ public class WxOfflineActivityGrantSettlement extends TenantEntity { private Integer grantPrice; /** - * 商管承担总金额 + * 商管承担z占比 */ @TableField(value = "mall_share_rate") private BigDecimal mallShareRate; /** - * 商户承担总金额 + * 商户承担占比 */ @TableField(value = "merchant_share_rate") private BigDecimal merchantShareRate; @@ -125,6 +130,11 @@ public class WxOfflineActivityGrantSettlement extends TenantEntity { @TableField(value = "create_date") private Date createDate; + @TableField(exist = false) + private Date createDateBegin; + @TableField(exist = false) + private Date createDateEnd; + /** * 更新时间 */ diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/OfflineActivitySettlement.java b/mallinkService/src/main/java/com/iformall/domain/vo/OfflineActivitySettlement.java new file mode 100644 index 000000000..e6d3dae17 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/vo/OfflineActivitySettlement.java @@ -0,0 +1,21 @@ +package com.iformall.domain.vo; + +import com.iformall.domain.po.base.TenantEntity; +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +@Data +public class OfflineActivitySettlement extends TenantEntity { + + private Long activityId; + private Long merchantId; + private String merchantName; + + private Integer recordCount; + private Integer sumOrderMoney; + private Integer sumGrantPrice; + private Integer sumMallPrice; + private Integer sumMerchantPrice; +} diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/OfflineActivitySettlementStatistics.java b/mallinkService/src/main/java/com/iformall/domain/vo/OfflineActivitySettlementStatistics.java new file mode 100644 index 000000000..7ed851435 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/vo/OfflineActivitySettlementStatistics.java @@ -0,0 +1,17 @@ +package com.iformall.domain.vo; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class OfflineActivitySettlementStatistics implements Serializable { + + private static final long serialVersionUID = 1L; + + private Integer sumGrantPrice; + private Integer recordCount; + private Integer merchantCount; + private Integer sumMallPrice; + private Integer sumMerchantPrice; +} diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityGrantAwardMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityGrantAwardMapper.java index 9b49f77ad..fa628473b 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityGrantAwardMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityGrantAwardMapper.java @@ -2,7 +2,6 @@ package com.iformall.mapper; import com.iformall.common.CommonMapper; import com.iformall.domain.po.WxOfflineActivityGrantAward; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; /** * @author xiaohu @@ -12,6 +11,8 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; */ public interface WxOfflineActivityGrantAwardMapper extends CommonMapper { + Integer getCusCount(WxOfflineActivityGrantAward grantAwardQ); + } diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityGrantSettlementMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityGrantSettlementMapper.java index 93b8c66c4..da6eb6014 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityGrantSettlementMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityGrantSettlementMapper.java @@ -3,6 +3,8 @@ package com.iformall.mapper; import com.iformall.common.CommonMapper; import com.iformall.domain.po.WxOfflineActivityGrantSettlement; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.iformall.domain.vo.OfflineActivitySettlement; +import com.iformall.domain.vo.OfflineActivitySettlementStatistics; import java.util.List; @@ -15,6 +17,12 @@ import java.util.List; public interface WxOfflineActivityGrantSettlementMapper extends CommonMapper { void insertList(List settlementList); + + OfflineActivitySettlementStatistics settlementStatistics(WxOfflineActivityGrantSettlement settlement); + + List getActivitySettlement(WxOfflineActivityGrantSettlement settlement); + + List findList(WxOfflineActivityGrantSettlement settlement); } diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityRecordMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityRecordMapper.java index 8d36ccb6f..3c61d9d22 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityRecordMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityRecordMapper.java @@ -25,6 +25,8 @@ public interface WxOfflineActivityRecordMapper extends CommonMapper getRecordList(Long activityId, WxOfflineActivityRecord wxOfflineActivityRecord); void grantAward(WxOfflineActivityGrantAward wxOfflineActivityGrantAward); + + Map cusStatistics(TenantEntity tenantInfo); } diff --git a/mallinkService/src/main/java/com/iformall/service/WxOfflineActivityGrantSettlementService.java b/mallinkService/src/main/java/com/iformall/service/WxOfflineActivityGrantSettlementService.java index 8db5e3cb9..7e40a8a7c 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxOfflineActivityGrantSettlementService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxOfflineActivityGrantSettlementService.java @@ -1,8 +1,15 @@ package com.iformall.service; +import com.github.pagehelper.PageInfo; +import com.iformall.domain.po.WxOfflineActivity; import com.iformall.domain.po.WxOfflineActivityGrantAward; import com.iformall.domain.po.WxOfflineActivityGrantSettlement; import com.baomidou.mybatisplus.extension.service.IService; +import com.iformall.domain.po.base.TenantEntity; +import com.iformall.domain.vo.OfflineActivitySettlement; + +import java.util.List; +import java.util.Map; /** * @author xiaohu @@ -12,4 +19,12 @@ import com.baomidou.mybatisplus.extension.service.IService; public interface WxOfflineActivityGrantSettlementService { void settlement(WxOfflineActivityGrantAward wxOfflineActivityGrantAward); + + Map settlementStatistics(TenantEntity tenantInfo); + + PageInfo activityListAsPage(WxOfflineActivity wxOfflineActivity, Integer pageNum, Integer pageSize); + + List getActivitySettlement(WxOfflineActivityGrantSettlement grantSettlement); + + List findList(WxOfflineActivityGrantSettlement grantSettlement); } diff --git a/mallinkService/src/main/java/com/iformall/service/WxOfflineActivityRecordService.java b/mallinkService/src/main/java/com/iformall/service/WxOfflineActivityRecordService.java index 6cb92467f..d93f24e71 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxOfflineActivityRecordService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxOfflineActivityRecordService.java @@ -4,6 +4,7 @@ import com.github.pagehelper.PageInfo; import com.iformall.domain.po.WxOfflineActivityRecord; import com.baomidou.mybatisplus.extension.service.IService; import com.iformall.domain.po.WxRaffleActivityRecord; +import com.iformall.domain.po.base.TenantEntity; import java.util.Map; @@ -25,4 +26,5 @@ public interface WxOfflineActivityRecordService { void auditRecord(WxOfflineActivityRecord wxOfflineActivityRecord, Long userId); + Map orderStatistics(TenantEntity tenantInfo); } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantAwardServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantAwardServiceImpl.java index 8e0f15c96..77c4e98a5 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantAwardServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantAwardServiceImpl.java @@ -16,11 +16,13 @@ import com.iformall.mapper.WxOfflineActivityRecordGrantMapper; import com.iformall.mapper.WxOfflineActivityRecordMapper; import com.iformall.service.*; import com.iformall.mapper.WxOfflineActivityGrantAwardMapper; +import com.iformall.utils.DateUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; +import java.text.NumberFormat; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; @@ -170,6 +172,7 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity wxOfflineActivityGrantSettlementService.settlement(wxOfflineActivityGrantAward); } + private void handlerGrantData(WxOfflineActivity activity,WxOfflineActivityGrantAward wxOfflineActivityGrantAward){ List wxOfflineActivityRecords = wxOfflineActivityRecordMapper.selectBatchIds(wxOfflineActivityGrantAward.getRecordIds()); @@ -308,6 +311,57 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity grantGrantItem.setMallShareRate(awardsItem.getMallShareRate()); grantGrantItem.setMerchantShareRate(awardsItem.getMerchantShareRate()); } + + + @Override + public Map cusStatistics(TenantEntity tenantInfo) { + //最近30天 + Date now = new Date(); + String monthStartdate = DateUtils.getTimeBefore(30, now); + String yesyeweekDate = DateUtils.getTimeBefore(8, now);//计算周同比时间 + String weekStartdate = DateUtils.getTimeBefore(7, now); + String yesyesDate = DateUtils.getTimeBefore(2, now);//计算日同比时间 + String yesterdayDate = DateUtils.getTimeBefore(1, now); + String today = DateUtils.getTimeBefore(0, now); + + //最近30天数据 + WxOfflineActivityGrantAward grantAwardQ = new WxOfflineActivityGrantAward(); + grantAwardQ.updateTenantInfo(tenantInfo); + grantAwardQ.setCreateDateBegin(DateUtils.stringToDate(monthStartdate)); + Integer monthCount = wxOfflineActivityGrantAwardMapper.getCusCount(grantAwardQ); + //一周前的昨天 + grantAwardQ.setCreateDateBegin(DateUtils.stringToDate(yesyeweekDate)); + grantAwardQ.setCreateDateEnd(DateUtils.stringToDate(weekStartdate)); + Integer yesWeekCount = wxOfflineActivityGrantAwardMapper.getCusCount(grantAwardQ); + //昨天的昨天 + grantAwardQ.setCreateDateBegin(DateUtils.stringToDate(yesyesDate)); + grantAwardQ.setCreateDateEnd(DateUtils.stringToDate(yesterdayDate)); + Integer yesYesCount = wxOfflineActivityGrantAwardMapper.getCusCount(grantAwardQ); + //昨天 + grantAwardQ.setCreateDateBegin(DateUtils.stringToDate(yesterdayDate)); + grantAwardQ.setCreateDateEnd(DateUtils.stringToDate(today)); + Integer yesCount = wxOfflineActivityGrantAwardMapper.getCusCount(grantAwardQ); + + Map result = new HashMap<>(); + result.put("monthCount",monthCount); + + NumberFormat nf = NumberFormat.getPercentInstance(); + nf.setMinimumFractionDigits(2); + String dayPercentage = "--"; + if (yesYesCount > 0) { + Integer count = yesCount - yesYesCount; + dayPercentage = nf.format(count.doubleValue() / new Double(yesYesCount).doubleValue()); + } + result.put("dayPercentage",dayPercentage); + String weekPercentage = "--"; + if (yesWeekCount > 0) { + Integer count = yesCount - yesWeekCount; + weekPercentage = nf.format(count.doubleValue() / new Double(yesWeekCount).doubleValue()); + } + result.put("weekPercentage",weekPercentage); + return result; + } + } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantItemServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantItemServiceImpl.java index 4f81fb9aa..2445e11ab 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantItemServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantItemServiceImpl.java @@ -56,8 +56,6 @@ public class WxOfflineActivityGrantItemServiceImpl implements WxOfflineActivityG grantGrantItem.setAwardPrice(awardPriceTen*1000); } } - grantGrantItem.setMallSharePrice(new BigDecimal(grantGrantItem.getAwardPrice()).multiply(grantGrantItem.getMallShareRate()).setScale(0, BigDecimal.ROUND_HALF_UP).intValue()); - grantGrantItem.setMerchantSharePrice(grantGrantItem.getAwardPrice() - grantGrantItem.getMallSharePrice()); rantItemList.add(grantGrantItem); } } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantSettlementServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantSettlementServiceImpl.java index 21db14b54..2310329a3 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantSettlementServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantSettlementServiceImpl.java @@ -1,19 +1,29 @@ package com.iformall.service.impl; +import com.aliyun.openservices.shade.org.apache.commons.lang3.StringUtils; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; import com.iformall.common.IdWorker; import com.iformall.domain.po.*; +import com.iformall.domain.po.base.TenantEntity; +import com.iformall.domain.vo.OfflineActivitySettlement; +import com.iformall.domain.vo.OfflineActivitySettlementStatistics; +import com.iformall.enums.EnumOfflineActivityStatus; +import com.iformall.enums.EnumYesOrNo; +import com.iformall.mapper.WxMerchantMapper; +import com.iformall.mapper.WxOfflineActivityMapper; +import com.iformall.service.WxMerchantService; import com.iformall.service.WxOfflineActivityGrantSettlementService; import com.iformall.mapper.WxOfflineActivityGrantSettlementMapper; +import com.iformall.utils.DateUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.math.RoundingMode; -import java.util.ArrayList; -import java.util.Comparator; -import java.util.Date; -import java.util.List; +import java.text.NumberFormat; +import java.util.*; import java.util.stream.Collectors; /** @@ -27,6 +37,14 @@ public class WxOfflineActivityGrantSettlementServiceImpl implements WxOfflineAct @Autowired private WxOfflineActivityGrantSettlementMapper wxOfflineActivityGrantSettlementMapper; + @Autowired + WxOfflineActivityMapper wxOfflineActivityMapper; + + @Autowired + WxMerchantMapper wxMerchantMapper; + @Autowired + WxMerchantService wxMerchantService; + @Override public void settlement(WxOfflineActivityGrantAward wxOfflineActivityGrantAward) { List settlementList = new ArrayList<>(); @@ -97,6 +115,147 @@ public class WxOfflineActivityGrantSettlementServiceImpl implements WxOfflineAct wxOfflineActivityGrantSettlementMapper.insertList(settlementList); } + + @Override + public Map settlementStatistics(TenantEntity tenantInfo) { + //最近30天 + Date now = new Date(); + String monthStartdate = DateUtils.getTimeBefore(30, now); + String yesyeweekDate = DateUtils.getTimeBefore(8, now);//计算周同比时间 + String weekStartdate = DateUtils.getTimeBefore(7, now); + String yesyesDate = DateUtils.getTimeBefore(2, now);//计算日同比时间 + String yesterdayDate = DateUtils.getTimeBefore(1, now); + String today = DateUtils.getTimeBefore(0, now); + + //最近30天 + WxOfflineActivityGrantSettlement settlement = new WxOfflineActivityGrantSettlement(); + settlement.updateTenantInfo(tenantInfo); + settlement.setCreateDateBegin(DateUtils.stringToDate(monthStartdate)); + OfflineActivitySettlementStatistics monthStatistics = wxOfflineActivityGrantSettlementMapper.settlementStatistics(settlement); + //一周前的昨天 + settlement.setCreateDateBegin(DateUtils.stringToDate(yesyeweekDate)); + settlement.setCreateDateEnd(DateUtils.stringToDate(weekStartdate)); + OfflineActivitySettlementStatistics yesWeekStatistics = wxOfflineActivityGrantSettlementMapper.settlementStatistics(settlement); + //昨天的昨天 + settlement.setCreateDateBegin(DateUtils.stringToDate(yesyesDate)); + settlement.setCreateDateEnd(DateUtils.stringToDate(yesterdayDate)); + OfflineActivitySettlementStatistics yesYesStatistics = wxOfflineActivityGrantSettlementMapper.settlementStatistics(settlement); + //昨天 + settlement.setCreateDateBegin(DateUtils.stringToDate(yesterdayDate)); + settlement.setCreateDateEnd(DateUtils.stringToDate(today)); + OfflineActivitySettlementStatistics yesStatistics = wxOfflineActivityGrantSettlementMapper.settlementStatistics(settlement); + + Map result = new HashMap<>(); + result.put("monthGrantPrice",monthStatistics.getSumGrantPrice()); + result.put("grantPriceDayPercentage",getPercentage(yesStatistics.getSumGrantPrice(),yesYesStatistics.getSumGrantPrice())); + result.put("grantPriceWeekPercentage",getPercentage(yesStatistics.getSumGrantPrice(),yesWeekStatistics.getSumGrantPrice())); + + result.put("monthRecordCount",monthStatistics.getRecordCount()); + result.put("recordCountDayPercentage",getPercentage(yesStatistics.getRecordCount(),yesYesStatistics.getRecordCount())); + result.put("recordCountWeekPercentage",getPercentage(yesStatistics.getRecordCount(),yesWeekStatistics.getRecordCount())); + + result.put("monthMallPrice",monthStatistics.getSumMallPrice()); + result.put("mallPriceDayPercentage",getPercentage(yesStatistics.getSumMallPrice(),yesYesStatistics.getSumMallPrice())); + result.put("mallPriceWeekPercentage",getPercentage(yesStatistics.getSumMallPrice(),yesWeekStatistics.getSumMallPrice())); + + result.put("monthMerchantPrice",monthStatistics.getSumMerchantPrice()); + result.put("merchantPriceDayPercentage",getPercentage(yesStatistics.getSumMerchantPrice(),yesYesStatistics.getSumMerchantPrice())); + result.put("merchantPriceWeekPercentage",getPercentage(yesStatistics.getSumMerchantPrice(),yesWeekStatistics.getSumMerchantPrice())); + + return result; + } + + + private String getPercentage(Integer yes, Integer yesYes){ + NumberFormat nf = NumberFormat.getPercentInstance(); + nf.setMinimumFractionDigits(2); + + String percentage = "--"; + if(yes > 0){ + Integer count = yes - yesYes; + percentage = nf.format(count.doubleValue() / new Double(yesYes).doubleValue()); + } + return percentage; + } + + @Override + public PageInfo activityListAsPage(WxOfflineActivity activity, Integer pageNum, Integer pageSize) { + handlerQuery(activity); + PageInfo activityPageInfo = PageHelper.startPage(pageNum, pageSize).doSelectPageInfo(() -> wxOfflineActivityMapper.findList(activity)); + handlerReturnList(activityPageInfo.getList()); + return activityPageInfo; + } + + private void handlerQuery(WxOfflineActivity record) { + if (null != record.getStatus()) { + //已上架 + if(EnumOfflineActivityStatus.ON_LINE.getCode().equals(record.getStatus())){ + record.setValidStatus(EnumYesOrNo.NO.getCode()); + } + //已过期 + else if(EnumOfflineActivityStatus.EXPIRE.getCode().equals(record.getStatus())){ + record.setStatus(null); + record.setValidStatus(EnumYesOrNo.YES.getCode()); + } + } + } + + private void handlerReturnList(List list) { + if (list == null || list.isEmpty()) { + return; + } + + for (WxOfflineActivity activity : list) { + if(new Date().before(activity.getStartTime())){ + activity.setStatus(EnumOfflineActivityStatus.EXPIRE.getCode()); + } + //获取结算相关 + WxOfflineActivityGrantSettlement settlement = new WxOfflineActivityGrantSettlement(); + settlement.updateTenantInfo(activity); + settlement.setActivityId(activity.getId()); + OfflineActivitySettlementStatistics settlementStatistics = wxOfflineActivityGrantSettlementMapper.settlementStatistics(settlement); + activity.setGrantMershantCount(settlementStatistics.getMerchantCount()); + activity.setGrantPrice(settlementStatistics.getSumGrantPrice()); + activity.setGrantRecordCount(settlementStatistics.getRecordCount()); + activity.setMerchantSettlmentPrice(settlementStatistics.getSumMerchantPrice()); + + } + } + + @Override + public List getActivitySettlement(WxOfflineActivityGrantSettlement record) { + + if (StringUtils.isNotBlank(record.getMerchantName())) { + WxMerchant merchant = new WxMerchant(); + merchant.updateTenantInfo(record); + merchant.setName(record.getMerchantName()); + List mids = wxMerchantMapper.findIdList(merchant); + if (null == mids || mids.size() <= 0 ) { + record.setId(-1L); + }else { + record.setMerchantIdList(mids); + } + } + + List activitySettlementList = wxOfflineActivityGrantSettlementMapper.getActivitySettlement(record); + if (activitySettlementList != null && !activitySettlementList.isEmpty()) { + + WxMerchant merchantQ = new WxMerchant(); + merchantQ.updateTenantInfo(record); + Map idAndNamesMap = wxMerchantService.getIdAndNamesMap(merchantQ); + + for (OfflineActivitySettlement activitySettlement : activitySettlementList) { + activitySettlement.setMerchantName(idAndNamesMap.get(activitySettlement.getMerchantId())); + + } + } + return activitySettlementList; + } + + @Override + public List findList(WxOfflineActivityGrantSettlement grantSettlement) { + return wxOfflineActivityGrantSettlementMapper.findList(grantSettlement); + } } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityRecordServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityRecordServiceImpl.java index c869b773c..5815c737e 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityRecordServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityRecordServiceImpl.java @@ -1,19 +1,24 @@ package com.iformall.service.impl; +import com.aliyun.openservices.shade.org.apache.commons.lang3.StringUtils; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.iformall.common.IdWorker; import com.iformall.domain.po.WxMerchant; +import com.iformall.domain.po.WxOfflineActivityGrantAward; import com.iformall.domain.po.WxOfflineActivityRecord; import com.iformall.domain.po.base.TenantEntity; import com.iformall.domain.vo.OfflineActivityRecordStatistics; import com.iformall.enums.EnumOfflineActivityRecordStatus; +import com.iformall.mapper.WxMerchantMapper; import com.iformall.service.WxMerchantService; import com.iformall.service.WxOfflineActivityRecordService; import com.iformall.mapper.WxOfflineActivityRecordMapper; +import com.iformall.utils.DateUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.text.NumberFormat; import java.util.*; /** @@ -27,16 +32,34 @@ public class WxOfflineActivityRecordServiceImpl implements WxOfflineActivityReco @Autowired private WxOfflineActivityRecordMapper wxOfflineActivityRecordMapper; + @Autowired + WxMerchantMapper wxMerchantMapper; @Autowired WxMerchantService wxMerchantService; @Override public PageInfo listAsPage(WxOfflineActivityRecord record, Integer pageNum, Integer pageSize) { + handlerQuery(record); PageInfo recordPageInfo = PageHelper.startPage(pageNum, pageSize).doSelectPageInfo(() -> wxOfflineActivityRecordMapper.findList(record)); handlerRecordList(record,recordPageInfo.getList()); return recordPageInfo; } + private void handlerQuery(WxOfflineActivityRecord record) { + //商户处理 + if (StringUtils.isNotBlank(record.getMerchantName())) { + WxMerchant merchant = new WxMerchant(); + merchant.updateTenantInfo(record); + merchant.setName(record.getMerchantName()); + List mids = wxMerchantMapper.findIdList(merchant); + if (null == mids || mids.size() <= 0 ) { + record.setId(-1L); + }else { + record.setMerchantIdList(mids); + } + } + } + private void handlerRecordList(TenantEntity tenantEntity,List recordList) { if (recordList != null && recordList.size() > 0) { WxMerchant merchantQ = new WxMerchant(); @@ -113,6 +136,55 @@ public class WxOfflineActivityRecordServiceImpl implements WxOfflineActivityReco record.setAuditBy(userId); wxOfflineActivityRecordMapper.updateAuditStatus(record); } + + @Override + public Map orderStatistics(TenantEntity tenantInfo) { + //最近30天 + Date now = new Date(); + String monthStartdate = DateUtils.getTimeBefore(30, now); + String yesyeweekDate = DateUtils.getTimeBefore(8, now);//计算周同比时间 + String weekStartdate = DateUtils.getTimeBefore(7, now); + String yesyesDate = DateUtils.getTimeBefore(2, now);//计算日同比时间 + String yesterdayDate = DateUtils.getTimeBefore(1, now); + String today = DateUtils.getTimeBefore(0, now); + + //最近30天数据 + WxOfflineActivityRecord recordQ = new WxOfflineActivityRecord(); + recordQ.updateTenantInfo(tenantInfo); + recordQ.setCreateDateBegin(DateUtils.stringToDate(monthStartdate)); + Integer monthCount = wxOfflineActivityRecordMapper.getCount(recordQ); + //一周前的昨天 + recordQ.setCreateDateBegin(DateUtils.stringToDate(yesyeweekDate)); + recordQ.setCreateDateEnd(DateUtils.stringToDate(weekStartdate)); + Integer yesWeekCount = wxOfflineActivityRecordMapper.getCount(recordQ); + //昨天的昨天 + recordQ.setCreateDateBegin(DateUtils.stringToDate(yesyesDate)); + recordQ.setCreateDateEnd(DateUtils.stringToDate(yesterdayDate)); + Integer yesYesCount = wxOfflineActivityRecordMapper.getCount(recordQ); + //昨天 + recordQ.setCreateDateBegin(DateUtils.stringToDate(yesterdayDate)); + recordQ.setCreateDateEnd(DateUtils.stringToDate(today)); + Integer yesCount = wxOfflineActivityRecordMapper.getCount(recordQ); + + Map result = new HashMap<>(); + result.put("monthCount",monthCount); + + NumberFormat nf = NumberFormat.getPercentInstance(); + nf.setMinimumFractionDigits(2); + String dayPercentage = "--"; + if (yesYesCount > 0) { + Integer count = yesCount - yesYesCount; + dayPercentage = nf.format(count.doubleValue() / new Double(yesYesCount).doubleValue()); + } + result.put("dayPercentage",dayPercentage); + String weekPercentage = "--"; + if (yesWeekCount > 0) { + Integer count = yesCount - yesWeekCount; + weekPercentage = nf.format(count.doubleValue() / new Double(yesWeekCount).doubleValue()); + } + result.put("weekPercentage",weekPercentage); + return result; + } } diff --git a/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantAwardMapper.xml b/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantAwardMapper.xml index bef2c6f97..fad13a011 100644 --- a/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantAwardMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantAwardMapper.xml @@ -32,4 +32,24 @@ create_date,update_date,lottery_num, lottery_count,anniversary_lottery_num + + + diff --git a/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantItemMapper.xml b/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantItemMapper.xml index 3a9c6641a..e002d4749 100644 --- a/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantItemMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantItemMapper.xml @@ -25,9 +25,7 @@ - - @@ -39,8 +37,8 @@ award_itam_id,award_name,award_grade, award_min_amount,award_max_amount,awards_item_rule,cash_back_ratio, award_price,award_count,money_rule, - mall_share_rate,mall_share_price,merchant_share_rate, - merchant_share_price,create_date,update_date + mall_share_rate,merchant_share_rate, + create_date,update_date @@ -51,8 +49,8 @@ `award_itam_id`,`award_name`,`award_grade`, `award_min_amount`,`award_max_amount`,`awards_item_rule`,`cash_back_ratio`, `award_price`,`award_count`,`money_rule`, - `mall_share_rate`,`mall_share_price`,`merchant_share_rate`, - `merchant_share_price`,`create_date`,`update_date`) + `mall_share_rate`,`merchant_share_rate`, + `create_date`,`update_date`) values (#{item.id,jdbcType=BIGINT},#{item.tenantId,jdbcType=VARCHAR},#{item.parentTenantId,jdbcType=VARCHAR}, @@ -61,8 +59,8 @@ #{item.awardItamId,jdbcType=BIGINT},#{item.awardName,jdbcType=VARCHAR},#{item.awardGrade,jdbcType=INTEGER}, #{item.awardMinAmount,jdbcType=INTEGER},#{item.awardMaxAmount,jdbcType=INTEGER},#{item.awardsItemRule,jdbcType=INTEGER},#{item.cashBackRatio,jdbcType=DECIMAL}, #{item.awardPrice,jdbcType=INTEGER},#{item.awardCount,jdbcType=INTEGER},#{item.moneyRule,jdbcType=INTEGER}, - #{item.mallShareRate,jdbcType=DECIMAL},#{item.mallSharePrice,jdbcType=INTEGER},#{item.merchantShareRate,jdbcType=DECIMAL}, - #{item.merchantSharePrice,jdbcType=INTEGER},#{item.createDate,jdbcType=TIMESTAMP},#{item.updateDate,jdbcType=TIMESTAMP}) + #{item.mallShareRate,jdbcType=DECIMAL},#{item.merchantShareRate,jdbcType=DECIMAL}, + #{item.createDate,jdbcType=TIMESTAMP},#{item.updateDate,jdbcType=TIMESTAMP}) diff --git a/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantSettlementMapper.xml b/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantSettlementMapper.xml index 2f0546e3f..b903347b5 100644 --- a/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantSettlementMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantSettlementMapper.xml @@ -37,8 +37,72 @@ create_date,update_date + + where 1 = 1 + + + and `id` = #{id} + + + + and `tenant_id` = #{tenantId} + + + and `parent_tenant_id` = #{parentTenantId} + + + + and `record_id` = #{recordId} + + + and `order_no` like concat('%', #{orderNo},'%') + + + + and `merchant_id` = #{merchantId} + + + and `activity_id` = #{activityId} + + + and `activity_item_id` = #{activityItemId} + + + and `award_itam_id` = #{awardItamId} + + + and `grant_id` = #{grantId} + + + and `create_date` >= #{createDateBegin} + + + + and `create_date` <= #{createDateEnd} + + + and merchant_id in + + #{midItem} + + + + + and id in + + #{idItem} + + + order by ${sortColumns} + + + + - insert into wx_offline_activity_grant_item + insert into wx_offline_activity_grant_settlement (id,tenant_id,parent_tenant_id, record_id,order_no,order_money, merchant_id,activity_id,activity_item_id, @@ -57,4 +121,73 @@ #{item.createDate,jdbcType=TIMESTAMP},#{item.updateDate,jdbcType=TIMESTAMP}) + + + + + + + diff --git a/mallinkService/src/main/resources/mapper/WxOfflineActivityRecordMapper.xml b/mallinkService/src/main/resources/mapper/WxOfflineActivityRecordMapper.xml index 1737088bb..ed7676fe6 100644 --- a/mallinkService/src/main/resources/mapper/WxOfflineActivityRecordMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxOfflineActivityRecordMapper.xml @@ -193,4 +193,23 @@ + +