Преглед изворни кода

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

release_toaliyun_real
gongbiao пре 7 година
родитељ
комит
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; private Date createtime;
/*预计发送数量**/ /*预计发送数量**/
@io.swagger.annotations.ApiModelProperty(value="预计发送数量",name="expectSendNumber") @io.swagger.annotations.ApiModelProperty(value="预计发送数量",name="expectSendNumber")
private String expectSendNumber;
private Integer expectSendNumber;
/*成功数量**/ /*成功数量**/
@io.swagger.annotations.ApiModelProperty(value="成功数量",name="successNumber") @io.swagger.annotations.ApiModelProperty(value="成功数量",name="successNumber")
private String successNumber;
private Integer successNumber;
/*错误数量**/ /*错误数量**/
@io.swagger.annotations.ApiModelProperty(value="错误数量",name="errorNumber") @io.swagger.annotations.ApiModelProperty(value="错误数量",name="errorNumber")
private String errorNumber;
private Integer errorNumber;
/***/ /***/
@io.swagger.annotations.ApiModelProperty(value="",name="returnResult") @io.swagger.annotations.ApiModelProperty(value="",name="returnResult")
private String returnResult; private String returnResult;
@@ -122,22 +122,22 @@ public class WxMsg implements Serializable {
public void setCreatetime(Date _createtime) { public void setCreatetime(Date _createtime) {
createtime = _createtime; createtime = _createtime;
} }
public String getExpectSendNumber() {
public Integer getExpectSendNumber() {
return expectSendNumber; return expectSendNumber;
} }
public void setExpectSendNumber(String _expectSendNumber) {
public void setExpectSendNumber(Integer _expectSendNumber) {
expectSendNumber = _expectSendNumber; expectSendNumber = _expectSendNumber;
} }
public String getSuccessNumber() {
public Integer getSuccessNumber() {
return successNumber; return successNumber;
} }
public void setSuccessNumber(String _successNumber) {
public void setSuccessNumber(Integer _successNumber) {
successNumber = _successNumber; successNumber = _successNumber;
} }
public String getErrorNumber() {
public Integer getErrorNumber() {
return errorNumber; return errorNumber;
} }
public void setErrorNumber(String _errorNumber) {
public void setErrorNumber(Integer _errorNumber) {
errorNumber = _errorNumber; errorNumber = _errorNumber;
} }
public String getReturnResult() { public String getReturnResult() {


+ 41
- 7
mallinkService/src/main/java/com/iformall/domain/po/WxMsgCallback.java Прегледај датотеку

@@ -1,11 +1,11 @@
package com.iformall.domain.po; 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.Id;
import javax.persistence.Table;
import javax.persistence.Transient;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date;
import java.util.List;


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


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

/*租户id**/ /*租户id**/
@io.swagger.annotations.ApiModelProperty(value="租户id",name="tenantId") @io.swagger.annotations.ApiModelProperty(value="租户id",name="tenantId")
private String tenantId; private String tenantId;
@@ -67,6 +69,23 @@ public class WxMsgCallback implements Serializable {
/*创建时间**/ /*创建时间**/
@io.swagger.annotations.ApiModelProperty(value="创建时间",name="createtime") @io.swagger.annotations.ApiModelProperty(value="创建时间",name="createtime")
private Date 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() { public String getTenantId() {
return tenantId; 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 public static enum Field
{ {


+ 8
- 6
mallinkService/src/main/java/com/iformall/mapper/WxMsgCallbackMapper.java Прегледај датотеку

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


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


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

public interface WxMsgCallbackMapper extends CommonMapper<WxMsgCallback, String> { public interface WxMsgCallbackMapper extends CommonMapper<WxMsgCallback, String> {


List<WxMsgCallback> findList(WxMsgCallback wxMsgCallback); 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; package com.iformall.service.impl;


import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import com.iformall.common.IdWorker; 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.WxMsgConfig;
import com.iformall.domain.po.WxMsgModel; import com.iformall.domain.po.WxMsgModel;
import com.iformall.domain.po.WxMsgValidationcodeModel; 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.service.WxMsgCallbackService;
import com.iformall.utils.HMACSHA256; import com.iformall.utils.HMACSHA256;

import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@@ -39,6 +35,8 @@ public class WxMsgCallbackServiceImpl implements WxMsgCallbackService {
@Autowired @Autowired
WxMsgValidationcodeModelMapper wxMsgValidationcodeModelMapper; WxMsgValidationcodeModelMapper wxMsgValidationcodeModelMapper;


@Autowired
WxMsgMapper wxMsgMapper;


@Override @Override
public PageInfo<WxMsgCallback> listAsPage(WxMsgCallback record, Integer pageIndex, Integer pageSize) { public PageInfo<WxMsgCallback> listAsPage(WxMsgCallback record, Integer pageIndex, Integer pageSize) {
@@ -91,17 +89,28 @@ public class WxMsgCallbackServiceImpl implements WxMsgCallbackService {
logger.info("短信SIGN校验成功"); logger.info("短信SIGN校验成功");
wxMsgConfig.setRemains(wxMsgConfig.getRemains() - wxMsgCallbacks.size()); wxMsgConfig.setRemains(wxMsgConfig.getRemains() - wxMsgCallbacks.size());
wxMsgConfigMapper.updateByPrimaryKeySelective(wxMsgConfig); wxMsgConfigMapper.updateByPrimaryKeySelective(wxMsgConfig);
final IdWorker idWorker = IdWorker.get();
for (WxMsgCallback wxMsgCallback : wxMsgCallbacks) { 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()); wxMsgCallback.setCreatetime(new Date());
wxMsgCallbackMapper.insertSelective(wxMsgCallback); wxMsgCallbackMapper.insertSelective(wxMsgCallback);
} }

} }
}else{ }else{
logger.info("短信SIGN校验失败"); 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 @Override
public PageInfo<WxMsg> listAsPage(WxMsg record, Integer pageIndex, Integer pageSize) { 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 @Override
public WxMsg getById(Long id) { 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 @Override
@@ -82,6 +108,7 @@ public class WxMsgServiceImpl implements WxMsgService {
for(String phone:phoneSplit){ for(String phone:phoneSplit){
phoneSet.add(phone); phoneSet.add(phone);
} }
wxMsg.setExpectSendNumber(phoneSet.size());//预计发送数量
StringBuffer sb=new StringBuffer(); StringBuffer sb=new StringBuffer();
for(String phone:phoneSet){ for(String phone:phoneSet){
sb.append(phone).append(","); sb.append(phone).append(",");
@@ -155,11 +182,6 @@ public class WxMsgServiceImpl implements WxMsgService {
return ""; return "";
} }


private String parseexcle(String tenantId, WxMsg excelpath) {

return null;
}

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




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


logger.info("发送短信结束...");
if (ret.equals("1")) { if (ret.equals("1")) {
addMsgCallback(wxMsg,batchNo);
return new ResultData(Result.SUCCESS, "短信发送中,您可在短信明细中查看发送状态"); return new ResultData(Result.SUCCESS, "短信发送中,您可在短信明细中查看发送状态");
} else { } else {
return new ResultData(ErrorCode.MSG_SEND_ERROR.getCode(), "短信发送发败"); 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 phones = wxmsg.getPhones();
String[] split = phones.split(","); String[] split = phones.split(",");
final IdWorker idWorker = IdWorker.get(); final IdWorker idWorker = IdWorker.get();
@@ -252,10 +277,14 @@ public class WxMsgServiceImpl implements WxMsgService {
WxMsgCallback wxMsgCallback = new WxMsgCallback(); WxMsgCallback wxMsgCallback = new WxMsgCallback();
wxMsgCallback.setId(idWorker.nextId()); wxMsgCallback.setId(idWorker.nextId());
wxMsgCallback.setPhone(phone); 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); 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="status_msg" jdbcType="VARCHAR" property="statusMsg" />
<result column="sign" jdbcType="VARCHAR" property="sign" /> <result column="sign" jdbcType="VARCHAR" property="sign" />
<result column="createtime" jdbcType="TIMESTAMP" property="createtime" /> <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> </resultMap>
<sql id="allColumns"> <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>


<sql id="dynamicWhereConditions"> <sql id="dynamicWhereConditions">
@@ -85,7 +89,16 @@
</select> </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>


Loading…
Откажи
Сачувај