diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/mem/WxCUserFromController.java b/mallinkAdmin/src/main/java/com/iformall/controller/mem/WxCUserFromController.java index 2026cc142..d3de03d04 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/mem/WxCUserFromController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/mem/WxCUserFromController.java @@ -2,12 +2,11 @@ package com.iformall.controller.mem; import com.github.pagehelper.PageInfo; import com.iformall.annotation.SystemControllerLog; -import com.iformall.common.Result; import com.iformall.common.ResultData; import com.iformall.controller.base.BaseController; -import com.iformall.domain.po.WxCUserCar; import com.iformall.domain.po.WxCUserFrom; -import com.iformall.service.WxCUserCarService; +import com.iformall.domain.vo.WxCUserFromVo; +import com.iformall.enums.EnumCUserFrom; import com.iformall.service.WxCUserFromService; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; @@ -17,6 +16,9 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + @RestController @RequestMapping("wxCUserFrom") public class WxCUserFromController extends BaseController { @@ -30,7 +32,7 @@ public class WxCUserFromController extends BaseController { @ApiImplicitParams({ @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)}) - @SystemControllerLog(description = "停车-列表") + @SystemControllerLog(description = "分享-列表") public ResultData list(@ModelAttribute WxCUserFrom wxCUserFrom, Integer pageNum, Integer pageSize) { logger.debug("[" + getIpAddr() + "] WxCUserCarController::list"); if (null == wxCUserFrom) wxCUserFrom = new WxCUserFrom(); @@ -42,13 +44,35 @@ public class WxCUserFromController extends BaseController { @ApiOperation("根据id查询接口") @GetMapping("/visits") @ApiImplicitParam(name = "id", value = "id", dataType = "Long", paramType = "query", required = true) - @SystemControllerLog(description = "停车-查询") - public ResultData visits(@ModelAttribute WxCUserFrom wxCUserFrom,Integer pageNum, Integer pageSize) { + @SystemControllerLog(description = "分享-列表") + public ResultData visits(@ModelAttribute WxCUserFromVo wxCUserFromVo,Integer pageNum, Integer pageSize) { logger.debug("[" + getIpAddr() + "] WxCUserCarController::findById"); + if (null == wxCUserFromVo) wxCUserFromVo = new WxCUserFromVo(); + if(wxCUserFromVo.getFromType() == null){ + wxCUserFromVo.setFromType(EnumCUserFrom.FROM_C_USER_BASIC_INFO.getCode()); + } + wxCUserFromVo.updateTenantInfo(getTenantInfo()); + final PageInfo page = wxCUserFromService.listAsVisitsPage(wxCUserFromVo, pageNum, pageSize); + return new ResultData(page); + } + + @GetMapping("/exportData") + @SystemControllerLog(description = "导出数据") + public void exportData(@ModelAttribute WxCUserFrom wxCUserFrom, HttpServletRequest request, HttpServletResponse response) { if (null == wxCUserFrom) wxCUserFrom = new WxCUserFrom(); wxCUserFrom.updateTenantInfo(getTenantInfo()); - final PageInfo page = wxCUserFromService.listAsVisitsPage(wxCUserFrom, pageNum, pageSize); - return new ResultData(page); + wxCUserFromService.exportData(request, response, wxCUserFrom); + } + + @GetMapping("/exportDataVisits") + @SystemControllerLog(description = "导出数据") + public void exportDataVisits(@ModelAttribute WxCUserFromVo wxCUserFromVo, HttpServletRequest request, HttpServletResponse response) { + if (null == wxCUserFromVo) wxCUserFromVo = new WxCUserFromVo(); + wxCUserFromVo.updateTenantInfo(getTenantInfo()); + if(wxCUserFromVo.getFromType() == null){ + wxCUserFromVo.setFromType(EnumCUserFrom.FROM_C_USER_BASIC_INFO.getCode()); + } + wxCUserFromService.exportDataVisits(request, response, wxCUserFromVo); } diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxCUserFrom.java b/mallinkService/src/main/java/com/iformall/domain/po/WxCUserFrom.java index 233831a40..18e4b3bc7 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxCUserFrom.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxCUserFrom.java @@ -1,5 +1,6 @@ package com.iformall.domain.po; +import cn.afterturn.easypoi.excel.annotation.Excel; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; @@ -24,9 +25,11 @@ public class WxCUserFrom extends TenantEntity { @io.swagger.annotations.ApiModelProperty(value="cUserId",name="cUserId") protected Long cUserId; + @Excel(name = "用户昵称", width = 20, orderNum = "2") @TableField(exist = false) @io.swagger.annotations.ApiModelProperty(value="cUserNickName",name="cUserNickName") protected String cUserNickName; + @Excel(name = "用户电话", width = 20, orderNum = "3") @TableField(exist = false) @io.swagger.annotations.ApiModelProperty(value="cUserPhone",name="cUserPhone") protected String cUserPhone; @@ -37,11 +40,13 @@ public class WxCUserFrom extends TenantEntity { @io.swagger.annotations.ApiModelProperty(value="渠道,小程序",name="sceneAddress") private String sceneAddress; @TableField(exist = false) + @Excel(name = "用户来源方式", width = 20, orderNum = "4") @io.swagger.annotations.ApiModelProperty(value="sceneAddress描述",name="sceneAddressDesc") private String sceneAddressDesc; @io.swagger.annotations.ApiModelProperty(value="EnumCUserFrom",name="fromType") private Integer fromType; + @Excel(name = "来源", width = 20, orderNum = "1") @TableField(exist = false) @io.swagger.annotations.ApiModelProperty(value="fromType描述",name="fromTypeDesc") private String fromTypeDesc; @@ -67,11 +72,12 @@ public class WxCUserFrom extends TenantEntity { @io.swagger.annotations.ApiModelProperty(value="是否新用户(0:否1:是)EnumYesOrNo",name="isNewUser") private Integer isNewUser; @TableField(exist = false) + @Excel(name = "是否新用户", width = 20, orderNum = "5") @io.swagger.annotations.ApiModelProperty(value="是否新用户",name="isNewUserStr") private String isNewUserStr; public String getIsNewUserStr(){ if(this.getIsNewUser() != null){ - EnumYesOrNo anEnum = EnumYesOrNo.getEnum(this.getFromType()); + EnumYesOrNo anEnum = EnumYesOrNo.getEnum(this.getIsNewUser()); if(anEnum != null){ isNewUserStr = anEnum.getMessage(); } @@ -86,7 +92,7 @@ public class WxCUserFrom extends TenantEntity { private String shareUserTypeDesc; public String getShareUserTypeDesc(){ if(this.getShareUserType() != null){ - EnumUserType anEnum = EnumUserType.getEnum(this.getFromType()); + EnumUserType anEnum = EnumUserType.getEnum(this.getShareUserType()); if(anEnum != null){ shareUserTypeDesc = anEnum.getMessage(); } @@ -100,34 +106,21 @@ public class WxCUserFrom extends TenantEntity { @io.swagger.annotations.ApiModelProperty(value="分享者",name="shareUserName") protected String shareUserName; + @Excel(name = "进入时间", width = 20, format="yyyy-MM-dd HH:mm:ss", orderNum = "6") @io.swagger.annotations.ApiModelProperty(value="创建时间",name="createDate") private Date createDate; @TableField(exist = false) - @io.swagger.annotations.ApiModelProperty(value="推广人次",name="visits") - private Integer visits; - @TableField(exist = false) - @io.swagger.annotations.ApiModelProperty(value="触达用户",name="reachUser") - private Integer reachUser; - @TableField(exist = false) - @io.swagger.annotations.ApiModelProperty(value="触达新用户",name="newUser") - private Integer newUser; - @TableField(exist = false) - @io.swagger.annotations.ApiModelProperty(value="触达老用户",name="oldUser") - private Integer oldUser; - public Integer getOldUser(){ - if(this.getReachUser() != null && this.getNewUser() != null){ - oldUser = this.getReachUser() - this.getNewUser(); - } - return oldUser; - } + protected Date startDate; + @TableField(exist = false) + protected Date endDate; @TableField(exist = false) - protected Date startDate; + private Integer begin; @TableField(exist = false) - protected Date endDate; + private Integer limit; } diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/WxCUserFromVo.java b/mallinkService/src/main/java/com/iformall/domain/vo/WxCUserFromVo.java new file mode 100644 index 000000000..18d46bf19 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/vo/WxCUserFromVo.java @@ -0,0 +1,81 @@ +package com.iformall.domain.vo; + +import cn.afterturn.easypoi.excel.annotation.Excel; +import com.baomidou.mybatisplus.annotation.TableField; +import com.iformall.domain.po.base.TenantEntity; +import com.iformall.enums.EnumCUserFrom; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +import java.util.Date; + +@Data +@ToString(callSuper = true) +@EqualsAndHashCode(callSuper = true) +public class WxCUserFromVo extends TenantEntity { + + + @io.swagger.annotations.ApiModelProperty(value="EnumCUserFrom",name="fromType") + private Integer fromType; + @Excel(name = "来源", width = 20, orderNum = "1") + @TableField(exist = false) + @io.swagger.annotations.ApiModelProperty(value="fromType描述",name="fromTypeDesc") + private String fromTypeDesc; + public String getFromTypeDesc(){ + if(this.getFromType() != null){ + EnumCUserFrom anEnum = EnumCUserFrom.getEnum(this.getFromType()); + if(anEnum != null){ + fromTypeDesc = anEnum.getMessage(); + } + } + return fromTypeDesc; + } + + @io.swagger.annotations.ApiModelProperty(value="来源ID",name="fromId") + protected Long fromId; + @Excel(name = "用户昵称/店铺名称", width = 20, orderNum = "2") + @TableField(exist = false) + @io.swagger.annotations.ApiModelProperty(value="来源Name",name="fromName") + protected String fromName; + @Excel(name = "(用户/店铺)联系方式", width = 20, orderNum = "3") + @TableField(exist = false) + @io.swagger.annotations.ApiModelProperty(value="来源phone",name="fromPhone") + protected String fromPhone; + @Excel(name = "推广人次", width = 20, orderNum = "4") + @TableField(exist = false) + @io.swagger.annotations.ApiModelProperty(value="推广人次",name="visits") + private Integer visits; + @Excel(name = "触达用户", width = 20, orderNum = "5") + @TableField(exist = false) + @io.swagger.annotations.ApiModelProperty(value="触达用户",name="reachUser") + private Integer reachUser; + @Excel(name = "触达新用户", width = 20, orderNum = "6") + @TableField(exist = false) + @io.swagger.annotations.ApiModelProperty(value="触达新用户",name="newUser") + private Integer newUser; + @Excel(name = "触达老用户", width = 20, orderNum = "7") + @TableField(exist = false) + @io.swagger.annotations.ApiModelProperty(value="触达老用户",name="oldUser") + private Integer oldUser; + public Integer getOldUser(){ + if(this.getReachUser() != null && this.getNewUser() != null){ + oldUser = this.getReachUser() - this.getNewUser(); + } + return oldUser; + } + + + @TableField(exist = false) + protected Date startDate; + + @TableField(exist = false) + protected Date endDate; + + @TableField(exist = false) + private Integer begin; + + @TableField(exist = false) + private Integer limit; + +} diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxCUserFromMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxCUserFromMapper.java index 3ec71ea7d..296b979f4 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxCUserFromMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxCUserFromMapper.java @@ -2,6 +2,7 @@ package com.iformall.mapper; import com.iformall.common.CommonMapper; import com.iformall.domain.po.WxCUserFrom; +import com.iformall.domain.vo.WxCUserFromVo; import java.util.List; @@ -9,5 +10,5 @@ public interface WxCUserFromMapper extends CommonMapper{ List findList(WxCUserFrom record); - List visits(WxCUserFrom record); + List visits(WxCUserFromVo record); } diff --git a/mallinkService/src/main/java/com/iformall/service/WxCUserFromService.java b/mallinkService/src/main/java/com/iformall/service/WxCUserFromService.java index ce9c4bd02..71cba8023 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxCUserFromService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxCUserFromService.java @@ -2,6 +2,10 @@ package com.iformall.service; import com.github.pagehelper.PageInfo; import com.iformall.domain.po.WxCUserFrom; +import com.iformall.domain.vo.WxCUserFromVo; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; public interface WxCUserFromService { @@ -15,9 +19,12 @@ public interface WxCUserFromService { */ PageInfo listAsPage(WxCUserFrom record, Integer pageIndex, Integer pageSize); - PageInfo listAsVisitsPage(WxCUserFrom record, Integer pageIndex, Integer pageSize); + PageInfo listAsVisitsPage(WxCUserFromVo record, Integer pageIndex, Integer pageSize); void save(WxCUserFrom wxCUserFrom); + void exportData(HttpServletRequest request, HttpServletResponse response, WxCUserFrom record); + + void exportDataVisits(HttpServletRequest request, HttpServletResponse response, WxCUserFromVo record); } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCUserFromServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCUserFromServiceImpl.java index 2204df1c5..cb2b59f98 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCUserFromServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCUserFromServiceImpl.java @@ -1,10 +1,12 @@ package com.iformall.service.impl; - +import cn.afterturn.easypoi.handler.inter.IExcelExportServer; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.iformall.common.IdWorker; import com.iformall.domain.po.*; +import com.iformall.domain.vo.WxCUserFromVo; +import com.iformall.enums.EnumCUserFrom; import com.iformall.mapper.*; import com.iformall.service.*; import lombok.extern.slf4j.Slf4j; @@ -13,24 +15,35 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.util.Date; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.*; @Service @Slf4j -public class WxCUserFromServiceImpl implements WxCUserFromService { +public class WxCUserFromServiceImpl implements WxCUserFromService, IExcelExportServer { private final Logger logger = LoggerFactory.getLogger(this.getClass()); @Autowired WxCUserFromMapper wxCUserFromMapper; + @Autowired + WxCUserBasicInfoMapper wxCUserBasicInfoMapper; + + @Autowired + WxMerchantMapper wxMerchantMapper; + + @Autowired + ExcelService excelService; + @Override public PageInfo listAsPage(WxCUserFrom record, Integer pageIndex, Integer pageSize) { return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxCUserFromMapper.findList(record)); } @Override - public PageInfo listAsVisitsPage(WxCUserFrom record, Integer pageIndex, Integer pageSize) { + public PageInfo listAsVisitsPage(WxCUserFromVo record, Integer pageIndex, Integer pageSize) { return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxCUserFromMapper.visits(record)); } @@ -44,4 +57,59 @@ public class WxCUserFromServiceImpl implements WxCUserFromService { wxCUserFromMapper.insert(wxCUserFrom); } + @Override + public void exportData(HttpServletRequest request, HttpServletResponse response, WxCUserFrom record) { + String sheetName = "门店/用户分享明细"; + if(record.getFromType().equals(EnumCUserFrom.FROM_C_USER_BASIC_INFO.getCode())){ + WxCUserBasicInfo wxCUserBasicInfo = wxCUserBasicInfoMapper.selectById(record.getFromId(), record.getFinalTenantId()); + sheetName = "用户["+wxCUserBasicInfo.getPhone()+"]分享明细"; + }else if(record.getFromType().equals(EnumCUserFrom.FROM_MERCHANT.getCode())){ + WxMerchant wxMerchant = wxMerchantMapper.selectById(record.getFromId()); + sheetName = "门店["+wxMerchant.getName()+"]分享明细"; + } + String fileName = sheetName + ".xlsx"; + excelService.exportBigExcel(this,record, null, sheetName, WxCUserFrom.class, fileName, response, false); +// List list = wxCUserFromMapper.findList(record); +// excelService.exportExcel(list, null, "门店/用户分享记录", WxCUserFrom.class, "门店/用户分享记录.xlsx", response, false); + } + + @Override + public void exportDataVisits(HttpServletRequest request, HttpServletResponse response, WxCUserFromVo record) { + String sheetName = "门店/用户分享报表"; + if(record.getFromType().equals(EnumCUserFrom.FROM_C_USER_BASIC_INFO.getCode())){ + sheetName = "用户分享报表"; + }else if(record.getFromType().equals(EnumCUserFrom.FROM_MERCHANT.getCode())){ + sheetName = "门店分享报表"; + } + String fileName = sheetName + ".xlsx"; + excelService.exportBigExcel(this,record, null, sheetName, WxCUserFromVo.class, fileName, response, false); +// List visits = wxCUserFromMapper.visits(record); +// excelService.exportExcel(visits, null, "门店/用户分享报表", WxCUserFromVo.class, "门店/用户分享报表.xlsx", response, false); + } + + @Override + public List selectListForExcelExport(Object queryParams, int page) { + if(queryParams instanceof WxCUserFromVo){ + WxCUserFromVo record = (WxCUserFromVo) queryParams; + record.setBegin((page-1)*10000); + record.setLimit(10000); + List visits = wxCUserFromMapper.visits(record); + if (null != visits && visits.size() > 0 ) { + List retList = new ArrayList(); + retList.addAll(visits); + return retList; + } + }else if(queryParams instanceof WxCUserFrom){ + WxCUserFrom record = (WxCUserFrom) queryParams; + record.setBegin((page-1)*10000); + record.setLimit(10000); + List list = wxCUserFromMapper.findList(record); + if (null != list && list.size() > 0 ) { + List retList = new ArrayList(); + retList.addAll(list); + return retList; + } + } + return null; + } } diff --git a/mallinkService/src/main/resources/mapper/WxCUserFromMapper.xml b/mallinkService/src/main/resources/mapper/WxCUserFromMapper.xml index 09dff3005..ae1d506bd 100644 --- a/mallinkService/src/main/resources/mapper/WxCUserFromMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxCUserFromMapper.xml @@ -60,9 +60,9 @@ and wcuf.`from_id` = #{fromId} - + and wcuf.`share_user_type` = #{shareUserType} @@ -83,7 +83,7 @@ #{idItem} - order by wcuf.`create_date` desc + - + select a.from_id fromId,a.from_type fromType,a.from_name fromName,a.from_phone fromPhone,IFNULL(a.visits,0) visits,IFNULL(b.reach_user,0) reachUser,IFNULL(c.new_user,0) newUser from ( + select wcuf.from_id,wcuf.from_type, wcubi.nick_name from_name,wcubi.phone from_phone, wm.name from_name,wm.link_phone from_phone, count(*) visits @@ -180,6 +190,9 @@ group by wcuf.from_id,wcuf.c_user_id ) c on c.from_id = a.from_id order by a.visits desc + + limit #{begin}, #{limit} +