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

[标签短信][回调][发送短信时,添加回调,回调返回时,更新]

release_toaliyun_real
gongbiao 7 лет назад
Родитель
Сommit
21f5ad544c
6 измененных файлов: 135 добавлений и 48 удалений
  1. +9
    -9
      mallinkService/src/main/java/com/iformall/domain/po/WxMsg.java
  2. +41
    -7
      mallinkService/src/main/java/com/iformall/domain/po/WxMsgCallback.java
  3. +8
    -6
      mallinkService/src/main/java/com/iformall/mapper/WxMsgCallbackMapper.java
  4. +22
    -13
      mallinkService/src/main/java/com/iformall/service/impl/WxMsgCallbackServiceImpl.java
  5. +41
    -12
      mallinkService/src/main/java/com/iformall/service/impl/WxMsgServiceImpl.java
  6. +14
    -1
      mallinkService/src/main/resources/mapper/WxMsgCallbackMapper.xml

+ 9
- 9
mallinkService/src/main/java/com/iformall/domain/po/WxMsg.java Просмотреть файл

@@ -57,13 +57,13 @@ public class WxMsg implements Serializable {
private Date createtime;
/*预计发送数量**/
@io.swagger.annotations.ApiModelProperty(value="预计发送数量",name="expectSendNumber")
private String expectSendNumber;
private Integer expectSendNumber;
/*成功数量**/
@io.swagger.annotations.ApiModelProperty(value="成功数量",name="successNumber")
private String successNumber;
private Integer successNumber;
/*错误数量**/
@io.swagger.annotations.ApiModelProperty(value="错误数量",name="errorNumber")
private String errorNumber;
private Integer errorNumber;
/***/
@io.swagger.annotations.ApiModelProperty(value="",name="returnResult")
private String returnResult;
@@ -122,22 +122,22 @@ public class WxMsg implements Serializable {
public void setCreatetime(Date _createtime) {
createtime = _createtime;
}
public String getExpectSendNumber() {
public Integer getExpectSendNumber() {
return expectSendNumber;
}
public void setExpectSendNumber(String _expectSendNumber) {
public void setExpectSendNumber(Integer _expectSendNumber) {
expectSendNumber = _expectSendNumber;
}
public String getSuccessNumber() {
public Integer getSuccessNumber() {
return successNumber;
}
public void setSuccessNumber(String _successNumber) {
public void setSuccessNumber(Integer _successNumber) {
successNumber = _successNumber;
}
public String getErrorNumber() {
public Integer getErrorNumber() {
return errorNumber;
}
public void setErrorNumber(String _errorNumber) {
public void setErrorNumber(Integer _errorNumber) {
errorNumber = _errorNumber;
}
public String getReturnResult() {


+ 41
- 7
mallinkService/src/main/java/com/iformall/domain/po/WxMsgCallback.java Просмотреть файл

@@ -1,11 +1,11 @@
package com.iformall.domain.po;

import javax.persistence.*;
import java.util.*;
import javax.persistence.Transient;
import java.util.List;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Transient;
import java.io.Serializable;
import java.util.Date;
import java.util.List;

@Table(name = "wx_msg_callback")
public class WxMsgCallback implements Serializable {
@@ -37,9 +37,11 @@ public class WxMsgCallback implements Serializable {
public void setIds(List<String> ids) {
this.ids = ids;
}


@io.swagger.annotations.ApiModelProperty(value="回调ID",name="callbackId")
private Long callbackId;

/*租户id**/
@io.swagger.annotations.ApiModelProperty(value="租户id",name="tenantId")
private String tenantId;
@@ -67,6 +69,23 @@ public class WxMsgCallback implements Serializable {
/*创建时间**/
@io.swagger.annotations.ApiModelProperty(value="创建时间",name="createtime")
private Date createtime;

/*更新时间**/
@io.swagger.annotations.ApiModelProperty(value="更新时间",name="updatetime")
private Date updatetime;

/*msgId**/
@io.swagger.annotations.ApiModelProperty(value="msgId",name="msgId")
private Long msgId;

public Long getCallbackId() {
return callbackId;
}

public void setCallbackId(Long callbackId) {
this.callbackId = callbackId;
}

public String getTenantId() {
return tenantId;
}
@@ -123,6 +142,21 @@ public class WxMsgCallback implements Serializable {
}


public Date getUpdatetime() {
return updatetime;
}

public void setUpdatetime(Date updatetime) {
this.updatetime = updatetime;
}

public Long getMsgId() {
return msgId;
}

public void setMsgId(Long msgId) {
this.msgId = msgId;
}

public static enum Field
{


+ 8
- 6
mallinkService/src/main/java/com/iformall/mapper/WxMsgCallbackMapper.java Просмотреть файл

@@ -1,16 +1,18 @@
package com.iformall.mapper;

import java.util.*;
import com.iformall.common.CommonMapper;
import com.iformall.domain.po.WxMsgCallback;

import java.util.List;
import java.util.Map;

public interface WxMsgCallbackMapper extends CommonMapper<WxMsgCallback, String> {

List<WxMsgCallback> findList(WxMsgCallback wxMsgCallback);


WxMsgCallback queryCallbackByBatchNoAndPhone(WxMsgCallback wxMsgCallback);

int queryMsgSendTotal(Map<String,String> params);

}

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

@@ -1,7 +1,6 @@
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;
@@ -9,13 +8,10 @@ import com.iformall.domain.po.WxMsgCallback;
import com.iformall.domain.po.WxMsgConfig;
import com.iformall.domain.po.WxMsgModel;
import com.iformall.domain.po.WxMsgValidationcodeModel;
import com.iformall.mapper.WxMsgCallbackMapper;
import com.iformall.mapper.WxMsgConfigMapper;
import com.iformall.mapper.WxMsgModelMapper;
import com.iformall.mapper.WxMsgValidationcodeModelMapper;
import com.iformall.enums.EnumMsgStatus;
import com.iformall.mapper.*;
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;
@@ -39,6 +35,8 @@ public class WxMsgCallbackServiceImpl implements WxMsgCallbackService {
@Autowired
WxMsgValidationcodeModelMapper wxMsgValidationcodeModelMapper;

@Autowired
WxMsgMapper wxMsgMapper;

@Override
public PageInfo<WxMsgCallback> listAsPage(WxMsgCallback record, Integer pageIndex, Integer pageSize) {
@@ -91,17 +89,28 @@ public class WxMsgCallbackServiceImpl implements WxMsgCallbackService {
logger.info("短信SIGN校验成功");
wxMsgConfig.setRemains(wxMsgConfig.getRemains() - wxMsgCallbacks.size());
wxMsgConfigMapper.updateByPrimaryKeySelective(wxMsgConfig);
final IdWorker idWorker = IdWorker.get();
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 callback=wxMsgCallbackMapper.queryCallbackByBatchNoAndPhone(wxMsgCallback);
if(callback!=null){//有更新,无插入
callback.setSign(sign);
callback.setTenantId(tenantId);
callback.setStatus(wxMsgCallback.getStatus());
callback.setStatusMsg(wxMsgCallback.getStatusMsg());
callback.setBegintime(wxMsgCallback.getBegintime());
callback.setEndtime(wxMsgCallback.getEndtime());
callback.setCallbackId(wxMsgCallback.getId());
callback.setUpdatetime(new Date());
wxMsgCallbackMapper.updateByPrimaryKeySelective(callback);
}else{
Long callbackId = wxMsgCallback.getId();
wxMsgCallback.setId(idWorker.nextId());
wxMsgCallback.setCallbackId(callbackId);
wxMsgCallback.setTenantId(tenantId);
wxMsgCallback.setStatus(EnumMsgStatus.MSG_SEND_FAIL.getCode());
wxMsgCallback.setCreatetime(new Date());
wxMsgCallbackMapper.insertSelective(wxMsgCallback);
}

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


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

@@ -50,12 +50,38 @@ public class WxMsgServiceImpl implements WxMsgService {

@Override
public PageInfo<WxMsg> listAsPage(WxMsg record, Integer pageIndex, Integer pageSize) {
return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxMsgMapper.findList(record));
PageHelper.startPage(pageIndex, pageSize);
List<WxMsg> templist = wxMsgMapper.findList(record);
for(WxMsg temp:templist){

Map<String,String> params=new HashMap<>();
params.put("msgId",temp.getId().toString());
params.put("status","1");
int success=wxMsgCallbackMapper.queryMsgSendTotal(params);
params.put("status","0");
int error=wxMsgCallbackMapper.queryMsgSendTotal(params);
temp.setSuccessNumber(success);
temp.setErrorNumber(error);
}

PageInfo<WxMsg> pageInfo = new PageInfo<>(templist);
return pageInfo;
}

@Override
public WxMsg getById(Long id) {
return wxMsgMapper.selectByPrimaryKey(id);

WxMsg wxMsg = wxMsgMapper.selectByPrimaryKey(id);
Map<String,String> params=new HashMap<>();
params.put("msgId",wxMsg.getId().toString());
params.put("status","1");
int success=wxMsgCallbackMapper.queryMsgSendTotal(params);
params.put("status","0");
int error=wxMsgCallbackMapper.queryMsgSendTotal(params);
wxMsg.setSuccessNumber(success);
wxMsg.setErrorNumber(error);

return wxMsg;
}

@Override
@@ -82,6 +108,7 @@ public class WxMsgServiceImpl implements WxMsgService {
for(String phone:phoneSplit){
phoneSet.add(phone);
}
wxMsg.setExpectSendNumber(phoneSet.size());//预计发送数量
StringBuffer sb=new StringBuffer();
for(String phone:phoneSet){
sb.append(phone).append(",");
@@ -155,11 +182,6 @@ public class WxMsgServiceImpl implements WxMsgService {
return "";
}

private String parseexcle(String tenantId, WxMsg excelpath) {

return null;
}

@Override
public void deleteById(Long id) {
wxMsgMapper.deleteByPrimaryKey(id);
@@ -167,6 +189,7 @@ public class WxMsgServiceImpl implements WxMsgService {


public ResultData sendmsg(WxMsg wxMsg) {
logger.info("发送短信开始...");
//从短信配置中查询密钥 bid 等信息
WxMsgConfig wxMsgConfig = new WxMsgConfig();
wxMsgConfig.setTenantId(wxMsg.getTenantId());
@@ -218,7 +241,7 @@ public class WxMsgServiceImpl implements WxMsgService {
String result = HttpUtil.doPost(requestUrl, params);
JSONObject jsonObjectResult = JSONObject.parseObject(result);
String ret = jsonObjectResult.get("ret").toString();
String batchNo = jsonObjectResult.get("data").toString();
if (ret.equals("1")) {
wxMsg.setSendstatus(EnumMsgStatus.MSG_SEND_SUCCESS.getCode());
} else {
@@ -234,7 +257,9 @@ public class WxMsgServiceImpl implements WxMsgService {
wxMsgMapper.updateByPrimaryKeySelective(wxMsg);
}

logger.info("发送短信结束...");
if (ret.equals("1")) {
addMsgCallback(wxMsg,batchNo);
return new ResultData(Result.SUCCESS, "短信发送中,您可在短信明细中查看发送状态");
} else {
return new ResultData(ErrorCode.MSG_SEND_ERROR.getCode(), "短信发送发败");
@@ -243,8 +268,8 @@ public class WxMsgServiceImpl implements WxMsgService {
}


public void addMsgCallback(WxMsg wxmsg){
public void addMsgCallback(WxMsg wxmsg, String batchNo){
logger.info("发送时主动添加回调记录开始...");
String phones = wxmsg.getPhones();
String[] split = phones.split(",");
final IdWorker idWorker = IdWorker.get();
@@ -252,10 +277,14 @@ public class WxMsgServiceImpl implements WxMsgService {
WxMsgCallback wxMsgCallback = new WxMsgCallback();
wxMsgCallback.setId(idWorker.nextId());
wxMsgCallback.setPhone(phone);
//批次号或任务ID
wxMsgCallback.setTenantId(wxmsg.getTenantId());
wxMsgCallback.setBatchNo(batchNo);
wxMsgCallback.setMsgId(wxmsg.getId());
wxMsgCallback.setStatus(EnumMsgStatus.MSG_SEND_FAIL.getCode());
wxMsgCallback.setCreatetime(new Date());
wxMsgCallbackMapper.insertSelective(wxMsgCallback);
}

logger.info("发送时主动添加回调记录结束...");

}



+ 14
- 1
mallinkService/src/main/resources/mapper/WxMsgCallbackMapper.xml Просмотреть файл

@@ -12,10 +12,14 @@
<result column="status_msg" jdbcType="VARCHAR" property="statusMsg" />
<result column="sign" jdbcType="VARCHAR" property="sign" />
<result column="createtime" jdbcType="TIMESTAMP" property="createtime" />
<result column="updatetime" jdbcType="TIMESTAMP" property="updatetime" />
<result column="callback_id" jdbcType="BIGINT" property="callbackId" />
<result column="msg_id" jdbcType="BIGINT" property="msgId" />
</resultMap>
<sql id="allColumns">
`id`,`tenant_id`,`batch_no`,`phone`,`begintime`,`endtime`,`status`,`status_msg`,`sign`,`createtime`
`id`,`tenant_id`,`batch_no`,`phone`,`begintime`,`endtime`,`status`,`status_msg`,`sign`,`createtime`,`updatetime`,`msg_id`,`callback_id`
</sql>

<sql id="dynamicWhereConditions">
@@ -85,7 +89,16 @@
</select>
<select id="queryCallbackByBatchNoAndPhone" parameterType="com.iformall.domain.po.WxMsgCallback">
select * from wx_msg_callback where batch_no=#{batchNo} and phone=#{phone}
</select>
<select id="queryMsgSendTotal" parameterType="hashmap" resultType="int">
select count(*) from wx_msg_callback where msg_id=#{msgId} and status=#{status}
</select>


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