| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- package com.ljsd.controller;
- import com.google.gson.Gson;
- import com.ljsd.channel.Mock361YXSDK;
- import com.ljsd.channel.MockQuickSDK;
- import com.ljsd.pojo.ResMsg;
- import com.ljsd.util.BaseGlobal;
- import com.ljsd.util.StringUtils;
- import com.ljsd.util.TimeUtil;
- import com.mongodb.BasicDBObject;
- import com.mongodb.DBObject;
- import org.apache.http.client.methods.CloseableHttpResponse;
- import org.apache.http.client.methods.HttpGet;
- import org.apache.http.client.utils.URIBuilder;
- import org.apache.http.impl.client.CloseableHttpClient;
- import org.apache.http.impl.client.HttpClients;
- import org.apache.http.util.EntityUtils;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import java.io.IOException;
- import java.io.PrintWriter;
- import java.security.SecureRandom;
- import java.util.HashMap;
- import java.util.Map;
- public class CreateOrderController extends HttpServlet {
- private static final Logger LOGGER = LoggerFactory.getLogger(CreateOrderController.class);
- private static Gson gson = new Gson();
- private final static String _COLLECTION_PAY = "pay";
- public CreateOrderController() {
- super();
- }
- public void destroy() {
- super.destroy();
- }
- public void doGet(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- this.doPost(request, response);
- }
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- request.setCharacterEncoding("UTF-8");
- response.setCharacterEncoding("UTF-8");
- response.setContentType("application/json; charset=utf-8");
- // /CreatOrder?openid=test001&uid=10000026®ion=10001&channel=Android_QuickGame&pay_item=4000&price=1800
- String uid = request.getParameter("uid");
- String openId = request.getParameter("openid");
- String serverId = request.getParameter("region");
- String channel = request.getParameter("channel");
- String payItem = request.getParameter("pay_item");
- String price = request.getParameter("price");
- LOGGER.info("CreateOrderController request = {}", request);
- ResMsg resMsg = new ResMsg();
- resMsg.setCode(1);
- String orderId = generateOrderNumber(uid);
- DBObject payInfo = new BasicDBObject();
- payInfo.put("uid", uid);
- payInfo.put("pay_item", payItem);
- payInfo.put("region", serverId);
- payInfo.put("channel", channel);
- payInfo.put("cporderId", orderId);
- payInfo.put("openid", openId);
- payInfo.put("creattime", String.valueOf(TimeUtil.getTimeNow()));
- payInfo.put("money", Integer.valueOf(price));
- BaseGlobal.getInstance().mongoDBPool.save(_COLLECTION_PAY, payInfo);
- Map<String,String> parms = new HashMap<>();
- parms.put("orderId", orderId);
- resMsg.setParms(parms);
- resMsg.setParms(parms);
- resMsg.setCode(1);
- try (PrintWriter out = response.getWriter();){
- resMsg.setCode(0);
- out.print(gson.toJson(resMsg));
- }catch (Exception e){
- e.printStackTrace();
- }
- }
- // 订单号规则:玩家uid-6位随机数-校验码
- // 订单号各部分长度(可根据需求调整)
- private static final int RANDOM_LENGTH = 6; // 随机数长度
- /**
- * 生成唯一订单号
- * @param userId 用户ID(需为正整数)
- * @return 订单号(格式:时间戳-用户ID-随机数-校验码)
- */
- public static String generateOrderNumber(String userId) {
- // 1. 生成6位随机数(000000-999999)
- String randomPart = generateRandomString(RANDOM_LENGTH);
- // 2. 计算校验码(简单示例:前几位的和模100)
- String checksum = calculateChecksum(userId + randomPart);
- // 3. 拼接最终订单号
- return String.join("-", userId, randomPart, checksum);
- }
- /**
- * 生成指定长度的随机数字字符串
- */
- private static String generateRandomString(int length) {
- SecureRandom random = new SecureRandom(); // 更安全的随机数生成器
- StringBuilder sb = new StringBuilder();
- for (int i = 0; i < length; i++) {
- sb.append(random.nextInt(10)); // 0-9随机数
- }
- return sb.toString();
- }
- /**
- * 计算简单校验码(示例:前N位之和模100)
- * @param source 源字符串(如时间戳+用户ID+随机数)
- * @return 校验码(2位数字)
- */
- private static String calculateChecksum(String source) {
- int sum = 0;
- for (char c : source.toCharArray()) {
- if (Character.isDigit(c)) {
- sum += Character.getNumericValue(c);
- }
- }
- int checksum = sum % 100; // 模100得到两位数
- return String.format("%02d", checksum);
- }
- }
|