添加动态微信好提取接口

This commit is contained in:
huangdeliang 2021-04-21 16:40:17 +08:00
parent 181c3f57c9
commit b11114a775
13 changed files with 231 additions and 126 deletions

View File

@ -2,18 +2,22 @@ package com.stdiet.web.controller.custom;
import com.stdiet.common.core.controller.BaseController;
import com.stdiet.common.core.domain.AjaxResult;
import com.stdiet.common.utils.DateUtils;
import com.stdiet.custom.domain.SysOrderPause;
import com.stdiet.custom.domain.SysWxAdLog;
import com.stdiet.custom.service.ISysOrderPauseService;
import com.stdiet.custom.service.ISysRecipesService;
import com.stdiet.custom.service.ISysWapServices;
import com.stdiet.custom.service.ISysWxSaleAccountService;
import com.stdiet.custom.utils.HttpRequestUtils;
import com.stdiet.system.service.ISysDictTypeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping("/wap")
@ -30,6 +34,9 @@ public class SysWapController extends BaseController {
@Autowired
ISysOrderPauseService iSysOrderPauseService;
@Autowired
ISysWxSaleAccountService iSysWxSaleAccountService;
/**
* 客户食谱详情
*
@ -100,4 +107,36 @@ public class SysWapController extends BaseController {
// public void qrcodeRediredt(String group, HttpServletRequest request, HttpServletResponse response) throws IOException {
// response.sendRedirect("https://weibo.com/u/1913360251");
// }
@GetMapping(value = "/wxid")
public AjaxResult getWxId(@RequestParam String cid, @RequestParam String uid, @RequestHeader("User-Agent") String userAgent, HttpServletRequest request) {
SysWxAdLog sysWxAdLog = new SysWxAdLog();
sysWxAdLog.setUserId(uid);
sysWxAdLog.setIp(HttpRequestUtils.getIpAddr(request));
sysWxAdLog.setChannelId(cid);
sysWxAdLog.setUserAgent(userAgent);
sysWxAdLog.setType(0);
sysWxAdLog.setDate(DateUtils.getNowDate());
Map<String, String> result = new HashMap<>();
String wxId = iSysWxSaleAccountService.getWxAdId(sysWxAdLog);
result.put("id", wxId);
return AjaxResult.success(result);
}
@GetMapping(value = "/wxid/st")
public AjaxResult logActived(@RequestParam String cid, @RequestParam String uid, @RequestParam String wxid, @RequestHeader("User-Agent") String userAgent, HttpServletRequest request) {
SysWxAdLog sysWxAdLog = new SysWxAdLog();
sysWxAdLog.setUserId(uid);
sysWxAdLog.setIp(HttpRequestUtils.getIpAddr(request));
sysWxAdLog.setWxId(wxid);
sysWxAdLog.setChannelId(cid);
sysWxAdLog.setUserAgent(userAgent);
sysWxAdLog.setType(1);
sysWxAdLog.setDate(DateUtils.getNowDate());
return toAjax(iSysWxSaleAccountService.logWxAd(sysWxAdLog));
}
}

View File

@ -0,0 +1,23 @@
package com.stdiet.custom.domain;
import lombok.Data;
import java.util.Date;
@Data
public class SysWxAdLog {
private String userId;
private String ip;
private String userAgent;
private String channelId;
private String wxId;
private Integer type;
private Date date;
}

View File

@ -1,5 +1,6 @@
package com.stdiet.custom.domain;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.stdiet.common.annotation.Excel;
@ -11,6 +12,7 @@ import com.stdiet.common.core.domain.BaseEntity;
* @author xiezhijun
* @date 2021-02-03
*/
@Data
public class SysWxSaleAccount extends BaseEntity
{
private static final long serialVersionUID = 1L;
@ -39,85 +41,7 @@ public class SysWxSaleAccount extends BaseEntity
/** 删除标识 0未删除 1已删除默认0 */
private Integer delFlag;
public void setId(Long id)
{
this.id = id;
}
private Integer status;
public Long getId()
{
return id;
}
public void setWxNickName(String wxNickName)
{
this.wxNickName = wxNickName;
}
public String getWxNickName()
{
return wxNickName;
}
public void setWxAccount(String wxAccount)
{
this.wxAccount = wxAccount;
}
public String getWxAccount()
{
return wxAccount;
}
public void setWxPhone(String wxPhone)
{
this.wxPhone = wxPhone;
}
public String getWxPhone()
{
return wxPhone;
}
public void setWxCodeUrl(String wxCodeUrl)
{
this.wxCodeUrl = wxCodeUrl;
}
public String getWxCodeUrl()
{
return wxCodeUrl;
}
public void setWxType(Integer wxType)
{
this.wxType = wxType;
}
public Integer getWxType()
{
return wxType;
}
public void setDelFlag(Integer delFlag)
{
this.delFlag = delFlag;
}
public Integer getDelFlag()
{
return delFlag;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("id", getId())
.append("wxNickName", getWxNickName())
.append("wxAccount", getWxAccount())
.append("wxPhone", getWxPhone())
.append("wxCodeUrl", getWxCodeUrl())
.append("remark", getRemark())
.append("wxType", getWxType())
.append("createTime", getCreateTime())
.append("createBy", getCreateBy())
.append("updateTime", getUpdateTime())
.append("updateBy", getUpdateBy())
.append("delFlag", getDelFlag())
.toString();
}
private Integer useCount;
}

View File

@ -1,6 +1,8 @@
package com.stdiet.custom.mapper;
import java.util.List;
import com.stdiet.custom.domain.SysWxAdLog;
import com.stdiet.custom.domain.SysWxDistribution;
import org.apache.ibatis.annotations.Param;
@ -73,4 +75,5 @@ public interface SysWxDistributionMapper
* @return
*/
List<SysWxDistribution> selectDistributionWxByUserId(@Param("userId")Long userId);
}

