From d5f64b475f837087bddff2941537e162fdac7d29 Mon Sep 17 00:00:00 2001 From: gongbiao Date: Tue, 25 Sep 2018 16:49:10 +0800 Subject: [PATCH] =?UTF-8?q?[=E6=A0=87=E7=AD=BE=E7=9F=AD=E4=BF=A1][?= =?UTF-8?q?=E5=9B=9E=E8=B0=83][=E5=9B=9E=E8=B0=83=E6=97=B6=E5=88=A4?= =?UTF-8?q?=E6=96=ADID=E6=98=AF=E5=90=A6=E5=AD=98=E5=9C=A8=EF=BC=8C?= =?UTF-8?q?=E5=AD=98=E5=9C=A8=E6=9B=B4=E6=96=B0=EF=BC=8C=E4=B8=8D=E5=AD=98?= =?UTF-8?q?=E5=9C=A8=E6=8F=92=E5=85=A5]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/iformall/common/ErrorCode.java | 2 +- .../impl/WxMsgCallbackServiceImpl.java | 72 +++++++++++++++--- .../service/impl/WxMsgServiceImpl.java | 75 +++++++++++++------ 3 files changed, 114 insertions(+), 35 deletions(-) diff --git a/mallinkService/src/main/java/com/iformall/common/ErrorCode.java b/mallinkService/src/main/java/com/iformall/common/ErrorCode.java index 1fc006f2a..7dc11b2ac 100644 --- a/mallinkService/src/main/java/com/iformall/common/ErrorCode.java +++ b/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,"请确定发送的方式"), /** * 会员 diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxMsgCallbackServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxMsgCallbackServiceImpl.java index c9475b139..4906e6e04 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxMsgCallbackServiceImpl.java +++ b/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 list = wxMsgConfigMapper.findList(wxMsgConfig); List 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 message = new TreeMap<>(); + message.put("item","Array"); + + StringBuilder sb = new StringBuilder(); + Set> entries = message.entrySet(); + for (Map.Entry 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 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> entries = message.entrySet(); + for (Map.Entry 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(); + } + + + } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxMsgServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxMsgServiceImpl.java index 0921efe4d..90972d2a4 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxMsgServiceImpl.java +++ b/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 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 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 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); + } + + + } + + + }