Nous espérons que lorsque quelqu'un achète, vérifiez si la quantité de produit est suffisante. S'il y a un excédent dans l'inventaire, l'utilisateur pourra l'acheter avec succès, puis modifier l'inventaire. Si l'utilisateur fait la queue pour acheter un par un, bien sûr, il n'y a pas de problème.
Mais en réalité, il se peut que plusieurs utilisateurs viennent acheter en même temps et vérifier l'inventaire en même temps. Il se peut que l'inventaire ne soit suffisant que pour que l'un d'eux puisse acheter, mais comme l'inventaire n'a pas été réduit, plusieurs personnes l'achèteront avec succès, puis l'inventaire sera réduit à négatif et survente. Cela est très susceptible de se produire lorsqu'un grand nombre d'utilisateurs achètent en même temps en même temps.
Nous ajustez donc la commande. Lorsque certains utilisateurs achètent, nous réduisons d'abord l'inventaire. Ensuite, vous devez demander comment le réduire? Est-ce que cela réduira également lorsque l'inventaire ne suffira pas à une seule personne?
Nous supposons que chaque produit a un code d'achat unique (pré-fait avant de commencer l'achat), et le nombre de codes d'achat que l'utilisateur saisit est le nombre de copies qu'il a achetées. Ensuite, lorsqu'un utilisateur achète, notre première étape consiste à modifier l'état du code chanceux de valide à invalide et à le marquer avec son ID d'acheteur.
La copie de code est la suivante: "Mettre à jour` LOTTERY_NUMBER` SET `Status` = Statut invalid,` User_ID` = ID utilisateur de l'acheteur, `current_time` = horodatage où` bourse_id` = ID de produit Snatted et `Statut` = Limite de statut valide Acheté des copies";
De cette façon, MySQL nous donnera un résultat de retour, appelé affectant le nombre de lignes, ce qui signifie que cette déclaration met à jour les données du nombre de lignes qu'il affecte. Cela affectant le nombre de lignes est le nombre de copies du produit qu'il a réellement achetées. Si le nombre de lignes est de 0, cela signifie qu'aucune copie n'a été achetée avec succès, ce qui signifie que le produit a été précipité pour acheter.
Implémentation Java:
/ ** * Générer le code d'achat du produit <insérer une grande quantité de données> * * @param bourseSissue * @Author Nifury * / public void insertLotTeRynUmbers (woodsussUeSisSue) {String Prefix = "INSERT Into` Lottery_number` (`` Goods_id`, `périodes ',' Luck_number`, 'Create_time`' '' Dissen ) Valeurs / n "; TimeStamp Now = Nouveau horodatage (System.CurrentTimeMillis ()); Connexion con = null; essayez {con = jdbctemplate.getDataSource (). getConnection (); con.setAutoCommit (false); PréparéStatement PST = CON.PrepareStatement (""); Long Total = WoodsIsSue.getTotalShare (); // Nombre total de visiteurs pour (int i = 0; i <Total; i + = 10000) {// 10 000 soumissions une fois StringBuffer suffixe = new StringBuffer (); List <Integer> nombres = new ArrayList <Neger> (); pour (int j = 0; j <10000 && i + j <total; j ++) {nombres.add (10000001 + i + j); } Collections.shuffle (nombres); // brouille le code chanceux pour (int n = 0, longueur = nombres.size (); n <length; n ++) {suffix.append ("(" + bourseSiSue.getGoodSid () + "," + bourse.Getperiods () + "," + nombres.get (n) + "," + maintenant. boursier.getStissueId () + ") / n,"); } // Créez la chaîne SQL complète SQL = Prefix + suffixe.substring (0, suffixe.length () - 2); pst.addbatch (SQL); PST.ExecuteBatch (); Con.Commit (); } con.setAutoCommit (true); // restaurer pst.close (); con.close (); } catch (exception e) {e.printStackTrace (); try {// transaction rollback con.rollback (); con.setAutoCommit (true); con.close (); } catch (sqlexception e1) {e1.printStackTrace (); }// Restaurer }}Attribuez un code d'achat (notre entreprise doit afficher le code d'achat à l'acheteur, donc il y a un retour)
/ ** * Obtenez au hasard le code d'achat via le produit PRODUIT_ID (chaque produit a un problème unique_id par numéro) (le code d'achat utilisé sera défini sur l'état non valide) * @param problème * @param Montant Liste des objets d'achat * @author Nifury 2016-7-22 * / Liste publique <LotteryNumber> QueryNewwissue2 (Long, Litter, Longumber <LotteryNumber> QueryNewwisse Montant, Long UserId) {list <LotteryNumber> NumberList = new ArrayList <TOTTERyNumber> (); try {long currentTime = System.currentTimemillis (); String UpdateUserID = "Update` LOTTERY_NUMBER` SET `Status` = 0,` User_id` =?, `Current_time` =? Où` Issue_id` =? Et `Status` = 1 limite?"; int Rownum = jdbCTemplate.update (UpdateSeUSID, UserId, CurrentTime, IssueId, Montant); if (rownum> 0) {// il y a toujours des codes d'achat valides à gauche et à droite? Object [] BuyArgs = {problème, userId, currentTime}; NumberList = JDBCTemplate.Query (Query + "Where` problème_id` =? Et `Status` = 0 et` User_id` =? Et `Current_time` =?", Buyargs, LotterynumberMapper); }} catch (dalplockloserdataaccessException e) { System.out.println("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.