package com.sp2p.action.front;
import java.io.IOException;
import java.math.BigDecimal;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import com.hehenian.biz.common.account.dataobject.AccountUserDo;
import com.hehenian.biz.common.base.result.IResult;
import com.hehenian.biz.common.util.JsonUtil;
import com.hehenian.web.common.util.HttpClientUtils;
import com.hehenian.web.common.util.ServletUtils;
import net.sf.json.JSONObject;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.shove.web.util.JSONUtils;
import com.sp2p.service.ActivityService;
public class ActivityAction extends BaseFrontAction {
private static final long serialVersionUID = 1L;
public static Log log = LogFactory.getLog(ActivityAction.class);
private ActivityService activityService;
private static final DateFormat DATE_FORMAT=new SimpleDateFormat("yy-M-d");
private int activityId;
static Calendar calendar1=Calendar.getInstance();
static Calendar calendar2=Calendar.getInstance();
static{
calendar1.set(2014, 8, 1, 0, 0, 0);
calendar2.set(2014, 8, 6, 0, 0, 0);
}
public String sjmIndex(){
session().setAttribute("partnerUserId",request("wxToken"));
session().setAttribute("partnerId",101);
return SUCCESS;
}
/**
* 抽奖首页
* @return
*/
public String luckDrawIndex() {
int userGroup = 0;
//中奖动态
//-------
List<Map<String, Object>> records = activityService.queryActivityRecore(activityId);
request().setAttribute("records", records);
int recordCount = activityService.queryActivityRecoreCount(activityId);
request().setAttribute("recordCount", recordCount);
//奖项设置
//------
//查询用户抽奖次数
//----
AccountUserDo user = (AccountUserDo)session("user");
if (user!=null) {
userGroup = user.getUserGroup();
activityService.computeScore(user.getId(), activityId);
Map<String, String> map = activityService.queryUserInfo(user.getId(), activityId);
request().setAttribute("userinfo", map);
//签到记录
List<Map<String, Object>> signRecords = activityService.querySignRecord(activityId, user.getId());
request().setAttribute("signRecords", signRecords);
}else{
List<Map<String, Object>> signRecords = activityService.querySignRecord(activityId, 0);
request().setAttribute("signRecords", signRecords);
}
//标的列表
List<Map<String, Object>> borrowList = activityService.queryBorrowList(userGroup);
request().setAttribute("borrowList", borrowList);
request().setAttribute("now", DATE_FORMAT.format(new Date()));
return SUCCESS;
}
/**
* 进行抽奖
* @return
*/
private static final Random RANDOM = new Random();
public String luckDraw() throws IOException {
Calendar calendar=Calendar.getInstance();
JSONObject jsonObject = new JSONObject();
if (calendar.after(calendar1)&&calendar.before(calendar2)) {
AccountUserDo user = (AccountUserDo)session("user");
//判断是否有剩余抽奖次数
Map<String, String> userinfo = activityService.queryUserInfo(user.getId(), activityId);
if (userinfo!=null&&Integer.parseInt(userinfo.get("score"))>Integer.parseInt(userinfo.get("hasDraw"))) {
//抽奖 得到结果 减少抽奖次数
Map<String, String> activity = activityService.queryActivity(activityId);
List<Map<String, Object>> list = activityService.queryAwards(activityId);
if (list!=null&&!list.isEmpty()) {
int amount = Integer.parseInt(activity.get("amount"));
int index=0;
int defaultAwardId = 0;
List<Map<String, Integer>> list2 = new ArrayList<Map<String,Integer>>();
for (Map<String, Object> map : list) {
if ((Integer)map.get("isDefault")==1) {
defaultAwardId = (Integer)map.get("id");
}
double probability = (Double)map.get("probability");
if (((BigDecimal)map.get("hasNum")).intValue() <(Integer)map.get("dayMaxNum")) {
Map<String, Integer> map1 = new HashMap<String, Integer>();
index += (int)(probability*amount);
map1.put("index", index);
map1.put("awardId", (Integer)map.get("id"));
list2.add(map1);
}
}
Collections.sort(list2, new Comparator<Map<String, Integer>>() {
@Override
public int compare(Map<String, Integer> o1,
Map<String, Integer> o2) {
return o1.get("index")-o2.get("index");
}
});
int result = RANDOM.nextInt(amount);
int awardId = 0;
for (Map<String, Integer> map : list2) {
if (result<map.get("index")) {
awardId = map.get("awardId");
break;
}
}
if (awardId <= 0) {
awardId = defaultAwardId;
}
activityService.saveRecord(user.getId(), awardId);
activityService.updateHasDraw(user.getId(), 1, activityId);
jsonObject.put("ret", 0);
jsonObject.put("awardId", awardId);
}else {
//指定活动找不到奖项
jsonObject.put("ret", 1);
}
}else{
jsonObject.put("ret", 2);
}
}else{
jsonObject.put("ret", 3);
}
JSONUtils.printStr(jsonObject.toString());
return null;
}
/**
* 抽奖签到
* @return
* @throws IOException
*/
public String sign() throws IOException {
AccountUserDo user = (AccountUserDo)session("user");
Calendar calendar=Calendar.getInstance();
if (calendar.after(calendar1)&&calendar.before(calendar2)) {
if (user.getUsrCustId()!=null&&user.getUsrCustId()>0) {
boolean b = activityService.sign(user.getId(), activityId);
if (b) {
activityService.updateMoney(user.getId(), 0.88, activityId);
JSONUtils.printStr("0");
}else{
JSONUtils.printStr("1");
}
}else{
JSONUtils.printStr("2");
}
}else{
JSONUtils.printStr("3");
}
return null;
}
private int draw( Map<String, String> activity,List<Map<String, Object>> awards,long userId,int defaultAwardId){
int amount = Integer.parseInt(activity.get("amount"));
int index=0;
List<Map<String, Integer>> list2 = new ArrayList<Map<String,Integer>>();
for (Map<String, Object> map : awards) {
if ((Integer)map.get("isDefault")==1) {
defaultAwardId = (Integer)map.get("id");
}
double probability = (Double)map.get("probability");
if (((BigDecimal)map.get("hasNum")).intValue() <(Integer)map.get("dayMaxNum")) {
Map<String, Integer> map1 = new HashMap<String, Integer>();
index += (int)(probability*amount);
map1.put("index", index);
map1.put("awardId", (Integer)map.get("id"));
list2.add(map1);
}
}
Collections.sort(list2, new Comparator<Map<String, Integer>>() {
@Override
public int compare(Map<String, Integer> o1,
Map<String, Integer> o2) {
return o1.get("index")-o2.get("index");
}
});
int result = RANDOM.nextInt(amount);
int awardId = 0;
for (Map<String, Integer> map : list2) {
if (result<map.get("index")) {
awardId = map.get("awardId");
break;
}
}
if (awardId <= 0) {
awardId = defaultAwardId;
}
activityService.saveRecord(userId, awardId);
Map<String, String> award = activityService.getAward(awardId);
if (award!=null){
String money = award.get("money");
try {
activityService.updateMoney(userId,Double.parseDouble(money),activityId);
}catch (Exception e){
e.printStackTrace();
}
}
return awardId;
}
/**
* 获取自己的中奖记录
* @return
*/
public String myActivityRecords() {
AccountUserDo user = (AccountUserDo)session("user");
List<Map<String, Object>> list = activityService.queryMyActivityRecords(activityId, user.getId());
request().setAttribute("myRecords", list);
return SUCCESS;
}
private static final int sjmActivityId = 2;
private static final DateFormat DATE_FORMAT1 = new SimpleDateFormat("yyyyMMdd");
/**
* 神经猫抽奖
* @return
*/
public String sjmDraw() {
AccountUserDo user = (AccountUserDo) session("user");
JSONObject jsonObject = new JSONObject();
if (user != null) {
int defaultAwardId = 0;
Map<String, String> stringStringMap = activityService.queryDefaultAwardId(sjmActivityId);
if (stringStringMap != null) {
try {
defaultAwardId = Integer.parseInt(stringStringMap.get("id"));
} catch (Exception e) {
}
}
List<Map<String, Object>> maps = activityService
.queryMyActivityRecordsByDate(sjmActivityId, user.getId(), DATE_FORMAT1.format(new Date()));
boolean flag = true;
if (maps != null && !maps.isEmpty()) {
for (Map<String, Object> map : maps) {
if (!map.get("awardId").equals(defaultAwardId)) {
flag = false;
break;
}
}
}
if (flag) {
//今天还没中奖,可以有机会中奖
Map<String, String> activity = activityService.queryActivity(sjmActivityId);
List<Map<String, Object>> list = activityService.queryAwards(sjmActivityId);
if (list != null && !list.isEmpty()) {
int awardId = draw(activity, list, user.getId(), defaultAwardId);
jsonObject.put("ret", 0);
jsonObject.put("award", (int)Double.parseDouble(activityService.getAward(awardId).get("money")));
} else {
//指定活动找不到奖项
jsonObject.put("ret", 1);
jsonObject.put("msg", "该活动没有设置奖项");
}
} else {
activityService.saveRecord(user.getId(), defaultAwardId);
jsonObject.put("ret", 0);
jsonObject.put("award", (int)Double.parseDouble(activityService.getAward(defaultAwardId).get("money")));
}
}
ServletUtils.writeJson(jsonObject.toString());
return null;
}
public String userInfo(){
AccountUserDo user = (AccountUserDo) session("user");
JSONObject jsonObject = new JSONObject();
if (user!=null){
Map<String, String> map = activityService.queryUserInfo(user.getId(), activityId);
jsonObject.put("userinfo",map);
}
ServletUtils.writeJson(jsonObject.toString());
return null;
}
public String activityRecores(){
//中奖动态
//-------
List<Map<String, Object>> records = activityService.queryActivityRecore(activityId);
int recordCount = activityService.queryActivityRecoreCount(activityId);
JSONObject jsonObject = new JSONObject();
jsonObject.put("records",records);
jsonObject.put("recordCount",recordCount);
ServletUtils.writeJson(jsonObject.toString());
return null;
}
/**
* 获取自己的中奖记录
* @return
*/
private static final DateFormat DATE_FORMAT2=new SimpleDateFormat("yyyy-MM-dd");
public String myActivityRecordList() {
AccountUserDo user = (AccountUserDo)session("user");
List<Map<String, Object>> list = activityService.queryMyActivityRecords(activityId, user.getId());
if (list!=null&&!list.isEmpty()){
for (Map<String, Object> stringObjectMap : list) {
stringObjectMap.put("day",DATE_FORMAT2.format(stringObjectMap.get("cTime")));
stringObjectMap.remove("cTime");
}
}
JSONObject jsonObject = new JSONObject();
jsonObject.put("myRecords", list);
try {
;
ServletUtils.writeJson(JsonUtil.toString(list));
} catch (IOException e) {
e.printStackTrace();
}
// System.out.println(jsonObject.toString());
return null;
}
private String wenxinToken;
private String appid = "wx5c583d80448a89a9";
private String secret = "1da5272e384a73c53eeb6f56d3f8c9c6";
public String weixinAuth(){
/* String code = request().getParameter("code");
if (StringUtils.isBlank(code)) {
ServletUtils.write("授权失败");
return null;
}
String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="+appid+"&secret="+secret+"&code="
+ code + "&grant_type=authorization_code";
IResult<?> result = HttpClientUtils.post(url, new HashMap<String, String>());
System.out.println("result.getModel():"+result.getModel());
JSONObject jsonObject = JSONObject.fromObject(result.getModel());
String openid = jsonObject.getString("openid");
System.out.println("openid:"+openid);
wenxinToken=openid;*/
// out.print("Code:" + code);
// out.print("授权成功,微信返回的数据:" + result.getModel());
// response.sendRedirect("http://www.hehenian.com/webapp/webapp-index.do");
return SUCCESS;
}
public String getWenxinToken() {
return wenxinToken;
}
public void setWenxinToken(String wenxinToken) {
this.wenxinToken = wenxinToken;
}
public ActivityService getActivityService() {
return activityService;
}
public void setActivityService(ActivityService activityService) {
this.activityService = activityService;
}
public int getActivityId() {
return activityId;
}
public void setActivityId(int activityId) {
this.activityId = activityId;
}
}