CouponPushJob.java
8.01 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
package com.zteits.pay.job;
import java.util.*;
import com.clouds.common.config.IrainConfigure;
import com.xxl.job.core.handler.annotation.XxlJob;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import com.alibaba.fastjson.JSONObject;
import com.clouds.common.cache.park.IRainPkNoRelationCacheUtil;
import com.clouds.common.utils.DateUtil;
import com.clouds.common.utils.ExceptionUtil;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.context.XxlJobHelper;
import com.zteits.clouds.api.apibase.bean.BizResult;
import com.zteits.clouds.api.apibase.constants.BasicEnum;
import com.zteits.clouds.api.dto.bill.billingrule.param.SaveCouponPushLogReq;
import com.zteits.clouds.api.dto.bill.vipcard.VipNoPushCardCustInfoDTO;
import com.zteits.clouds.api.dto.bill.vipcard.param.VipPushRequest;
import com.zteits.clouds.api.service.bill.coupon.CouponPushLogService;
import com.zteits.clouds.api.service.bill.vipcard.VipCardService;
import com.zteits.pay.util.HttpClientTutorial;
/**
* 需求描述:
* 会员卡(t_vip_card)特征日标识(special_day_type)为:每天。<br/>
* 此类会员卡表示用户购买的是每天某个时间段免费(免费时间段字段:valid_start_time-valid_end_time)。<br/>
* 例如:用户购买了每天的8:00:00-18:00:00免费的会员卡,如果今天该车辆限行,该用户今天停一天是不应该收费的。
* 和艾润协商的结果是:在前一天给该车辆下发个优惠券,表示今天一天不收费。
*
* Copyright: Copyright (c) 2017 zteits
*
* @ClassName: CouponPushJob
* @Description:
* @version: v1.0.0
* @author: zhaowg
* @date: 2018年3月30日 下午4:15:19
* Modification History:
* Date Author Version Description
*---------------------------------------------------------*
* 2018年3月30日 zhaowg v1.0.0 创建
*/
@Component
public class CouponPushJob {
private static final Logger logger = LoggerFactory.getLogger(CouponPushJob.class);
@Autowired
private VipCardService vipCardService;
@Autowired
private CouponPushLogService couponPushLogService;
@XxlJob(value="CouponPushJob")
public ReturnT<String> execute(String... params) throws Exception {
String param = XxlJobHelper.getJobParam();
if (StringUtils.isNotEmpty(param) && params == null) {
params = param.split(",");
}
logger("开始执行需要推送优惠券JOB");
//1-今天;2-明天
String type = "2";
if (null != params && params.length > 0) {
type = params[0];
}
Date date = null;
if("1".equals(type)){
date = new Date();
}else{
//明天
Calendar ca = Calendar.getInstance();
ca.add(Calendar.DAY_OF_YEAR, 1);
date = ca.getTime();
}
logger.info("查询日期:"+DateUtil.getDateString(date, DateUtil.DATETIME_FORMAT));
VipPushRequest vipPushRequest = new VipPushRequest();
vipPushRequest.setSysCode(BasicEnum.SYS_CODE.getValue());
vipPushRequest.setPushDate(date);
BizResult<List<VipNoPushCardCustInfoDTO>> bizResult = vipCardService.queryCouponNoPushInfo(vipPushRequest );
if(!bizResult.isSuccess()){
logger(bizResult.getErrMsg());
return ReturnT.SUCCESS;
}
List<VipNoPushCardCustInfoDTO> cardCustInfoDTOs = bizResult.getData();
if(CollectionUtils.isEmpty(cardCustInfoDTOs)){
logger("没有需要推送优惠券的车辆信息");
return ReturnT.SUCCESS;
}
logger("查询到需要推送的优惠券车辆信息条数为:"+cardCustInfoDTOs.size());
for (int i = 0; i < cardCustInfoDTOs.size(); i++) {
VipNoPushCardCustInfoDTO cardCustInfoDTO = cardCustInfoDTOs.get(i);
logger("开始推送第"+i+"条:"+cardCustInfoDTO.getCarNumber()+","+cardCustInfoDTO.getPlNo());
this.pushCoupon(cardCustInfoDTO.getCarNumber(),cardCustInfoDTO.getPlNo(),cardCustInfoDTO.getId(),type);
}
return ReturnT.SUCCESS;
}
/**
* 推送优惠券给艾润
* @param carNumber
* @param plNo
* 2018年4月2日 zhaowg
*/
private void pushCoupon(String carNumber, String plNo,Long cardParkCustRelId,String type) {
Map<String,Object> param = new HashMap<>();
IrainConfigure.irainRequestParams(param);
String serialnumber = UUID.randomUUID().toString();
param.put("serial_number", serialnumber);
param.put("vpl_number", carNumber);
String irainPlNo = IRainPkNoRelationCacheUtil.getIRainPayPkNoByPlNo(plNo);
param.put("park_code",irainPlNo );
//优惠券类型:0小时,1金额 2次数 3时间段优惠
int couponType = 3;
param.put("coupon_type", couponType);
//优惠券值:0时长(分钟),2次数 3钱数(分)
int couponValue = 0;
param.put("coupon_value",couponValue);
//开始时间
Integer addDay = "1".equals(type)?0:1;
Calendar start_calendar = Calendar.getInstance();
start_calendar.add(Calendar.DAY_OF_YEAR, addDay); //明天
start_calendar.set(Calendar.HOUR_OF_DAY, 0);
start_calendar.set(Calendar.MINUTE, 0);
start_calendar.set(Calendar.SECOND, 0);
Date startTime = start_calendar.getTime();
param.put("time_start",startTime.getTime()/1000);
//结束时间
Calendar end_calendar = Calendar.getInstance();
end_calendar.add(Calendar.DAY_OF_YEAR, addDay); //明天
end_calendar.set(Calendar.HOUR_OF_DAY, 23);
end_calendar.set(Calendar.MINUTE, 59);
end_calendar.set(Calendar.SECOND, 59);
Date endTime = end_calendar.getTime();
param.put("time_end", endTime.getTime()/1000);
//开始调用艾润接口推送
String rs = "";
//推送状态 1:推送成功 -1:推送失败
String pushState = "-1";
SaveCouponPushLogReq req = new SaveCouponPushLogReq();
req.setCardParkCustRelId(cardParkCustRelId);
req.setCarNumber(carNumber);
req.setCouponType(couponType+"");
req.setCouponValue(couponValue+"");
req.setPlNo(plNo);
req.setSerialNumber(serialnumber);
req.setTimeStart(startTime);
req.setTimeEnd(endTime);
logger("优惠券通知请求信息:"+JSONObject.toJSONString(param));
try{
for (int i = 0; i < 3; i++) {
if (StringUtils.isBlank(rs)) {
rs = HttpClientTutorial.httpPostRequest(IrainConfigure.getIrain_url() + "/coupon/Issued",param);
}else{
break;
}
}
req.setResponseMsg(rs);
logger("优惠券通知艾润返回信息为:"+rs);
if(StringUtils.isBlank(rs)){
logger("艾润返回数据为空");
req.setPushState(-1);
return;
}
JSONObject jsobj = JSONObject.parseObject(rs);
//0:失败,1:成功
if (!jsobj.get("status").toString().equals("0")) {
//成功
pushState = "1";
logger("该车牌:"+carNumber+",艾润停车场:"+irainPlNo+"下发成功");
//获取优惠券id
String coupon_id = jsobj.getJSONObject("data").getString("coupon_id");
req.setOutCouponId(coupon_id);
}else{
//失败
pushState = "-1";
logger("该车牌:"+carNumber+",艾润停车场:"+irainPlNo+"下发失败");
}
req.setPushState(Integer.valueOf(pushState));
}catch(Exception e){
req.setPushState(-1);
req.setResponseMsg(ExceptionUtil.getTrace(e));
}finally{
//记录日志
try{
req.setSysCode(BasicEnum.SYS_CODE.getValue());
couponPushLogService.insertCouponPushLog(req);
}catch (Exception e) {
logger("日志记录失败");
}
}
}
private void logger(String msg){
XxlJobHelper.log(msg);
logger.info(msg);
}
}