0c8b8a90ec724bedc07194bd9be0b3b46995dd4d.svn-base 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646
  1. package com.chinacreator.process.job;
  2. import java.net.URLEncoder;
  3. import java.util.ArrayList;
  4. import java.util.HashMap;
  5. import java.util.Iterator;
  6. import java.util.List;
  7. import java.util.Map;
  8. import java.util.TreeMap;
  9. import net.sf.json.JSONObject;
  10. import org.apache.commons.lang.time.DateUtils;
  11. import org.apache.log4j.Logger;
  12. import org.quartz.DisallowConcurrentExecution;
  13. import org.quartz.PersistJobDataAfterExecution;
  14. import org.springframework.beans.factory.annotation.Autowired;
  15. import org.springframework.util.StringUtils;
  16. import com.chinacreator.common.exception.BusinessException;
  17. import com.chinacreator.common.util.DESUtil;
  18. import com.chinacreator.common.util.MD5;
  19. import com.chinacreator.common.util.URLUtil;
  20. import com.chinacreator.process.bean.OrderLog;
  21. import com.chinacreator.process.bean.PointShopMqBean;
  22. import com.chinacreator.process.bean.PointShopOrderBean;
  23. import com.chinacreator.process.dao.DictionaryDao;
  24. import com.chinacreator.process.dao.PointShopDao;
  25. import com.chinacreator.process.util.HttpInvoke;
  26. import com.chinacreator.process.util.JsonUtil;
  27. import com.chinacreator.video.queue.MessageService;
  28. import com.chinacreator.video.queue.bean.MessagePipe;
  29. /**
  30. * 积分商城业务处理
  31. * @author xu.zhou
  32. * @date 20190622
  33. */
  34. @PersistJobDataAfterExecution
  35. @DisallowConcurrentExecution
  36. public class PointShopMQJob {
  37. private Logger logger = Logger.getLogger(PointShopMQJob.class);
  38. private Logger log = Logger.getLogger("pointshop");
  39. @Autowired
  40. private DictionaryDao dictionaryDao;
  41. @Autowired
  42. private PointShopDao pointShopDao;
  43. @Autowired
  44. private MessageService messageService;
  45. public void doProcess() throws Exception {
  46. logger.info("接收积分商城订购队列JOB启动");
  47. if (dictionaryDao.getValue("recivemq").equals("0")) {
  48. long beginTime = System.currentTimeMillis();
  49. List<MessagePipe> list = messageService.reciveBatchMessage("pointShop", 500);
  50. logger.info("接收积分商城订购队列花费时间:" + (System.currentTimeMillis() - beginTime));
  51. List<PointShopMqBean> dataList = new ArrayList<PointShopMqBean>();
  52. for (MessagePipe messagePipe : list) {
  53. PointShopMqBean mqBean = transBean(messagePipe.getBody());
  54. dataList.add(mqBean);
  55. }
  56. //{orderNo=bd84d022-5bd6-4e71-b8ef-52a347fe4994, requestId=20190718112010821332728, type=pointShop, orderId=201907181120199638342}
  57. // List<PointShopMqBean> dataList = new ArrayList<PointShopMqBean>();
  58. // PointShopMqBean bean = new PointShopMqBean();
  59. // bean.setOrderId("201907181120199638342");
  60. // bean.setOrderNo("bd84d022-5bd6-4e71-b8ef-52a347fe4994");
  61. // bean.setRequestId("20190718112010821332728");
  62. // dataList.add(bean);
  63. List<PointShopMqBean> notrepeatList = getNotRepeatData(dataList);
  64. if(notrepeatList != null && notrepeatList.size()>0){
  65. for (PointShopMqBean mqBean : notrepeatList) {
  66. this.handleOrder(mqBean);
  67. }
  68. }
  69. } else {
  70. logger.info("停止积分商城订购接收队列消息");
  71. }
  72. }
  73. /**
  74. * 业务处理
  75. * @param mqBean
  76. */
  77. public void handleOrder(PointShopMqBean mqBean){
  78. Map logMap = new HashMap();
  79. logMap.put("data", mqBean);
  80. PointShopOrderBean psoBean = null;
  81. String resultCode = "-1";
  82. String resultInfo = "";
  83. String huchiSpid = ""; //互斥业务ID,如果不为空,则业务互斥
  84. try {
  85. psoBean = pointShopDao.getOrderRec(mqBean.getOrderId());
  86. if(psoBean == null || !psoBean.getOrderNo().equals(mqBean.getOrderNo())){
  87. throw new BusinessException("9071", "无对应订单信息,我侧订单流水号:"+mqBean.getOrderId());
  88. }
  89. //判断业务互斥
  90. huchiSpid = checkMutual(psoBean); //判断业务互斥
  91. if(!"".equals(huchiSpid)){
  92. psoBean.setVipstatus("4");
  93. throw new BusinessException("9003","已办理互斥业务");
  94. }
  95. String busiType = psoBean.getBusiType();
  96. //赠送会员状态,0成功,1未赠送,2赠送中,3失败,4不赠送
  97. //办理结果编码,0成功,1待处理,2处理中,其他为异常
  98. if(!"1".equals(psoBean.getResultCode())){
  99. throw new BusinessException("9072", "业务处理状态异常,"+psoBean.getResultCode());
  100. }
  101. //获取业务结束时间
  102. String newEndtime = this.getEndTime(psoBean);
  103. //默认记录赠送会员进行中,赠送成功后小毛会改为成功
  104. psoBean.setVipstatus("2");
  105. psoBean.setResultCode("2");
  106. psoBean.setResultInfo("处理中");
  107. if("1".equals(busiType)){ //会员
  108. //更新订购状态
  109. pointShopDao.updBusiStatus(psoBean,"TD_BACKBUSI_ORDER_REC");
  110. pointShopDao.updBusiStatus(psoBean,"TD_POINTS_ORDER_REC");
  111. String sendVipRes = sendVip(psoBean);
  112. if("9070".equals(sendVipRes)){
  113. psoBean.setVipstatus("5"); //赠送超时
  114. throw new BusinessException("9070","赠送会员超时", new String[0]);
  115. }
  116. if(!"0".equals(sendVipRes)){ //赠送失败,再查记录表状态,(成功后小毛会改为0)
  117. //获取办理编码,如果赠送会员成功,小毛会更新vipstatus为0
  118. sendVipRes = pointShopDao.getBackVipstatus(psoBean.getId());
  119. }
  120. if(!"0".equals(sendVipRes)){//赠送未成功
  121. //psoBean.setVipstatus("3");
  122. //throw new BusinessException("9002","赠送会员未成功");
  123. //未成功,当作超时处理启动重试
  124. psoBean.setVipstatus("5"); //赠送超时
  125. throw new BusinessException("9070","赠送会员超时", new String[0]);
  126. }
  127. psoBean.setVipstatus("0");
  128. }else if("2".equals(busiType)){ //免流
  129. psoBean.setVipstatus("4"); //不赠送
  130. pointShopDao.updBusiStatus(psoBean,"TD_BACKBUSI_ORDER_REC");
  131. pointShopDao.updBusiStatus(psoBean,"TD_POINTS_ORDER_REC");
  132. //设置订购结束时间和订购渠道
  133. psoBean.setEndtime(newEndtime);
  134. psoBean.setOrderchannel(psoBean.getAppId());
  135. pointShopDao.order(psoBean);
  136. //saveOrderLog(psoBean,"0","成功"); //写订购日志
  137. }else if("3".equals(busiType)){ //会员+免流
  138. pointShopDao.updBusiStatus(psoBean,"TD_BACKBUSI_ORDER_REC");
  139. pointShopDao.updBusiStatus(psoBean,"TD_POINTS_ORDER_REC");
  140. String sendVipRes = sendVip(psoBean);
  141. if("9070".equals(sendVipRes)){
  142. psoBean.setVipstatus("5"); //赠送超时
  143. throw new BusinessException("9070","赠送会员超时", new String[0]);
  144. }
  145. if(!"0".equals(sendVipRes)){ //赠送失败,再查记录表状态,(成功后小毛会改为0)
  146. //办理结果编码,0成功,1待处理,2处理中,其他为异常
  147. sendVipRes = pointShopDao.getBackVipstatus(psoBean.getId());
  148. }
  149. if("0".equals(sendVipRes)){//赠送成功,更新或新增订购关系
  150. psoBean.setVipstatus("0");
  151. //设置订购结束时间和订购渠道
  152. psoBean.setEndtime(newEndtime);
  153. psoBean.setOrderchannel(psoBean.getAppId());
  154. pointShopDao.order(psoBean);
  155. //saveOrderLog(psoBean,"0","成功");
  156. }else{
  157. //psoBean.setVipstatus("3");
  158. //throw new BusinessException("9002","赠送会员未成功");
  159. //未成功,当作超时处理启动重试
  160. psoBean.setVipstatus("5"); //赠送超时
  161. throw new BusinessException("9070","赠送会员超时", new String[0]);
  162. }
  163. }
  164. resultCode = "0";
  165. resultInfo = "成功";
  166. } catch (Exception e) {
  167. e.printStackTrace();
  168. if (e instanceof BusinessException) {
  169. resultInfo = ((BusinessException) e).getMessage();
  170. resultCode = ((BusinessException) e).getCode();
  171. }else{
  172. resultCode = "8000";
  173. resultInfo = "系统错误,"+e.getMessage();
  174. }
  175. } finally{
  176. //更新订购操作表信息, 9071无订单信息,9072订单状态非待处理
  177. if(psoBean != null && !"9071".equals(resultCode) && !"9072".equals(resultCode)){
  178. try {
  179. if(resultInfo != null && resultInfo.length()>250){
  180. resultInfo = resultInfo.substring(0,250);
  181. }
  182. psoBean.setResultCode(resultCode);
  183. psoBean.setResultInfo(resultInfo);
  184. pointShopDao.updBackOrderRec(psoBean);
  185. pointShopDao.updOrderRec(psoBean);
  186. saveOrderLog(psoBean); //写订购日志
  187. } catch (Exception e) {
  188. e.printStackTrace();
  189. log.error("更新数据出现异常,"+psoBean.getUserid()+", resultCode:"+resultCode + ", resultInfo:"+resultInfo);
  190. }
  191. }
  192. //充值失败发送短信, 9002赠送会员失败, 0成功
  193. //if("9002".equals(resultCode) || "0".equals(resultCode)){
  194. if("0".equals(resultCode)){
  195. inserSmstMq(psoBean); //发送短信
  196. }
  197. //发送业务互斥短信
  198. /* if("9003".equals(resultCode)){
  199. this.inserSmstMqHuChi(psoBean,huchiSpid); //发送业务互斥短信
  200. }*/
  201. String bcstatus = "";
  202. if("9070".equals(resultCode)){//赠送会员超时
  203. inserVipRetryMq(psoBean); //赠送会员重试
  204. }else{
  205. //回调通知
  206. bcstatus = this.callBack(mqBean.getOrderId(),mqBean.getRequestId());
  207. }
  208. logMap.put("data2", psoBean);
  209. logMap.put("reusltCode", resultCode);
  210. logMap.put("resultInfo", resultInfo);
  211. logMap.put("bcstatus", bcstatus);
  212. log.info(JsonUtil.objectToJson(logMap));
  213. }
  214. }
  215. /**
  216. * 写订购日志
  217. * @param noBean PointShopOrderBean
  218. */
  219. private void saveOrderLog(PointShopOrderBean noBean){
  220. OrderLog orderLog = new OrderLog();
  221. orderLog.setApptype("2");
  222. orderLog.setArea(noBean.getArea());
  223. orderLog.setChannel(noBean.getOrderchannel());
  224. orderLog.setOrderstatus(0);
  225. orderLog.setStatus(0);
  226. orderLog.setCpid(noBean.getCpid());
  227. orderLog.setIsexperience(0);
  228. orderLog.setOrdertype("0");
  229. orderLog.setProvince(noBean.getProvince());
  230. orderLog.setSpid(noBean.getSpid());
  231. orderLog.setErrorcode(noBean.getResultCode());
  232. orderLog.setErrorinfo(noBean.getResultInfo());
  233. //手机号码不为空,且有办理免流业务的,记录订购日志,单独只送会员的不记订购日志
  234. if(noBean.getUserid() != null && !"null".equals(noBean.getUserid().trim()) && noBean.getUserid().trim().length() == 11 && noBean.getEndtime() != null){
  235. orderLog.setUserid(noBean.getUserid().trim());
  236. try {
  237. this.pointShopDao.addOrderLog(orderLog);
  238. } catch (Exception e) {
  239. log.error("orderId: "+noBean.getId()+", 添加日志出现异常,"+e.getMessage());
  240. e.printStackTrace();
  241. }
  242. }
  243. }
  244. /**
  245. * 查询本地订购关系表当前是否有已生效的订购关系
  246. * @param orderInfo
  247. * @return
  248. * @throws Exception
  249. */
  250. private Map hasEffect(PointShopOrderBean psoBean) throws Exception{
  251. Map reMap = new HashMap();
  252. boolean hasEffect = false;
  253. Map currOrderInfo = null;
  254. String currentTime = pointShopDao.currTime();
  255. //查询用户本地订购关系表未失效的订购数据
  256. currOrderInfo = pointShopDao.findByUserAndSpid(psoBean.getUserid(),psoBean.getCpid(),psoBean.getSpid());
  257. if(currOrderInfo != null){//本地有订购关系
  258. if(Long.parseLong(currOrderInfo.get("ENDTIME").toString()) >= Long.parseLong(currentTime)){ //结束时间大于或等于当前时间,订购关系有效
  259. hasEffect = true;
  260. }
  261. }
  262. reMap.put("hasEffect", hasEffect);
  263. reMap.put("currOrderInfo", currOrderInfo);
  264. return reMap;
  265. }
  266. /**
  267. * 判断业务是否互斥
  268. * @param orderInfo
  269. * @throws Exception
  270. */
  271. private String checkMutual(PointShopOrderBean psoBean) throws Exception{
  272. String huchiSpid = "";
  273. boolean result = false;
  274. String spid = psoBean.getSpid();
  275. List<HashMap> spList = pointShopDao.findSpInfo(spid);
  276. if(spList != null && spList.size()>0){
  277. if (spList.get(0).get("MUTEX") != null && !StringUtils.isEmpty(spList.get(0).get("MUTEX").toString())) {
  278. String[] mutexSpids = spList.get(0).get("MUTEX").toString().trim().split(",");
  279. //[{ORDERIDA=2019052, AREA=长沙, SPID=1167, PROVINCE=湖南, ID=201905241107578658666, ORDERCHANNEL=t, STATUS=1, ORDERTIME=20190524104129, USERID=18673197465, CPID=youtu}]
  280. //查询用户本地订购关系表未失效的订购数据
  281. List<HashMap> list = pointShopDao.findOrderRelaAll(psoBean.getUserid());
  282. if (list != null && list.size() > 0) {
  283. for (String mutexSpid : mutexSpids) {
  284. for (HashMap hm : list) {
  285. if (hm.get("SPID") != null && !hm.get("SPID").equals(spid) && hm.get("SPID").equals(mutexSpid)
  286. && !"2".equals(hm.get("STATUS"))) {
  287. huchiSpid = hm.get("SPID")+"";
  288. result = true;
  289. break;
  290. }
  291. }
  292. }
  293. }
  294. }
  295. }
  296. return huchiSpid;
  297. }
  298. /**
  299. * 赠送会员
  300. * @param orderInfo
  301. * @return
  302. * @throws Exception
  303. */
  304. private String sendVip(PointShopOrderBean orderBean)throws Exception{
  305. String resultcode = "3"; //失败
  306. try {
  307. //http://114.255.201.238:8090/video-activity/eshop/vip
  308. String vipurl = this.dictionaryDao.getValue("backBusiVipUrl");
  309. String timestamp = (System.currentTimeMillis() / 1000) + "";
  310. String id = orderBean.getId(); //TD_POINTS_ORDER_REC的ID,也是TD_BACKBUSI_ORDER_REC的ID
  311. String userid = orderBean.getUserid();
  312. String orderid = orderBean.getOrderNo();
  313. String cpid = orderBean.getCpid();
  314. String spid = orderBean.getSpid();
  315. //String goodscode = orderBean.getGoodsCode();
  316. String pwd = "";
  317. List<HashMap> confList = pointShopDao.getBackBusiConf(cpid, spid);
  318. pwd = confList.get(0).get("PWD").toString();
  319. userid = DESUtil.encode(userid, pwd);
  320. //MD5(orderid+userid+goodscode+pwd+timestamp)转换为十六进制ASCII 码字符串,共32 个字符,全小写 userid= Des(手机号码,pwd)
  321. //MD5(orderid+userid+timestamp+pwd)转换为十六进制ASCII 码字符串,共32 个字符,全小写
  322. String signature = MD5.MD5Encode(orderid + userid + timestamp + pwd);
  323. signature = signature.toLowerCase();
  324. vipurl = vipurl + "?userid=" + URLEncoder.encode(userid, "utf-8")+ "&id=" +id+ "&orderid="+ orderid + "&cpid=" + cpid + "&spid=" + spid + "&timestamp="
  325. + timestamp + "&signature=" + signature+ "&apptype=2";
  326. logger.info("vipurl: "+vipurl);
  327. //http://114.255.201.228:86/activity/eshop/vip?userid=iafPbU9aRLghY%2FEVMXFeag%3D%3D&orderid=201906231206498662914&goodscode=pointshop130&timestamp=1561445765&signature=47fe0e3900b29ef88fd0889b7c0e4cc6&apptype=5
  328. String result = URLUtil.get(vipurl,30*1000); //调赠送会员接口,超时时间设置为10秒
  329. log.info("赠送会员结果=> userid: " +userid+", orderid: "+orderBean.getOrderNo()+" , result: "+result);
  330. Map<?,?> map = JsonUtil.jsonToMap(result);
  331. resultcode = (String)map.get("resultcode");
  332. if(resultcode.equals("0")){
  333. logger.info("赠送成功");
  334. }
  335. } catch (Exception e) {
  336. e.printStackTrace();
  337. log.error("id=>"+orderBean.getId()+"=>userid: "+orderBean.getUserid()+"赠送会员失败,"+e);
  338. }
  339. return resultcode;
  340. }
  341. /**
  342. * 回调积分商城
  343. * @param outputObj
  344. * @param id 我方生成的订单流水号
  345. * @param requestId 我方生成的请求ID
  346. */
  347. private String callBack(String id,String requestId){
  348. String bcstatus = "1"; //回调状态,1未回调,0回调完成,2回调异常
  349. String cbReqParams = ""; //回调请求报文
  350. String cbRspParams = ""; //回调响应报文
  351. try {
  352. PointShopOrderBean bean = pointShopDao.getOrderRec(id);
  353. TreeMap<String, String > orderOutObj = null;
  354. if(bean != null){
  355. orderOutObj = new TreeMap<String, String>();
  356. orderOutObj.put("account",bean.getUserid());
  357. orderOutObj.put("orderId",bean.getId());
  358. orderOutObj.put("finishTime",bean.getFinishTime());
  359. orderOutObj.put("goodsCode",bean.getSpid());
  360. orderOutObj.put("orderNo",bean.getOrderNo());
  361. orderOutObj.put("orderTime",bean.getOrderTime());
  362. //orderOutObj.put("failDesc",bean.getResultInfo());
  363. String orderStatus = "3"; //充值状态:1充值中 2充值成功3充值失败
  364. String reusltCode = bean.getResultCode(); //办理结果编码,0成功,1待处理,2处理中,其他为异常
  365. if("1".equals(reusltCode) || "2".equals(reusltCode)){
  366. orderStatus = "1";
  367. }else if("0".equals(reusltCode)){
  368. orderStatus = "2";
  369. }else{ //充值失败,设置失败原因
  370. orderOutObj.put("failDesc",bean.getResultInfo());
  371. }
  372. orderOutObj.put("orderStatus",orderStatus); //充值状态:1充值中 2充值成功3充值失败
  373. }
  374. if(orderOutObj != null){
  375. String callBackUrl = this.dictionaryDao.getValue("pointShopCallBackUrl");//"http://demo.mall.10010.com:8104/jf-service/zcvcard/notify";
  376. cbReqParams = JsonUtil.objectToJson(orderOutObj);
  377. log.info("===========回调地址:"+callBackUrl);
  378. logger.info("===========回调请求参数:"+cbReqParams);
  379. cbRspParams = HttpInvoke.sendHttpByPost("POST", callBackUrl, cbReqParams, getProperty());
  380. log.info("============回调响应参数:"+cbRspParams);
  381. if("0000".equals(cbRspParams)){
  382. bcstatus = "0";
  383. }
  384. /* Map json = JsonUtil.jsonToMap(cbRspParams);
  385. if(json != null){
  386. String result = json.get("result")+"";
  387. if("0000".equals(result)){
  388. bcstatus = "0";
  389. }
  390. }*/
  391. }else{
  392. cbRspParams = "回调接口时未找到订购信息";
  393. log.error("订单流水号=>"+id+"=>requestId=>"+requestId+",回调接口时未找到订购信息");
  394. }
  395. } catch (Exception e) {
  396. bcstatus = "2";
  397. e.printStackTrace();
  398. log.error("订单流水号=>"+id+"=>requestId=>"+requestId+",回调接口出现异常,"+e.getMessage());
  399. cbRspParams = "返回报文: "+cbRspParams+",回调异常,"+e.getMessage();
  400. } finally{
  401. if(cbRspParams != null && cbRspParams.length()> 250){
  402. cbRspParams = cbRspParams.substring(0,250);
  403. }
  404. log.info("订单流水号=>"+id+"=>requestId=>"+requestId+"=>cbReqParams: "+cbReqParams+", cbRspParams=>"+cbRspParams);
  405. addParamsByCb(cbReqParams, cbRspParams, requestId);
  406. }
  407. return bcstatus;
  408. }
  409. /**
  410. * 添加回调报文
  411. * @param cbReqParams
  412. * @param cbRspParams
  413. * @param requestId
  414. */
  415. private void addParamsByCb(String cbReqParams,String cbRspParams, String requestId){
  416. try {
  417. //一个中文占两个 字节
  418. if(cbRspParams != null && cbRspParams.length()> 100){
  419. cbRspParams = cbRspParams.substring(0,100);
  420. }
  421. pointShopDao.updParamsByCb(cbReqParams, cbRspParams, requestId);
  422. } catch (Exception e) {
  423. e.printStackTrace();
  424. log.error("requestId: "+requestId+", 更新callBack状态出现异常,"+e.getMessage());
  425. }
  426. }
  427. /**
  428. * 去重复数据
  429. * @param oldBeans
  430. * @return
  431. */
  432. public List<PointShopMqBean> getNotRepeatData( List<PointShopMqBean> oldBeans){
  433. List<PointShopMqBean> newBeans = new ArrayList<PointShopMqBean>();
  434. Map<String,PointShopMqBean> map = new HashMap<String, PointShopMqBean>();
  435. for (PointShopMqBean bean : oldBeans) {
  436. if(map.containsKey(bean.getOrderId())){
  437. //insertvacMq(bean);
  438. }else{
  439. map.put(bean.getOrderId(), bean);
  440. }
  441. }
  442. Iterator<String> it = map.keySet().iterator();
  443. while (it.hasNext()) {
  444. String key = it.next().toString();
  445. newBeans.add(map.get(key));
  446. }
  447. logger.info("积分商城:old="+oldBeans.size()+" new:"+newBeans.size());
  448. return newBeans;
  449. }
  450. /**
  451. * 解析数据
  452. * @param body
  453. * orderId TD_POINTS_ORDER_REC表ID字段,我方生成的订单流水号
  454. * orderNo 积分商城订单号
  455. * requestId 返回给客户的请求ID
  456. * @return
  457. */
  458. public PointShopMqBean transBean(Map<String, Object> body) {
  459. String jsonStr = JsonUtil.objectToJson(body);
  460. return (PointShopMqBean) JsonUtil.jsonToBean(jsonStr, PointShopMqBean.class);
  461. }
  462. /**
  463. * 发送短信
  464. * @param psoBean
  465. * @param resultCode
  466. */
  467. public void inserSmstMq(PointShopOrderBean psoBean){
  468. try{
  469. if(psoBean != null){
  470. Map<String, String> map = new HashMap<String, String>();
  471. map.put("userid", psoBean.getUserid());
  472. map.put("cpid", psoBean.getCpid());
  473. map.put("spid", psoBean.getSpid());
  474. map.put("result", "0");
  475. map.put("channel", "");
  476. map.put("style","0000");
  477. map.put("times", "");
  478. map.put("orderType", "");
  479. map.put("type", "cssms");
  480. map.put("busiType", "tran_succ");
  481. logger.info(JsonUtil.objectToJson(map));
  482. String mqReciveUrl = dictionaryDao.getValue("mqReciveUrl");
  483. URLUtil.post(mqReciveUrl, JsonUtil.objectToJson(map));
  484. }
  485. }catch (Exception e){
  486. e.printStackTrace();
  487. }
  488. }
  489. /**
  490. * 发送业务互斥短信
  491. * @param inputObj
  492. * @param huchiSpid
  493. */
  494. public void inserSmstMqHuChi(PointShopOrderBean psoBean, String huchiSpid){
  495. try{
  496. String huchiSpName = "";
  497. List<HashMap> spList2 = pointShopDao.findSpInfo(huchiSpid);
  498. if(spList2 != null && spList2.size()>0 && spList2.get(0).get("SPNAME") != null){
  499. huchiSpName = spList2.get(0).get("SPNAME").toString();
  500. }
  501. String bt = psoBean.getBusiType();
  502. //免流,或者免流+会员,业务互斥要发短信
  503. if(("2".equals(bt) || "3".equals(bt)) && !"".equals(huchiSpName)){
  504. String succFlag = "fail";
  505. String busiType = "tran_cdn_fail"; //免流业务互斥短信
  506. if("3".equals(bt)){
  507. busiType = "tran_vipcdn_cdnfail"; //免流+会员业务互斥短信
  508. }
  509. Map<String, String> map = new HashMap<String, String>();
  510. map.put("userid", psoBean.getUserid());
  511. map.put("cpid", psoBean.getCpid());
  512. map.put("spid", psoBean.getSpid());
  513. map.put("result", "0");
  514. map.put("channel", "");
  515. map.put("param1", huchiSpName);
  516. map.put("style","0000");
  517. map.put("times", "");
  518. map.put("orderType", "");
  519. map.put("type", "cssms");
  520. map.put("busiType", busiType);
  521. logger.info(JsonUtil.objectToJson(map));
  522. String mqReciveUrl = dictionaryDao.getValue("mqReciveUrl");
  523. URLUtil.post(mqReciveUrl, JsonUtil.objectToJson(map));
  524. }
  525. }catch (Exception e){
  526. e.printStackTrace();
  527. }
  528. }
  529. /**
  530. * 获取请求属性性
  531. * @return
  532. */
  533. private static Map getProperty(){
  534. Map reqProperty = new HashMap();
  535. reqProperty.put("Content-type", "application/json;charset=UTF-8");
  536. return reqProperty;
  537. }
  538. /*
  539. * 赠送会员超时异步重试
  540. * @param orderInfo
  541. */
  542. public void inserVipRetryMq2(PointShopOrderBean bean){
  543. try{
  544. Map<String, String> map = new HashMap<String, String>();
  545. map.put("userid", bean.getUserid());
  546. map.put("id", bean.getId());
  547. map.put("orderid", bean.getOrderNo());
  548. map.put("type", "vipretry");
  549. logger.info("==============重试会员赠送队列参数,"+map);
  550. String mqReciveUrl = dictionaryDao.getValue("mqReciveUrl");
  551. URLUtil.post(mqReciveUrl, JsonUtil.objectToJson(map));
  552. }catch (Exception e){
  553. e.printStackTrace();
  554. }
  555. }
  556. /*
  557. * 赠送会员超时异步重试队列推送,最多重试三次
  558. * @param orderInfo
  559. */
  560. public void inserVipRetryMq(PointShopOrderBean bean){
  561. try {
  562. MessagePipe mpipe = new MessagePipe();
  563. mpipe.setHeader("vipretry");
  564. mpipe.addBody("userid", bean.getUserid());
  565. mpipe.addBody("id", bean.getId());
  566. mpipe.addBody("orderid", bean.getOrderNo());
  567. mpipe.addBody("sendcont","1");
  568. this.messageService.sendMessage(mpipe);
  569. } catch (Exception e) {
  570. e.printStackTrace();
  571. log.error("赠送会员超时异步重试队列推送出现异常,"+e.getMessage());
  572. }
  573. }
  574. /**
  575. * 获取endtime
  576. * @param bean PointShopOrderBean
  577. * @return
  578. */
  579. private String getEndTime(PointShopOrderBean bean)throws Exception{
  580. String endtime = pointShopDao.getBackEndtime(bean.getId());
  581. if(endtime == null || "null".equals(endtime) || endtime.length() != 14){
  582. endtime = "";
  583. }
  584. if("".equals(endtime)){
  585. String currEndtime = "";
  586. Map reMap = this.hasEffect(bean);
  587. if((Boolean)reMap.get("hasEffect")){ //存在有效订购关系
  588. Map currOrderInfo = (Map)reMap.get("currOrderInfo");
  589. currEndtime = (String)currOrderInfo.get("ENDTIME");
  590. }
  591. //[{PWD=kijkfds, NETDAYS=31, CHANNEL=test_01, NETDAYS=2, SPID=1168, BUSITYPE=3, CPID=youtu}]
  592. HashMap confHm = pointShopDao.getBackBusiConf(bean.getCpid(), bean.getSpid()).get(0);
  593. //String busiType = confHm.get("BUSITYPE")+"";
  594. if("2".equals(confHm.get("BUSITYPE")) || "3".equals(confHm.get("BUSITYPE"))){
  595. if(currEndtime != null && !"".equals(currEndtime)){
  596. endtime = pointShopDao.endtimeParamDay(confHm.get("NETDAYS")+"", currEndtime);
  597. }else{
  598. endtime = pointShopDao.currParamDay(confHm.get("NETDAYS")+"");
  599. }
  600. }
  601. }
  602. return endtime;
  603. }
  604. }