Мы надеемся, что когда кто -то приобретает, проверяет, является ли количество продукта достаточным. Если в инвентаре есть избыток, то пользователь сможет успешно его купить, а затем изменить инвентарь. Если пользователь очередится, чтобы купить один за другим, конечно, нет проблем.
Но на самом деле может случиться так, что несколько пользователей приходят к покупке одновременно и одновременно проверяют инвентарь. Это может случиться так, что инвентарь достаточно для покупки только одного из них, но, поскольку инвентарь не был уменьшен, несколько человек успешно его приобретут, а затем инвентарь будет уменьшен до негативного и перепроданного. Это, вероятно, произойдет, когда большое количество пользователей покупает одновременно одновременно.
Итак, мы регулируем заказ. Когда некоторые пользователи покупают, мы сначала сокращаем инвентарь. Тогда вы должны спросить, как это уменьшить? Это также уменьшится, когда инвентарь недостаточно для одного человека?
Мы предполагаем, что у каждого продукта есть уникальный код покупки (предварительно готовый перед началом покупки), а количество кодов покупок, которые пользователь получает,-это количество копий, которые он купил. Затем, когда пользователь покупает, наш первый шаг - изменить статус счастливого кода с действительного на недействительный и отметить его идентификатором покупателя.
Копия кода выглядит следующим образом: «Обновление` lottery_number` set `status` = неверный статус,` user_id` = идентификатор пользователя покупателя, `current_time` = timestamp, где` govel_id` = идентификатор продукта и `` stusttion` = допустимый предел состояния приобретенные копии ";
Таким образом, MySQL даст нам результат возврата, называемый влиянием количества строк, что означает, что это утверждение обновляет данные о том, сколько строк он влияет. Это влияет на количество строк, это количество копий продукта, который он фактически приобрел. Если количество строк составляет 0, это означает, что ни одна копия не была успешно приобретена, что означает, что продукт был посвящен покупке.
Реализация Java:
/** * Generate the purchase code of the product <Insert a large amount of data> * * @param goodsIssue * @author Nifury */public void insertLotteryNumbers(GoodsIssue goodsIssue) { String prefix = "INSERT INTO `lottery_number` (`goods_id`, `periods`,`luck_number`, `create_time`, `status`, `issue_id` ) Значения /n "; TimeStamp Now = New TimeStamp (System.CurrentTimeMiMillis ()); Соединение con = null; try {con = jdbctemplate.getDatasource (). getConnection (); con.setautocommit (false); Подготовленное Statatement PST = con.PreArestatement ("" "); LONG TOTLE = GOODSISSUE.GETTOTALSHARE (); // Общее количество посетителей для (int i = 0; i <total; i += 10000) {// 10 000 представлений один раз в StringBuffer Suffix = new StringBuffer (); Список <integer> numbers = new ArrayList <Integer> (); for (int j = 0; j <10000 && i+j <total; j ++) {number.Add (10000001+i+j); } Collections.shuffle (numbers); // cramble Lucky Code for (int n = 0, length = number.size (); n <length; n ++) {суффикс.ppend ("(" + goodsisue.getgoodsid () + "," + gostix.getperiods () + ", + numbers.get (n) +", " + теперь. GoodsIssue.getIssueid () + ")/n,"); } // Создание полной строки sql sql = prefix + суффикс.substring (0, суффикс.length () - 2); PST.AddBatch (SQL); pst.executebatch (); con.commit (); } con.setautocommit (true); // восстановить pst.close (); con.close (); } catch (Exception e) {e.printstackTrace (); try {// rollback transaction con.rollback (); con.setautocommit (true); con.close (); } catch (sqlexception e1) {e1.printstacktrace (); }// Восстановить }}Назначьте код покупки (наш бизнес должен показать код покупки покупателю, чтобы получить возврат)
/** * Случайно Получите код покупки через продукт anguage_id (каждый продукт имеет уникальный вопрос на проблеме) (используемый код покупки будет установлен в недействительное состояние) * @param visionid * @param Количество объектов объекта @param. сумма, Long UserId) {List <totterynumber> numberList = new ArrayList <totterynumber> (); try {long currenttime = System.currentTimeMillis (); String updateUserid = "update` lottery_number` set `status` = 0,` user_id` =?, `Current_time` =? Где` muess_id` =? И `status` = 1 ограничение?"; int rownum = jdbctemplate.update (updateUserid, userId, currentTime, viewID, сумма); if (rownum> 0) {// все еще существуют достоверные коды покупок влево и справа? Object [] buyargs = {visionid, userid, currenttime}; numberlist = jdbctemplate.query (Query + "где` muess_id` =? и `status '= 0 и` user_id` =? и `current_time` =?", Buyargs, LotterynumberMapper); }} catch (deadlockloserdataaccessexception e) { System.out.println("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.