package cn.jcenterhome.service;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import cn.jcenterhome.util.BeanFactory;
import cn.jcenterhome.util.Common;
import cn.jcenterhome.util.JavaCenterHome;
import cn.jcenterhome.util.Serializer;
import cn.jcenterhome.vo.MessageVO;
public class MagicService {
private DataBaseService dataBaseService = (DataBaseService) BeanFactory.getBean("dataBaseService");
public Object magic_get(String mid) {
List<Map<String, Object>> query = dataBaseService.executeQuery("SELECT * FROM "
+ JavaCenterHome.getTableName("magic") + " WHERE mid = '" + mid + "'");
if (query.size() < 1) {
return new MessageVO("unknown_magic");
}
Map<String, Object> magic = query.get(0);
if (((Integer) magic.get("close")) == 1) {
return new MessageVO("magic_is_closed");
}
String forbiddengid = (String) magic.get("forbiddengid");
if (Common.empty(forbiddengid)) {
magic.put("forbiddengid", null);
} else {
magic.put("forbiddengid", forbiddengid.split(","));
}
String custom = (String) magic.get("custom");
if (Common.empty(custom)) {
magic.put("custom", new HashMap<String, String>());
} else {
magic.put("custom", Serializer.unserialize(custom, false));
}
return magic;
}
public Object magic_buy_get(HttpServletRequest request, HttpServletResponse response,
Map<String, Object> magic, Map<String, Object> sGlobal, Map<String, Object> space) {
if (Common.empty(magic)) {
return new MessageVO("unknown_magic");
}
String mid = (String) magic.get("mid");
String[] blacklist = {"coupon"};
if (Common.in_array(blacklist, mid)) {
return new MessageVO("magic_not_for_sale");
}
if (!Common.checkPerm(request, response, "allowmagic")) {
MessageVO msgVO = Common.ckSpaceLog(request);
if (msgVO != null) {
return msgVO;
}
return new MessageVO("magic_groupid_not_allowed");
}
String[] tempA = (String[]) magic.get("forbiddengid");
if (tempA != null && tempA.length > 0 && Common.in_array(tempA, space.get("groupid"))) {
return new MessageVO("magic_groupid_limit");
}
Map<String, Object> setData = new HashMap<String, Object>();
setData.put("mid", mid);
setData.put("storage", magic.get("providecount"));
setData.put("lastprovide", sGlobal.get("timestamp"));
List<Map<String, Object>> query = dataBaseService.executeQuery("SELECT * FROM "
+ JavaCenterHome.getTableName("magicstore") + " WHERE mid = '" + mid + "'");
Map<String, Object> magicstore = null;
if (query.size() > 0) {
magicstore = query.get(0);
}
if (magicstore == null) {
magicstore = new HashMap<String, Object>();
dataBaseService.insertTable("magicstore", setData, false, false);
magicstore.put("storage", magic.get("providecount"));
} else if ((Integer) magicstore.get("storage") < (Integer) magic.get("providecount")
&& (Integer) magicstore.get("lastprovide") + (Integer) magic.get("provideperoid") < (Integer) sGlobal
.get("timestamp")) {
setData.remove("mid");
Map<String, Object> whereData = new HashMap<String, Object>(1);
whereData.put("mid", mid);
dataBaseService.updateTable("magicstore", setData, whereData);
magicstore.put("storage", magic.get("providecount"));
}
if ((Integer) magicstore.get("storage") < 1) {
String nexttime = Common.sgmdate(request, "MM-dd HH:mm", (Integer) magicstore.get("lastprovide")
+ (Integer) magic.get("provideperoid"));
return new MessageVO("not_enough_storage", null, 0, nexttime);
}
int discount = (Integer) Common.checkPerm(request, response, sGlobal, "magicdiscount");
int charge = (Integer) magic.get("charge");
if (discount > 0) {
charge = charge * discount / 10;
if (charge < 1) {
charge = 1;
}
} else if (discount < 0) {
charge = 0;
}
magicstore.put("maxbuy", charge == 0 ? magicstore.get("storage") : Math.min((Integer) magicstore
.get("storage"), (int) Math.floor((Integer) space.get("credit") / (float) charge)));
query = dataBaseService.executeQuery("SELECT * FROM " + JavaCenterHome.getTableName("usermagic")
+ " WHERE uid='" + sGlobal.get("supe_uid") + "' AND mid = 'coupon'");
Map<String, Object> coupon = null;
if (query.size() > 0) {
coupon = query.get(0);
}
Map<String, Object> data = new HashMap<String, Object>();
data.put("magicstore", magicstore);
data.put("coupon", coupon);
data.put("discount", discount);
data.put("charge", charge);
return data;
}
public Object magic_buy_post(HttpServletRequest request, HttpServletResponse response,
Map<String, Object> sGlobal, Map<String, Object> space, Map<String, Object> magic,
Map<String, Object> magicstore, Map<String, Object> coupon) {
if (Common.empty(magic)) {
return new MessageVO("unknown_magic");
}
String mid = (String) magic.get("mid");
int buynum = Common.intval(request.getParameter("buynum"));
if (buynum < 1) {
return new MessageVO("bad_buynum");
}
if ((Integer) magicstore.get("storage") < buynum) {
String nexttime = Common.sgmdate(request, "MM-dd HH:mm", (Integer) magicstore.get("lastprovide")
+ (Integer) magic.get("provideperoid"));
return new MessageVO("not_enough_storage", null, 0, nexttime);
}
int coupon_post = Common.intval(request.getParameter("coupon"));
int discard = 0;
if (coupon_post != 0) {
if ((Integer) coupon.get("count") < coupon_post) {
return new MessageVO("not_enough_coupon");
}
discard = 100 * coupon_post;
}
int discount = (Integer) Common.checkPerm(request, response, sGlobal, "magicdiscount");
if (discount > 0) {
int charge = (Integer) magic.get("charge") * discount / 10;
if (charge < 1) {
charge = 1;
}
magic.put("charge", charge);
} else if (discount < 0) {
magic.put("charge", 0);
}
int charge = buynum * (Integer) magic.get("charge") - discard;
charge = charge > 0 ? charge : 0;
if (charge > (Integer) space.get("credit")) {
return new MessageVO("credit_is_not_enough");
}
int supe_uid = (Integer) sGlobal.get("supe_uid");
dataBaseService.execute("UPDATE " + JavaCenterHome.getTableName("magicstore")
+ " SET storage = storage - " + buynum + ", sellcount = sellcount + " + buynum
+ ", sellcredit = sellcredit + " + charge + " WHERE mid = '" + mid + "'");
int experience = buynum * (Integer) magic.get("experience");
dataBaseService.execute("UPDATE " + JavaCenterHome.getTableName("space") + " SET credit = credit - "
+ charge + ", experience = experience + '" + experience + "' WHERE uid = '" + supe_uid + "'");
List<Map<String, Object>> query = dataBaseService.executeQuery("SELECT * FROM "
+ JavaCenterHome.getTableName("usermagic") + " WHERE uid='" + supe_uid + "' AND mid='" + mid
+ "'");
int count = buynum;
if (query.size() > 0) {
count += (Integer) query.get(0).get("count");
}
String username = (String) sGlobal.get("username");
dataBaseService.execute("REPLACE " + JavaCenterHome.getTableName("usermagic")
+ "(uid, username, mid, count) VALUES ('" + supe_uid + "', '" + username + "', '" + mid
+ "', '" + count + "')");
Map<String, Object> insertData = new HashMap<String, Object>();
insertData.put("uid", supe_uid);
insertData.put("username", sGlobal.get("supe_username"));
insertData.put("mid", mid);
insertData.put("count", buynum);
insertData.put("type", 1);
insertData.put("credit", charge);
insertData.put("dateline", sGlobal.get("timestamp"));
dataBaseService.insertTable("magicinlog", insertData, false, false);
if (coupon_post != 0) {
dataBaseService.execute("UPDATE " + JavaCenterHome.getTableName("usermagic")
+ " SET count = count - " + coupon_post + " WHERE uid='" + supe_uid
+ "' AND mid = 'coupon'");
}
return charge;
}
public Object magic_check_idtype(Map<String, Object> sGlobal, Object id, String idtype) {
Map<String, Object> value = null;
CpService cpService = (CpService) BeanFactory.getBean("cpService");
String tablename = cpService.getTablebyIdType(idtype);
if (tablename != null) {
List<Map<String, Object>> query = dataBaseService.executeQuery("SELECT * FROM "
+ JavaCenterHome.getTableName(tablename) + " WHERE " + idtype + "='" + id
+ "' AND uid = '" + sGlobal.get("supe_uid") + "'");
value = query.size() > 0 ? query.get(0) : null;
}
if (Common.empty(value)) {
return new MessageVO("magicuse_bad_object");
}
return value;
}
public void magic_use(Map<String, Object> sGlobal, String mid, Map<String, Object> magicuselog,
boolean replace) {
if (magicuselog == null) {
magicuselog = new HashMap<String, Object>();
}
int supe_uid = (Integer) sGlobal.get("supe_uid");
dataBaseService.execute("UPDATE " + JavaCenterHome.getTableName("usermagic")
+ " SET count = count - 1 WHERE uid = '" + supe_uid + "' AND mid = '" + mid
+ "' AND count > 0");
Map<String, Object> value = null;
if (replace) {
String whereSQL = "";
Integer tempId = (Integer) magicuselog.get("id");
if (tempId != null && tempId != 0) {
whereSQL = " AND id='" + tempId + "' AND idtype='" + magicuselog.get("idtype") + "'";
}
List<Map<String, Object>> query = dataBaseService.executeQuery("SELECT * FROM "
+ JavaCenterHome.getTableName("magicuselog") + " WHERE uid = '" + supe_uid
+ "' AND mid = '" + mid + "' " + whereSQL);
value = query.size() > 0 ? query.get(0) : null;
}
magicuselog.put("mid", mid);
magicuselog.put("uid", supe_uid);
magicuselog.put("username", sGlobal.get("supe_username"));
magicuselog.put("dateline", sGlobal.get("timestamp"));
int count = 0;
int logid = 0;
if (value != null) {
count = (Integer) value.get("count");
logid = (Integer) value.get("logid");
}
if (count != 0) {
magicuselog.put("count", count + 1);
} else {
magicuselog.put("count", 1);
}
if (logid != 0) {
Map<String, Object> whereData = new HashMap<String, Object>();
whereData.put("logid", logid);
dataBaseService.updateTable("magicuselog", magicuselog, whereData);
} else {
if (magicuselog.get("data") == null) {
magicuselog.put("data", "");
}
dataBaseService.insertTable("magicuselog", magicuselog, false, false);
}
}
}