Просмотр исходного кода

[标签短信][回调][回调时判断ID是否存在,存在更新,不存在插入]

release_toaliyun_real
gongbiao 7 лет назад
Родитель
Сommit
d5f64b475f
3 измененных файлов: 114 добавлений и 35 удалений
  1. +1
    -1
      mallinkService/src/main/java/com/iformall/common/ErrorCode.java
  2. +60
    -12
      mallinkService/src/main/java/com/iformall/service/impl/WxMsgCallbackServiceImpl.java
  3. +53
    -22
      mallinkService/src/main/java/com/iformall/service/impl/WxMsgServiceImpl.java

+ 1
- 1
mallinkService/src/main/java/com/iformall/common/ErrorCode.java Просмотреть файл

@@ -207,7 +207,7 @@ public enum ErrorCode{
MSG_SEND_ERROR(12107,"发送短信失败"),
MSG_METHOD_REQUEST_ERROR(12108,"接口请求错误"),
MSG_PHONE_NOT_FOUND(12109,"请输入手机号"),
MSG_SEND_WAY_CHOOSE_ERROR(12110,"请确定发送的方式"),

/**
* 会员


+ 60
- 12
mallinkService/src/main/java/com/iformall/service/impl/WxMsgCallbackServiceImpl.java Просмотреть файл

@@ -1,6 +1,7 @@
package com.iformall.service.impl;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.iformall.common.IdWorker;
@@ -13,20 +14,20 @@ import com.iformall.mapper.WxMsgConfigMapper;
import com.iformall.mapper.WxMsgModelMapper;
import com.iformall.mapper.WxMsgValidationcodeModelMapper;
import com.iformall.service.WxMsgCallbackService;
import com.iformall.utils.HMACSHA256;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.*;

@Service
public class WxMsgCallbackServiceImpl implements WxMsgCallbackService {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Autowired
@Autowired
WxMsgCallbackMapper wxMsgCallbackMapper;

@Autowired
@@ -68,19 +69,45 @@ public class WxMsgCallbackServiceImpl implements WxMsgCallbackService {
@Override
public void saveOrUpdate(String tenantId, String item, String sign) {



WxMsgConfig wxMsgConfig = new WxMsgConfig();
wxMsgConfig.setTenantId(tenantId);
List<WxMsgConfig> list = wxMsgConfigMapper.findList(wxMsgConfig);
List<WxMsgCallback> wxMsgCallbacks = JSONArray.parseArray(item, WxMsgCallback.class);
wxMsgConfig = list.get(0);
wxMsgConfig.setRemains(wxMsgConfig.getRemains() - wxMsgCallbacks.size());
wxMsgConfigMapper.updateByPrimaryKeySelective(wxMsgConfig);
for (WxMsgCallback wxMsgCallback : wxMsgCallbacks) {
wxMsgCallback.setTenantId(wxMsgConfig.getTenantId());
wxMsgCallback.setSign(sign);
wxMsgCallback.setCreatetime(new Date());
wxMsgCallbackMapper.insertSelective(wxMsgCallback);

TreeMap<String, String> message = new TreeMap<>();
message.put("item","Array");

StringBuilder sb = new StringBuilder();
Set<Map.Entry<String, String>> entries = message.entrySet();
for (Map.Entry<String, String> entry : entries) {
sb.append(entry.getKey()).append("=").append(entry.getValue());
}
sb.append("&secret=").append(wxMsgConfig.getSecret());
String sign_check = HMACSHA256.sha256_HMAC(sb.toString(), wxMsgConfig.getSecret());
if(sign_check.equalsIgnoreCase(sign)){
logger.info("短信SIGN校验成功");
wxMsgConfig.setRemains(wxMsgConfig.getRemains() - wxMsgCallbacks.size());
wxMsgConfigMapper.updateByPrimaryKeySelective(wxMsgConfig);
for (WxMsgCallback wxMsgCallback : wxMsgCallbacks) {
WxMsgCallback callback = wxMsgCallbackMapper.selectByPrimaryKey(wxMsgCallback.getId());
if(callback!=null){//有更新
wxMsgCallbackMapper.updateByPrimaryKeySelective(wxMsgCallback);
}else{//无插入
wxMsgCallback.setTenantId(wxMsgConfig.getTenantId());
wxMsgCallback.setSign(sign);
wxMsgCallback.setCreatetime(new Date());
wxMsgCallbackMapper.insertSelective(wxMsgCallback);
}

}
}else{
logger.info("短信SIGN校验失败");
}



}

@@ -111,4 +138,25 @@ public class WxMsgCallbackServiceImpl implements WxMsgCallbackService {
}


public static void main(String ...args){
TreeMap<String, String> message = new TreeMap<>();
String data="{\"ret\":\"1\",\"msg\":\"success\",\"data\":{\"data\":[{\"id\":\"50\",\"sign\":\"\\u8fc8\\u5927\\u4e8b\",\"msg\":\"\\u540c\\u5fd7\\u4eec\\uff0c\\u4eca\\u5929\\u6d4b\\u8bd5\\u90e8\\u95e8\\u6210\\u7acb\\u4e86\",\"begintime\":\"1532014609\",\"status\":\"1\"}],\"total\":\"8\"},\"sign\":\"D2D5F4FC4640B5492754031F04264A982F9C9CD8EF54AED7EA3D699FD9E31170\"}";
JSONObject jsonObject = JSONObject.parseObject(data);

message.put("data","Array");
message.put("msg","success");
message.put("ret","1");

StringBuilder sb = new StringBuilder();
Set<Map.Entry<String, String>> entries = message.entrySet();
for (Map.Entry<String, String> entry : entries) {
sb.append(entry.getKey()).append("=").append(entry.getValue());
}
sb.append("&secret=").append("7ea1d237eab458a8bec36aa8dd4892bb");
String sign_check = HMACSHA256.sha256_HMAC(sb.toString(), "7ea1d237eab458a8bec36aa8dd4892bb");
System.out.println();
}



}

+ 53
- 22
mallinkService/src/main/java/com/iformall/service/impl/WxMsgServiceImpl.java Просмотреть файл

@@ -1,6 +1,5 @@
package com.iformall.service.impl;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
@@ -8,13 +7,15 @@ import com.iformall.common.ErrorCode;
import com.iformall.common.IdWorker;
import com.iformall.common.Result;
import com.iformall.common.ResultData;
import com.iformall.domain.po.WxCUser;
import com.iformall.domain.po.WxCUserBasicInfo;
import com.iformall.domain.po.WxMsg;
import com.iformall.domain.po.WxMsgCallback;
import com.iformall.domain.po.WxMsgConfig;
import com.iformall.enums.EnumMsgStatus;
import com.iformall.mapper.*;
import com.iformall.service.WxCUserService;
import com.iformall.mapper.WxCUserBasicInfoMapper;
import com.iformall.mapper.WxMsgCallbackMapper;
import com.iformall.mapper.WxMsgConfigMapper;
import com.iformall.mapper.WxMsgMapper;
import com.iformall.service.WxCUserTagsService;
import com.iformall.service.WxMsgService;
import com.iformall.utils.AesUtil;
@@ -26,7 +27,6 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.beans.Encoder;
import java.util.*;

@Service
@@ -45,6 +45,9 @@ public class WxMsgServiceImpl implements WxMsgService {
@Autowired
WxCUserBasicInfoMapper wxCUserBasicInfoMapper;

@Autowired
WxMsgCallbackMapper wxMsgCallbackMapper;

@Override
public PageInfo<WxMsg> listAsPage(WxMsg record, Integer pageIndex, Integer pageSize) {
return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxMsgMapper.findList(record));
@@ -58,24 +61,34 @@ public class WxMsgServiceImpl implements WxMsgService {
@Override
public ResultData saveOrUpdate(WxMsg wxMsg) {

//3种方式得到手机号,三种只能有一种
//1通过excel
//2手机多条以逗号分隔,直接通过实体得到wxmsg.getphones
//3通过标签
//1、手机多条以逗号分隔,直接通过实体得到wxmsg.getphones
//2、通过标签
String phones=wxMsg.getPhones();
if(phones.equals("")){
if(null!=wxMsg.getExcelpath() && !wxMsg.getExcelpath().equals(""))
phones=parseexcle(wxMsg.getTenantId(), wxMsg.getExcelpath());
else
phones=parselabel(wxMsg.getTenantId(), wxMsg.getLabel());
String label = wxMsg.getLabel();
if(!phones.equals("") && !label.equals("")){//两种方式只能选其一
return new ResultData(ErrorCode.MSG_SEND_WAY_CHOOSE_ERROR);
}

if(phones.equals("")){
return new ResultData(ErrorCode.MSG_PHONE_NOT_FOUND, "请输入手机号");
} else {
wxMsg.setPhones(phones);
if(phones.equals("")){//没有手工输入手机号时解析标签,有,继续流转
phones=parselabel(wxMsg.getTenantId(), wxMsg);
if(phones.equals("")){//解析之后手机号依然不存在时返回
return new ResultData(ErrorCode.MSG_PHONE_NOT_FOUND);
}
}

//保证手机号惟一
String[] phoneSplit = phones.split(",");
Set<String> phoneSet=new HashSet<>();
for(String phone:phoneSplit){
phoneSet.add(phone);
}
StringBuffer sb=new StringBuffer();
for(String phone:phoneSet){
sb.append(phone).append(",");
}
wxMsg.setPhones(sb.toString());

//新增记录
if (wxMsg.getId() == null) {
//草稿
if (wxMsg.getStatus() == 2) {
@@ -116,8 +129,6 @@ public class WxMsgServiceImpl implements WxMsgService {
wxMsg.setStatus(EnumMsgStatus.MSG_STATUS_NOT_SEND.getCode());
wxMsgMapper.updateByPrimaryKeySelective(wxMsg);
return new ResultData(Result.SUCCESS, "短信会在预设时间发送");


}

}
@@ -125,7 +136,8 @@ public class WxMsgServiceImpl implements WxMsgService {
return new ResultData();
}

private String parselabel(String tenantId, String label) {
private String parselabel(String tenantId, WxMsg wxmsg) {
String label = wxmsg.getLabel();
String[] arys = label.split(",");
List<Long> tagids = new ArrayList<>();
for (int i = 0; i < arys.length; i++) {
@@ -143,7 +155,7 @@ public class WxMsgServiceImpl implements WxMsgService {
return "";
}

private String parseexcle(String tenantId, String excelpath) {
private String parseexcle(String tenantId, WxMsg excelpath) {

return null;
}
@@ -230,4 +242,23 @@ public class WxMsgServiceImpl implements WxMsgService {

}


public void addMsgCallback(WxMsg wxmsg){

String phones = wxmsg.getPhones();
String[] split = phones.split(",");
final IdWorker idWorker = IdWorker.get();
for(String phone:split){
WxMsgCallback wxMsgCallback = new WxMsgCallback();
wxMsgCallback.setId(idWorker.nextId());
wxMsgCallback.setPhone(phone);
//批次号或任务ID
wxMsgCallbackMapper.insertSelective(wxMsgCallback);
}


}



}

Загрузка…
Отмена
Сохранить