View File

@ -1,6 +1,8 @@
package com.stdiet.custom.mapper;
import java.util.List;
import com.stdiet.custom.domain.SysWxAdLog;
import com.stdiet.custom.domain.SysWxSaleAccount;
/**
@ -65,4 +67,8 @@ public interface SysWxSaleAccountMapper
* @return
*/
SysWxSaleAccount selectWxAccountByAccountOrPhone(SysWxSaleAccount sysWxSaleAccount);
SysWxSaleAccount selectWxAdId();
int insertWxAdLog(SysWxAdLog sysWxAdLog);
}

View File

@ -1,6 +1,8 @@
package com.stdiet.custom.service;
import java.util.List;
import com.stdiet.custom.domain.SysWxAdLog;
import com.stdiet.custom.domain.SysWxDistribution;
/**
@ -72,4 +74,5 @@ public interface ISysWxDistributionService
* @return
*/
List<SysWxDistribution> selectDistributionWxByUserId(Long userId);
}

View File

@ -1,6 +1,8 @@
package com.stdiet.custom.service;
import java.util.List;
import com.stdiet.custom.domain.SysWxAdLog;
import com.stdiet.custom.domain.SysWxSaleAccount;
/**
@ -66,4 +68,8 @@ public interface ISysWxSaleAccountService
* @return
*/
SysWxSaleAccount selectWxAccountByAccountOrPhone(String accountOrPhone, int type);
String getWxAdId(SysWxAdLog sysWxAdLog);
Integer logWxAd(SysWxAdLog sysWxAdLog);
}

View File

@ -2,6 +2,7 @@ package com.stdiet.custom.service.impl;
import java.util.List;
import com.stdiet.common.utils.DateUtils;
import com.stdiet.custom.domain.SysWxAdLog;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.stdiet.custom.mapper.SysWxDistributionMapper;
@ -112,4 +113,5 @@ public class SysWxDistributionServiceImpl implements ISysWxDistributionService
public List<SysWxDistribution> selectDistributionWxByUserId(Long userId){
return sysWxDistributionMapper.selectDistributionWxByUserId(userId);
}
}

View File

@ -1,13 +1,15 @@
package com.stdiet.custom.service.impl;
import java.util.List;
import com.stdiet.common.utils.DateUtils;
import com.stdiet.common.utils.StringUtils;
import com.stdiet.custom.domain.SysWxAdLog;
import com.stdiet.custom.domain.SysWxSaleAccount;
import com.stdiet.custom.mapper.SysWxSaleAccountMapper;
import com.stdiet.custom.service.ISysWxSaleAccountService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.stdiet.custom.mapper.SysWxSaleAccountMapper;
import com.stdiet.custom.domain.SysWxSaleAccount;
import com.stdiet.custom.service.ISysWxSaleAccountService;
import java.util.List;
/**
* 微信账号Service业务层处理
@ -16,8 +18,7 @@ import com.stdiet.custom.service.ISysWxSaleAccountService;
* @date 2021-02-03
*/
@Service
public class SysWxSaleAccountServiceImpl implements ISysWxSaleAccountService
{
public class SysWxSaleAccountServiceImpl implements ISysWxSaleAccountService {
@Autowired
private SysWxSaleAccountMapper sysWxSaleAccountMapper;
@ -28,8 +29,7 @@ public class SysWxSaleAccountServiceImpl implements ISysWxSaleAccountService
* @return 微信账号
*/
@Override
public SysWxSaleAccount selectSysWxSaleAccountById(Long id)
{
public SysWxSaleAccount selectSysWxSaleAccountById(Long id) {
return sysWxSaleAccountMapper.selectSysWxSaleAccountById(id);
}
@ -40,8 +40,7 @@ public class SysWxSaleAccountServiceImpl implements ISysWxSaleAccountService
* @return 微信账号
*/
@Override
public List<SysWxSaleAccount> selectSysWxSaleAccountList(SysWxSaleAccount sysWxSaleAccount)
{
public List<SysWxSaleAccount> selectSysWxSaleAccountList(SysWxSaleAccount sysWxSaleAccount) {
return sysWxSaleAccountMapper.selectSysWxSaleAccountList(sysWxSaleAccount);
}
@ -52,8 +51,7 @@ public class SysWxSaleAccountServiceImpl implements ISysWxSaleAccountService
* @return 结果
*/
@Override
public int insertSysWxSaleAccount(SysWxSaleAccount sysWxSaleAccount)
{
public int insertSysWxSaleAccount(SysWxSaleAccount sysWxSaleAccount) {
sysWxSaleAccount.setCreateTime(DateUtils.getNowDate());
return sysWxSaleAccountMapper.insertSysWxSaleAccount(sysWxSaleAccount);
}
@ -65,8 +63,7 @@ public class SysWxSaleAccountServiceImpl implements ISysWxSaleAccountService
* @return 结果
*/
@Override
public int updateSysWxSaleAccount(SysWxSaleAccount sysWxSaleAccount)
{
public int updateSysWxSaleAccount(SysWxSaleAccount sysWxSaleAccount) {
sysWxSaleAccount.setUpdateTime(DateUtils.getNowDate());
return sysWxSaleAccountMapper.updateSysWxSaleAccount(sysWxSaleAccount);
}
@ -78,8 +75,7 @@ public class SysWxSaleAccountServiceImpl implements ISysWxSaleAccountService
* @return 结果
*/
@Override
public int deleteSysWxSaleAccountByIds(Long[] ids)
{
public int deleteSysWxSaleAccountByIds(Long[] ids) {
return sysWxSaleAccountMapper.deleteSysWxSaleAccountByIds(ids);
}
@ -90,13 +86,13 @@ public class SysWxSaleAccountServiceImpl implements ISysWxSaleAccountService
* @return 结果
*/
@Override
public int deleteSysWxSaleAccountById(Long id)
{
public int deleteSysWxSaleAccountById(Long id) {
return sysWxSaleAccountMapper.deleteSysWxSaleAccountById(id);
}
/**
* 根据微信号或手机号查询是否已存在
*
* @param accountOrPhone 手机号或微信号
* @param type 0微信号 1手机号
* @return
@ -111,4 +107,25 @@ public class SysWxSaleAccountServiceImpl implements ISysWxSaleAccountService
}
return sysWxSaleAccountMapper.selectWxAccountByAccountOrPhone(param);
}
@Override
public String getWxAdId(SysWxAdLog sysWxAdLog) {
SysWxSaleAccount sysWxSaleAccount = sysWxSaleAccountMapper.selectWxAdId();
if (StringUtils.isNotNull(sysWxSaleAccount)) {
sysWxSaleAccount.setUseCount(sysWxSaleAccount.getUseCount() + 1);
int rows = sysWxSaleAccountMapper.updateSysWxSaleAccount(sysWxSaleAccount);
if (rows > 0) {
String wxId = sysWxSaleAccount.getWxAccount();
sysWxAdLog.setWxId(wxId);
logWxAd(sysWxAdLog);
return wxId;
}
}
return null;
}
@Override
public Integer logWxAd(SysWxAdLog sysWxAdLog) {
return sysWxSaleAccountMapper.insertWxAdLog(sysWxAdLog);
}
}

View File

@ -0,0 +1,47 @@
package com.stdiet.custom.utils;
import javax.servlet.http.HttpServletRequest;
import java.net.InetAddress;
import java.net.UnknownHostException;
public class HttpRequestUtils {
public static String getIpAddr(HttpServletRequest request) {
String ipAddress = null;
try {
ipAddress = request.getHeader("x-forwarded-for");
if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
ipAddress = request.getHeader("Proxy-Client-IP");
}
if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
ipAddress = request.getHeader("WL-Proxy-Client-IP");
}
if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
ipAddress = request.getRemoteAddr();
if (ipAddress.equals("127.0.0.1")) {
// 根据网卡取本机配置的IP
InetAddress inet = null;
try {
inet = InetAddress.getLocalHost();
} catch (UnknownHostException e) {
e.printStackTrace();
}
ipAddress = inet.getHostAddress();
}
}
// 对于通过多个代理的情况第一个IP为客户端真实IP,多个IP按照','分割
if (ipAddress != null && ipAddress.length() > 15) { // "***.***.***.***".length()
// = 15
if (ipAddress.indexOf(",") > 0) {
ipAddress = ipAddress.substring(0, ipAddress.indexOf(","));
}
}
} catch (Exception e) {
ipAddress = "";
}
// ipAddress = this.getRequest().getRemoteAddr();
return ipAddress;
}
}

View File

@ -123,4 +123,5 @@
lEFT JOIN sys_wx_sale_account swsa ON swsa.id = swd.wechat_account and swsa.del_flag = 0
where swd.del_flag = 0 and swd.user_id = #{userId} order by swd.id asc
</select>
</mapper>

View File

@ -58,7 +58,8 @@
</select>
<select id="exportStatisticsList" parameterType="SysWxFanStatistics" resultMap="SysWxFanStatisticsResult">
SELECT sale_group_id, su.nick_name AS user_name, cn.dict_label AS account, wsa.wx_account, wsa.wx_phone, IF(ISNULL(wfs.fan_num),0,wfs.fan_num) AS fan_num FROM sys_wx_distribution wd
SELECT sale_group_id, su.nick_name AS user_name, cn.dict_label AS account, wsa.wx_account, wsa.wx_phone, IF(ISNULL(wfs.fan_num),0,wfs.fan_num) AS fan_num
FROM sys_wx_distribution wd
LEFT JOIN (
SELECT wx_id, fan_num FROM sys_wx_fan_statistics
<if test="fanStartTime != null and fanEndTime != null">
@ -68,6 +69,7 @@
LEFT JOIN (SELECT id, wx_account, wx_phone FROM sys_wx_sale_account) AS wsa ON wd.wechat_account = wsa.id
LEFT JOIN (SELECT dict_label, dict_value FROM sys_dict_data WHERE dict_type = 'fan_channel') AS cn ON cn.dict_value = wd.account_id
LEFT JOIN sys_user AS su ON su.user_id = wd.user_id
WHERE wd.del_flag = 0
ORDER BY wd.sale_group_id, wd.user_id ASC
</select>

View File

@ -17,6 +17,8 @@
<result property="updateTime" column="update_time"/>
<result property="updateBy" column="update_by"/>
<result property="delFlag" column="del_flag"/>
<result property="status" column="status"/>
<result property="useCount" column="use_count"/>
</resultMap>
<sql id="selectSysWxSaleAccountVo">
@ -24,7 +26,8 @@
</sql>
<select id="selectSysWxSaleAccountList" parameterType="SysWxSaleAccount" resultMap="SysWxSaleAccountResult">
<include refid="selectSysWxSaleAccountVo"/> where del_flag = 0
<include refid="selectSysWxSaleAccountVo"/>
where del_flag = 0
<if test="wxNickName != null and wxNickName != ''">and wx_nick_name like concat('%', #{wxNickName}, '%')</if>
<if test="wxAccount != null and wxAccount != ''">and wx_account like concat('%', #{wxAccount}, '%')</if>
<if test="wxPhone != null and wxPhone != ''">and wx_phone like concat('%', #{wxPhone}, '%')</if>
@ -80,6 +83,8 @@
<if test="updateTime != null">update_time = #{updateTime},</if>
<if test="updateBy != null">update_by = #{updateBy},</if>
<if test="delFlag != null">del_flag = #{delFlag},</if>
<if test="status != null">status = #{status},</if>
<if test="useCount != null">use_count = #{useCount},</if>
</trim>
where id = #{id}
</update>
@ -96,10 +101,37 @@
</update>
<select id="selectWxAccountByAccountOrPhone" parameterType="SysWxSaleAccount" resultMap="SysWxSaleAccountResult">
<include refid="selectSysWxSaleAccountVo"/> where del_flag = 0
<include refid="selectSysWxSaleAccountVo"/>
where del_flag = 0
<if test="wxAccount != null and wxAccount != ''">and wx_account = #{wxAccount}</if>
<if test="wxPhone != null and wxPhone != ''">and wx_phone = #{wxPhone}</if>
limit 1
</select>
<select id="selectWxAdId" resultType="String" parameterType="SysWxSaleAccount" resultMap="SysWxSaleAccountResult">
SELECT * FROM sys_wx_sale_account WHERE status = 0 ORDER BY use_count ASC LIMIT 1
</select>
<insert id="insertWxAdLog" parameterType="SysWxAdLog" useGeneratedKeys="true" keyProperty="id">
insert into sys_wx_ad_logs
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="userId != null">user_id,</if>
<if test="ip != null">ip,</if>
<if test="userAgent != null">user_agent,</if>
<if test="channelId != null">channel_id,</if>
<if test="wxId != null">wx_id,</if>
<if test="type != null">type,</if>
<if test="date != null">date,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="userId != null">#{userId},</if>
<if test="ip != null">#{ip},</if>
<if test="userAgent != null">#{userAgent},</if>
<if test="channelId != null">#{channelId},</if>
<if test="wxId != null">#{wxId},</if>
<if test="type != null">#{type},</if>
<if test="date != null">#{date},</if>
</trim>
</insert>
</mapper>