[
  {
    "path": ".gitignore",
    "content": "/target/\n!.mvn/wrapper/maven-wrapper.jar\n\n### STS ###\n.apt_generated\n.classpath\n.factorypath\n.project\n.settings\n.springBeans\n.sts4-cache\n\n### IntelliJ IDEA ###\n.idea\n*.iws\n*.iml\n*.ipr\n\n### NetBeans ###\n/nbproject/private/\n/build/\n/nbbuild/\n/dist/\n/nbdist/\n/.nb-gradle/"
  },
  {
    "path": "LICENSE",
    "content": "                    GNU GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n                            Preamble\n\n  The GNU General Public License is a free, copyleft license for\nsoftware and other kinds of works.\n\n  The licenses for most software and other practical works are designed\nto take away your freedom to share and change the works.  By contrast,\nthe GNU General Public License is intended to guarantee your freedom to\nshare and change all versions of a program--to make sure it remains free\nsoftware for all its users.  We, the Free Software Foundation, use the\nGNU General Public License for most of our software; it applies also to\nany other work released this way by its authors.  You can apply it to\nyour programs, too.\n\n  When we speak of free software, we are referring to freedom, not\nprice.  Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthem if you wish), that you receive source code or can get it if you\nwant it, that you can change the software or use pieces of it in new\nfree programs, and that you know you can do these things.\n\n  To protect your rights, we need to prevent others from denying you\nthese rights or asking you to surrender the rights.  Therefore, you have\ncertain responsibilities if you distribute copies of the software, or if\nyou modify it: responsibilities to respect the freedom of others.\n\n  For example, if you distribute copies of such a program, whether\ngratis or for a fee, you must pass on to the recipients the same\nfreedoms that you received.  You must make sure that they, too, receive\nor can get the source code.  And you must show them these terms so they\nknow their rights.\n\n  Developers that use the GNU GPL protect your rights with two steps:\n(1) assert copyright on the software, and (2) offer you this License\ngiving you legal permission to copy, distribute and/or modify it.\n\n  For the developers' and authors' protection, the GPL clearly explains\nthat there is no warranty for this free software.  For both users' and\nauthors' sake, the GPL requires that modified versions be marked as\nchanged, so that their problems will not be attributed erroneously to\nauthors of previous versions.\n\n  Some devices are designed to deny users access to install or run\nmodified versions of the software inside them, although the manufacturer\ncan do so.  This is fundamentally incompatible with the aim of\nprotecting users' freedom to change the software.  The systematic\npattern of such abuse occurs in the area of products for individuals to\nuse, which is precisely where it is most unacceptable.  Therefore, we\nhave designed this version of the GPL to prohibit the practice for those\nproducts.  If such problems arise substantially in other domains, we\nstand ready to extend this provision to those domains in future versions\nof the GPL, as needed to protect the freedom of users.\n\n  Finally, every program is threatened constantly by software patents.\nStates should not allow patents to restrict development and use of\nsoftware on general-purpose computers, but in those that do, we wish to\navoid the special danger that patents applied to a free program could\nmake it effectively proprietary.  To prevent this, the GPL assures that\npatents cannot be used to render the program non-free.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.\n\n                       TERMS AND CONDITIONS\n\n  0. Definitions.\n\n  \"This License\" refers to version 3 of the GNU General Public License.\n\n  \"Copyright\" also means copyright-like laws that apply to other kinds of\nworks, such as semiconductor masks.\n\n  \"The Program\" refers to any copyrightable work licensed under this\nLicense.  Each licensee is addressed as \"you\".  \"Licensees\" and\n\"recipients\" may be individuals or organizations.\n\n  To \"modify\" a work means to copy from or adapt all or part of the work\nin a fashion requiring copyright permission, other than the making of an\nexact copy.  The resulting work is called a \"modified version\" of the\nearlier work or a work \"based on\" the earlier work.\n\n  A \"covered work\" means either the unmodified Program or a work based\non the Program.\n\n  To \"propagate\" a work means to do anything with it that, without\npermission, would make you directly or secondarily liable for\ninfringement under applicable copyright law, except executing it on a\ncomputer or modifying a private copy.  Propagation includes copying,\ndistribution (with or without modification), making available to the\npublic, and in some countries other activities as well.\n\n  To \"convey\" a work means any kind of propagation that enables other\nparties to make or receive copies.  Mere interaction with a user through\na computer network, with no transfer of a copy, is not conveying.\n\n  An interactive user interface displays \"Appropriate Legal Notices\"\nto the extent that it includes a convenient and prominently visible\nfeature that (1) displays an appropriate copyright notice, and (2)\ntells the user that there is no warranty for the work (except to the\nextent that warranties are provided), that licensees may convey the\nwork under this License, and how to view a copy of this License.  If\nthe interface presents a list of user commands or options, such as a\nmenu, a prominent item in the list meets this criterion.\n\n  1. Source Code.\n\n  The \"source code\" for a work means the preferred form of the work\nfor making modifications to it.  \"Object code\" means any non-source\nform of a work.\n\n  A \"Standard Interface\" means an interface that either is an official\nstandard defined by a recognized standards body, or, in the case of\ninterfaces specified for a particular programming language, one that\nis widely used among developers working in that language.\n\n  The \"System Libraries\" of an executable work include anything, other\nthan the work as a whole, that (a) is included in the normal form of\npackaging a Major Component, but which is not part of that Major\nComponent, and (b) serves only to enable use of the work with that\nMajor Component, or to implement a Standard Interface for which an\nimplementation is available to the public in source code form.  A\n\"Major Component\", in this context, means a major essential component\n(kernel, window system, and so on) of the specific operating system\n(if any) on which the executable work runs, or a compiler used to\nproduce the work, or an object code interpreter used to run it.\n\n  The \"Corresponding Source\" for a work in object code form means all\nthe source code needed to generate, install, and (for an executable\nwork) run the object code and to modify the work, including scripts to\ncontrol those activities.  However, it does not include the work's\nSystem Libraries, or general-purpose tools or generally available free\nprograms which are used unmodified in performing those activities but\nwhich are not part of the work.  For example, Corresponding Source\nincludes interface definition files associated with source files for\nthe work, and the source code for shared libraries and dynamically\nlinked subprograms that the work is specifically designed to require,\nsuch as by intimate data communication or control flow between those\nsubprograms and other parts of the work.\n\n  The Corresponding Source need not include anything that users\ncan regenerate automatically from other parts of the Corresponding\nSource.\n\n  The Corresponding Source for a work in source code form is that\nsame work.\n\n  2. Basic Permissions.\n\n  All rights granted under this License are granted for the term of\ncopyright on the Program, and are irrevocable provided the stated\nconditions are met.  This License explicitly affirms your unlimited\npermission to run the unmodified Program.  The output from running a\ncovered work is covered by this License only if the output, given its\ncontent, constitutes a covered work.  This License acknowledges your\nrights of fair use or other equivalent, as provided by copyright law.\n\n  You may make, run and propagate covered works that you do not\nconvey, without conditions so long as your license otherwise remains\nin force.  You may convey covered works to others for the sole purpose\nof having them make modifications exclusively for you, or provide you\nwith facilities for running those works, provided that you comply with\nthe terms of this License in conveying all material for which you do\nnot control copyright.  Those thus making or running the covered works\nfor you must do so exclusively on your behalf, under your direction\nand control, on terms that prohibit them from making any copies of\nyour copyrighted material outside their relationship with you.\n\n  Conveying under any other circumstances is permitted solely under\nthe conditions stated below.  Sublicensing is not allowed; section 10\nmakes it unnecessary.\n\n  3. Protecting Users' Legal Rights From Anti-Circumvention Law.\n\n  No covered work shall be deemed part of an effective technological\nmeasure under any applicable law fulfilling obligations under article\n11 of the WIPO copyright treaty adopted on 20 December 1996, or\nsimilar laws prohibiting or restricting circumvention of such\nmeasures.\n\n  When you convey a covered work, you waive any legal power to forbid\ncircumvention of technological measures to the extent such circumvention\nis effected by exercising rights under this License with respect to\nthe covered work, and you disclaim any intention to limit operation or\nmodification of the work as a means of enforcing, against the work's\nusers, your or third parties' legal rights to forbid circumvention of\ntechnological measures.\n\n  4. Conveying Verbatim Copies.\n\n  You may convey verbatim copies of the Program's source code as you\nreceive it, in any medium, provided that you conspicuously and\nappropriately publish on each copy an appropriate copyright notice;\nkeep intact all notices stating that this License and any\nnon-permissive terms added in accord with section 7 apply to the code;\nkeep intact all notices of the absence of any warranty; and give all\nrecipients a copy of this License along with the Program.\n\n  You may charge any price or no price for each copy that you convey,\nand you may offer support or warranty protection for a fee.\n\n  5. Conveying Modified Source Versions.\n\n  You may convey a work based on the Program, or the modifications to\nproduce it from the Program, in the form of source code under the\nterms of section 4, provided that you also meet all of these conditions:\n\n    a) The work must carry prominent notices stating that you modified\n    it, and giving a relevant date.\n\n    b) The work must carry prominent notices stating that it is\n    released under this License and any conditions added under section\n    7.  This requirement modifies the requirement in section 4 to\n    \"keep intact all notices\".\n\n    c) You must license the entire work, as a whole, under this\n    License to anyone who comes into possession of a copy.  This\n    License will therefore apply, along with any applicable section 7\n    additional terms, to the whole of the work, and all its parts,\n    regardless of how they are packaged.  This License gives no\n    permission to license the work in any other way, but it does not\n    invalidate such permission if you have separately received it.\n\n    d) If the work has interactive user interfaces, each must display\n    Appropriate Legal Notices; however, if the Program has interactive\n    interfaces that do not display Appropriate Legal Notices, your\n    work need not make them do so.\n\n  A compilation of a covered work with other separate and independent\nworks, which are not by their nature extensions of the covered work,\nand which are not combined with it such as to form a larger program,\nin or on a volume of a storage or distribution medium, is called an\n\"aggregate\" if the compilation and its resulting copyright are not\nused to limit the access or legal rights of the compilation's users\nbeyond what the individual works permit.  Inclusion of a covered work\nin an aggregate does not cause this License to apply to the other\nparts of the aggregate.\n\n  6. Conveying Non-Source Forms.\n\n  You may convey a covered work in object code form under the terms\nof sections 4 and 5, provided that you also convey the\nmachine-readable Corresponding Source under the terms of this License,\nin one of these ways:\n\n    a) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by the\n    Corresponding Source fixed on a durable physical medium\n    customarily used for software interchange.\n\n    b) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by a\n    written offer, valid for at least three years and valid for as\n    long as you offer spare parts or customer support for that product\n    model, to give anyone who possesses the object code either (1) a\n    copy of the Corresponding Source for all the software in the\n    product that is covered by this License, on a durable physical\n    medium customarily used for software interchange, for a price no\n    more than your reasonable cost of physically performing this\n    conveying of source, or (2) access to copy the\n    Corresponding Source from a network server at no charge.\n\n    c) Convey individual copies of the object code with a copy of the\n    written offer to provide the Corresponding Source.  This\n    alternative is allowed only occasionally and noncommercially, and\n    only if you received the object code with such an offer, in accord\n    with subsection 6b.\n\n    d) Convey the object code by offering access from a designated\n    place (gratis or for a charge), and offer equivalent access to the\n    Corresponding Source in the same way through the same place at no\n    further charge.  You need not require recipients to copy the\n    Corresponding Source along with the object code.  If the place to\n    copy the object code is a network server, the Corresponding Source\n    may be on a different server (operated by you or a third party)\n    that supports equivalent copying facilities, provided you maintain\n    clear directions next to the object code saying where to find the\n    Corresponding Source.  Regardless of what server hosts the\n    Corresponding Source, you remain obligated to ensure that it is\n    available for as long as needed to satisfy these requirements.\n\n    e) Convey the object code using peer-to-peer transmission, provided\n    you inform other peers where the object code and Corresponding\n    Source of the work are being offered to the general public at no\n    charge under subsection 6d.\n\n  A separable portion of the object code, whose source code is excluded\nfrom the Corresponding Source as a System Library, need not be\nincluded in conveying the object code work.\n\n  A \"User Product\" is either (1) a \"consumer product\", which means any\ntangible personal property which is normally used for personal, family,\nor household purposes, or (2) anything designed or sold for incorporation\ninto a dwelling.  In determining whether a product is a consumer product,\ndoubtful cases shall be resolved in favor of coverage.  For a particular\nproduct received by a particular user, \"normally used\" refers to a\ntypical or common use of that class of product, regardless of the status\nof the particular user or of the way in which the particular user\nactually uses, or expects or is expected to use, the product.  A product\nis a consumer product regardless of whether the product has substantial\ncommercial, industrial or non-consumer uses, unless such uses represent\nthe only significant mode of use of the product.\n\n  \"Installation Information\" for a User Product means any methods,\nprocedures, authorization keys, or other information required to install\nand execute modified versions of a covered work in that User Product from\na modified version of its Corresponding Source.  The information must\nsuffice to ensure that the continued functioning of the modified object\ncode is in no case prevented or interfered with solely because\nmodification has been made.\n\n  If you convey an object code work under this section in, or with, or\nspecifically for use in, a User Product, and the conveying occurs as\npart of a transaction in which the right of possession and use of the\nUser Product is transferred to the recipient in perpetuity or for a\nfixed term (regardless of how the transaction is characterized), the\nCorresponding Source conveyed under this section must be accompanied\nby the Installation Information.  But this requirement does not apply\nif neither you nor any third party retains the ability to install\nmodified object code on the User Product (for example, the work has\nbeen installed in ROM).\n\n  The requirement to provide Installation Information does not include a\nrequirement to continue to provide support service, warranty, or updates\nfor a work that has been modified or installed by the recipient, or for\nthe User Product in which it has been modified or installed.  Access to a\nnetwork may be denied when the modification itself materially and\nadversely affects the operation of the network or violates the rules and\nprotocols for communication across the network.\n\n  Corresponding Source conveyed, and Installation Information provided,\nin accord with this section must be in a format that is publicly\ndocumented (and with an implementation available to the public in\nsource code form), and must require no special password or key for\nunpacking, reading or copying.\n\n  7. Additional Terms.\n\n  \"Additional permissions\" are terms that supplement the terms of this\nLicense by making exceptions from one or more of its conditions.\nAdditional permissions that are applicable to the entire Program shall\nbe treated as though they were included in this License, to the extent\nthat they are valid under applicable law.  If additional permissions\napply only to part of the Program, that part may be used separately\nunder those permissions, but the entire Program remains governed by\nthis License without regard to the additional permissions.\n\n  When you convey a copy of a covered work, you may at your option\nremove any additional permissions from that copy, or from any part of\nit.  (Additional permissions may be written to require their own\nremoval in certain cases when you modify the work.)  You may place\nadditional permissions on material, added by you to a covered work,\nfor which you have or can give appropriate copyright permission.\n\n  Notwithstanding any other provision of this License, for material you\nadd to a covered work, you may (if authorized by the copyright holders of\nthat material) supplement the terms of this License with terms:\n\n    a) Disclaiming warranty or limiting liability differently from the\n    terms of sections 15 and 16 of this License; or\n\n    b) Requiring preservation of specified reasonable legal notices or\n    author attributions in that material or in the Appropriate Legal\n    Notices displayed by works containing it; or\n\n    c) Prohibiting misrepresentation of the origin of that material, or\n    requiring that modified versions of such material be marked in\n    reasonable ways as different from the original version; or\n\n    d) Limiting the use for publicity purposes of names of licensors or\n    authors of the material; or\n\n    e) Declining to grant rights under trademark law for use of some\n    trade names, trademarks, or service marks; or\n\n    f) Requiring indemnification of licensors and authors of that\n    material by anyone who conveys the material (or modified versions of\n    it) with contractual assumptions of liability to the recipient, for\n    any liability that these contractual assumptions directly impose on\n    those licensors and authors.\n\n  All other non-permissive additional terms are considered \"further\nrestrictions\" within the meaning of section 10.  If the Program as you\nreceived it, or any part of it, contains a notice stating that it is\ngoverned by this License along with a term that is a further\nrestriction, you may remove that term.  If a license document contains\na further restriction but permits relicensing or conveying under this\nLicense, you may add to a covered work material governed by the terms\nof that license document, provided that the further restriction does\nnot survive such relicensing or conveying.\n\n  If you add terms to a covered work in accord with this section, you\nmust place, in the relevant source files, a statement of the\nadditional terms that apply to those files, or a notice indicating\nwhere to find the applicable terms.\n\n  Additional terms, permissive or non-permissive, may be stated in the\nform of a separately written license, or stated as exceptions;\nthe above requirements apply either way.\n\n  8. Termination.\n\n  You may not propagate or modify a covered work except as expressly\nprovided under this License.  Any attempt otherwise to propagate or\nmodify it is void, and will automatically terminate your rights under\nthis License (including any patent licenses granted under the third\nparagraph of section 11).\n\n  However, if you cease all violation of this License, then your\nlicense from a particular copyright holder is reinstated (a)\nprovisionally, unless and until the copyright holder explicitly and\nfinally terminates your license, and (b) permanently, if the copyright\nholder fails to notify you of the violation by some reasonable means\nprior to 60 days after the cessation.\n\n  Moreover, your license from a particular copyright holder is\nreinstated permanently if the copyright holder notifies you of the\nviolation by some reasonable means, this is the first time you have\nreceived notice of violation of this License (for any work) from that\ncopyright holder, and you cure the violation prior to 30 days after\nyour receipt of the notice.\n\n  Termination of your rights under this section does not terminate the\nlicenses of parties who have received copies or rights from you under\nthis License.  If your rights have been terminated and not permanently\nreinstated, you do not qualify to receive new licenses for the same\nmaterial under section 10.\n\n  9. Acceptance Not Required for Having Copies.\n\n  You are not required to accept this License in order to receive or\nrun a copy of the Program.  Ancillary propagation of a covered work\noccurring solely as a consequence of using peer-to-peer transmission\nto receive a copy likewise does not require acceptance.  However,\nnothing other than this License grants you permission to propagate or\nmodify any covered work.  These actions infringe copyright if you do\nnot accept this License.  Therefore, by modifying or propagating a\ncovered work, you indicate your acceptance of this License to do so.\n\n  10. Automatic Licensing of Downstream Recipients.\n\n  Each time you convey a covered work, the recipient automatically\nreceives a license from the original licensors, to run, modify and\npropagate that work, subject to this License.  You are not responsible\nfor enforcing compliance by third parties with this License.\n\n  An \"entity transaction\" is a transaction transferring control of an\norganization, or substantially all assets of one, or subdividing an\norganization, or merging organizations.  If propagation of a covered\nwork results from an entity transaction, each party to that\ntransaction who receives a copy of the work also receives whatever\nlicenses to the work the party's predecessor in interest had or could\ngive under the previous paragraph, plus a right to possession of the\nCorresponding Source of the work from the predecessor in interest, if\nthe predecessor has it or can get it with reasonable efforts.\n\n  You may not impose any further restrictions on the exercise of the\nrights granted or affirmed under this License.  For example, you may\nnot impose a license fee, royalty, or other charge for exercise of\nrights granted under this License, and you may not initiate litigation\n(including a cross-claim or counterclaim in a lawsuit) alleging that\nany patent claim is infringed by making, using, selling, offering for\nsale, or importing the Program or any portion of it.\n\n  11. Patents.\n\n  A \"contributor\" is a copyright holder who authorizes use under this\nLicense of the Program or a work on which the Program is based.  The\nwork thus licensed is called the contributor's \"contributor version\".\n\n  A contributor's \"essential patent claims\" are all patent claims\nowned or controlled by the contributor, whether already acquired or\nhereafter acquired, that would be infringed by some manner, permitted\nby this License, of making, using, or selling its contributor version,\nbut do not include claims that would be infringed only as a\nconsequence of further modification of the contributor version.  For\npurposes of this definition, \"control\" includes the right to grant\npatent sublicenses in a manner consistent with the requirements of\nthis License.\n\n  Each contributor grants you a non-exclusive, worldwide, royalty-free\npatent license under the contributor's essential patent claims, to\nmake, use, sell, offer for sale, import and otherwise run, modify and\npropagate the contents of its contributor version.\n\n  In the following three paragraphs, a \"patent license\" is any express\nagreement or commitment, however denominated, not to enforce a patent\n(such as an express permission to practice a patent or covenant not to\nsue for patent infringement).  To \"grant\" such a patent license to a\nparty means to make such an agreement or commitment not to enforce a\npatent against the party.\n\n  If you convey a covered work, knowingly relying on a patent license,\nand the Corresponding Source of the work is not available for anyone\nto copy, free of charge and under the terms of this License, through a\npublicly available network server or other readily accessible means,\nthen you must either (1) cause the Corresponding Source to be so\navailable, or (2) arrange to deprive yourself of the benefit of the\npatent license for this particular work, or (3) arrange, in a manner\nconsistent with the requirements of this License, to extend the patent\nlicense to downstream recipients.  \"Knowingly relying\" means you have\nactual knowledge that, but for the patent license, your conveying the\ncovered work in a country, or your recipient's use of the covered work\nin a country, would infringe one or more identifiable patents in that\ncountry that you have reason to believe are valid.\n\n  If, pursuant to or in connection with a single transaction or\narrangement, you convey, or propagate by procuring conveyance of, a\ncovered work, and grant a patent license to some of the parties\nreceiving the covered work authorizing them to use, propagate, modify\nor convey a specific copy of the covered work, then the patent license\nyou grant is automatically extended to all recipients of the covered\nwork and works based on it.\n\n  A patent license is \"discriminatory\" if it does not include within\nthe scope of its coverage, prohibits the exercise of, or is\nconditioned on the non-exercise of one or more of the rights that are\nspecifically granted under this License.  You may not convey a covered\nwork if you are a party to an arrangement with a third party that is\nin the business of distributing software, under which you make payment\nto the third party based on the extent of your activity of conveying\nthe work, and under which the third party grants, to any of the\nparties who would receive the covered work from you, a discriminatory\npatent license (a) in connection with copies of the covered work\nconveyed by you (or copies made from those copies), or (b) primarily\nfor and in connection with specific products or compilations that\ncontain the covered work, unless you entered into that arrangement,\nor that patent license was granted, prior to 28 March 2007.\n\n  Nothing in this License shall be construed as excluding or limiting\nany implied license or other defenses to infringement that may\notherwise be available to you under applicable patent law.\n\n  12. No Surrender of Others' Freedom.\n\n  If conditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot convey a\ncovered work so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you may\nnot convey it at all.  For example, if you agree to terms that obligate you\nto collect a royalty for further conveying from those to whom you convey\nthe Program, the only way you could satisfy both those terms and this\nLicense would be to refrain entirely from conveying the Program.\n\n  13. Use with the GNU Affero General Public License.\n\n  Notwithstanding any other provision of this License, you have\npermission to link or combine any covered work with a work licensed\nunder version 3 of the GNU Affero General Public License into a single\ncombined work, and to convey the resulting work.  The terms of this\nLicense will continue to apply to the part which is the covered work,\nbut the special requirements of the GNU Affero General Public License,\nsection 13, concerning interaction through a network will apply to the\ncombination as such.\n\n  14. Revised Versions of this License.\n\n  The Free Software Foundation may publish revised and/or new versions of\nthe GNU General Public License from time to time.  Such new versions will\nbe similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\n  Each version is given a distinguishing version number.  If the\nProgram specifies that a certain numbered version of the GNU General\nPublic License \"or any later version\" applies to it, you have the\noption of following the terms and conditions either of that numbered\nversion or of any later version published by the Free Software\nFoundation.  If the Program does not specify a version number of the\nGNU General Public License, you may choose any version ever published\nby the Free Software Foundation.\n\n  If the Program specifies that a proxy can decide which future\nversions of the GNU General Public License can be used, that proxy's\npublic statement of acceptance of a version permanently authorizes you\nto choose that version for the Program.\n\n  Later license versions may give you additional or different\npermissions.  However, no additional obligations are imposed on any\nauthor or copyright holder as a result of your choosing to follow a\nlater version.\n\n  15. Disclaimer of Warranty.\n\n  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\nAPPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\nHOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY\nOF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\nIS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\nALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n  16. Limitation of Liability.\n\n  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\nTHE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\nGENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\nUSE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\nDATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\nPARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\nEVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\nSUCH DAMAGES.\n\n  17. Interpretation of Sections 15 and 16.\n\n  If the disclaimer of warranty and limitation of liability provided\nabove cannot be given local legal effect according to their terms,\nreviewing courts shall apply local law that most closely approximates\nan absolute waiver of all civil liability in connection with the\nProgram, unless a warranty or assumption of liability accompanies a\ncopy of the Program in return for a fee.\n\n                     END OF TERMS AND CONDITIONS\n\n            How to Apply These Terms to Your New Programs\n\n  If you develop a new program, and you want it to be of the greatest\npossible use to the public, the best way to achieve this is to make it\nfree software which everyone can redistribute and change under these terms.\n\n  To do so, attach the following notices to the program.  It is safest\nto attach them to the start of each source file to most effectively\nstate the exclusion of warranty; and each file should have at least\nthe \"copyright\" line and a pointer to where the full notice is found.\n\n    <one line to give the program's name and a brief idea of what it does.>\n    Copyright (C) <year>  <name of author>\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <https://www.gnu.org/licenses/>.\n\nAlso add information on how to contact you by electronic and paper mail.\n\n  If the program does terminal interaction, make it output a short\nnotice like this when it starts in an interactive mode:\n\n    <program>  Copyright (C) <year>  <name of author>\n    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\n    This is free software, and you are welcome to redistribute it\n    under certain conditions; type `show c' for details.\n\nThe hypothetical commands `show w' and `show c' should show the appropriate\nparts of the General Public License.  Of course, your program's commands\nmight be different; for a GUI interface, you would use an \"about box\".\n\n  You should also get your employer (if you work as a programmer) or school,\nif any, to sign a \"copyright disclaimer\" for the program, if necessary.\nFor more information on this, and how to apply and follow the GNU GPL, see\n<https://www.gnu.org/licenses/>.\n\n  The GNU General Public License does not permit incorporating your program\ninto proprietary programs.  If your program is a subroutine library, you\nmay consider it more useful to permit linking proprietary applications with\nthe library.  If this is what you want to do, use the GNU Lesser General\nPublic License instead of this License.  But first, please read\n<https://www.gnu.org/licenses/why-not-lgpl.html>.\n"
  },
  {
    "path": "README.md",
    "content": "![newbee-mall-cloud-alibaba](./static-files/newbee-mall-cloud-alibaba-l.png)\n\n![Build Status](https://img.shields.io/badge/build-passing-green.svg)\n![Version 4.0.0](https://img.shields.io/badge/version-4.0.0-yellow.svg)\n[![License](https://img.shields.io/badge/license-GPL3.0-blue.svg)](https://github.com/newbee-ltd/newbee-mall-cloud/blob/main/LICENSE)\n\nnewbee-mall-cloud 项目是新蜂商城 newbee-mall 项目的微服务版本，一款基于 Spring Cloud Alibaba + Nacos + Sentinel + Seata + Spring Cloud Gateway + OpenFeign + Spring Cloud Seluth + Zipkin + ELK 等技术的大型微服务实战项目。\n\n当前分支的 Spring Boot 版本为 2.6.3，Spring Cloud 版本为 2021.0.1，想要学习和使用其它版本可以直接点击下方的分支名称跳转至对应的仓库分支中。\n\n|                                              分支名称                                              | Spring Boot Version | Spring Cloud Version | Spring Cloud Alibaba Version |\n|:----------------------------------------------------------------------------------------------:|:----------------:|:----------------:|:----------------:|\n|                    [main](https://github.com/newbee-ltd/newbee-mall-cloud)                     | 2.6.3               | 2021.0.1            | 2021.0.1.0                   |\n|       [2022.x](https://github.com/newbee-ltd/newbee-mall-cloud/tree/spring-cloud-2022.x)       | 3.0.2               | 2022.0.0            | 2022.0.0.0                        |\n\n2019 年开源了第一个单体版本，由最初新蜂商城单体项目，逐步过渡到前后端分离和微服务架构的项目，到现在已经“开枝散叶”，成长为一系列的项目集合，下图为新蜂商城项目由 2019 年至 2023 年的开源历程。由基础项目慢慢优化，不断地增加技术栈，让用户学习到越来越多知识点的同时，对开源作者的技术提升也是一个很大的帮助。\n\n![newbee-mall-course-2023](./static-files/newbee-mall-course-2023.png)\n\n**坚持不易，如果觉得项目还不错的话可以给项目一个 Star 吧，也是对我自 2019 年开始一直更新这个项目的一种鼓励啦，谢谢各位的支持。**\n\n| 项目名称             | 仓库地址                                                     | 备注                                                         |\n| :------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ |\n| newbee-mall          | [newbee-mall in GitHub](https://github.com/newbee-ltd/newbee-mall)<br>[newbee-mall in Gitee](https://gitee.com/newbee-ltd/newbee-mall) | 初始版本、Spring Boot、Thymeleaf、MyBatis、MySQL             |\n| newbee-mall-plus     | [newbee-mall-plus in GitHub](https://github.com/newbee-ltd/newbee-mall-plus)<br/>[newbee-mall-plus in Gitee](https://gitee.com/newbee-ltd/newbee-mall-plus) | 升级版本、优惠券、秒杀、支付、Spring Boot、Thymeleaf、MyBatis、MySQL、Redis |\n| newbee-mall-cloud    | [newbee-mall-cloud in GitHub](https://github.com/newbee-ltd/newbee-mall-cloud)<br/>[newbee-mall-cloud in Gitee](https://gitee.com/newbee-ltd/newbee-mall-cloud) | 微服务版本、分布式事务、Spring Cloud Alibaba、Nacos、Sentinel、OpenFeign、Seata |\n| newbee-mall-api      | [newbee-mall-api in GitHub](https://github.com/newbee-ltd/newbee-mall-api)<br/>[newbee-mall-api in Gitee](https://gitee.com/newbee-ltd/newbee-mall-api) | 前后端分离、Spring Boot、MyBatis、Swagger、MySQL             |\n| newbee-mall-api-go   | [newbee-mall-api-go in GitHub](https://github.com/newbee-ltd/newbee-mall-api-go)<br/>[newbee-mall-api-go in Gitee](https://gitee.com/newbee-ltd/newbee-mall-api-go) | 前后端分离、Go、Gin、MySQL                                   |\n| newbee-mall-vue-app  | [newbee-mall-vue-app in GitHub](https://github.com/newbee-ltd/newbee-mall-vue-app)<br/>[newbee-mall-vue-app in Gitee](https://gitee.com/newbee-ltd/newbee-mall-vue-app) | 前后端分离、Vue2、Vant                                       |\n| newbee-mall-vue3-app | [newbee-mall-vue3-app in GitHub](https://github.com/newbee-ltd/newbee-mall-vue3-app)<br/>[newbee-mall-vue3-app in Gitee](https://gitee.com/newbee-ltd/newbee-mall-vue3-app) | 前后端分离、Vue3、Vue-Router4、Pinia、Vant4                  |\n| vue3-admin           | [vue3-admin in GitHub](https://github.com/newbee-ltd/vue3-admin)<br/>[vue3-admin in Gitee](https://gitee.com/newbee-ltd/vue3-admin) | 前后端分离、Vue3、Element-Plus、Vue-Router4、Vite            |\n\n## 技术选型\n\n当前分支下的开发框架选择如下所示。\n\n| 开发框架             | 版本       |\n| :----------------: | :----------------: |\n| Spring Boot          | 2.6.3      |\n| Spring Cloud         | 2021.0.1   |\n| Spring Cloud Alibaba | 2021.0.1.0 |\n| MyBatis              | 3.5.9      |\n| Swagger              | 3.0.0      |\n| Lombok               | 1.18.16    |\n\n当前分支下的微服务组件技术选型如下所示。\n\n|        技术        |            组件实现             |   版本   |  备注  |\n| :----------------: | :-----------------------------: |:------:| :----: |\n| 服务注册与服务发现 |              Nacos              | 1.4.2  | 已整合 |\n|      配置中心      |              Nacos              | 1.4.2  | 已整合 |\n|      服务通信      |           Open Feign            | 3.1.1  | 已整合 |\n|     负载均衡器     |    Spring Cloud Loadbalancer    | 3.1.1  | 已整合 |\n|      服务网关      |      Spring Cloud Gateway       | 3.1.1  | 已整合 |\n|       断路器       |            Sentinel             | 1.8.4  | 已整合 |\n|      链路追踪      |   Spring Cloud Sleuth、Zipkin   | 3.1.1  | 已整合 |\n|     分布式事务     |              Seata              | 1.4.2  | 已整合 |\n|      日志中心      | ElasticSearch、Logstash、Kibana | 7.17.8 | 已整合 |\n\n![technology-selection](./static-files/newbee-mall-cloud-technology-selection.png)\n\n## 架构图简版\n\n![simple-architecture](./static-files/newbee-mall-cloud-architecture.png)\n\n## 开发及部署文档\n\n1. [**Spring Cloud Alibaba 项目实战：点亮微服务技能点！**](https://juejin.cn/book/7085254558678515742?suid=1996368849416216&source=android)\n2. [项目须知和课程约定](https://juejin.cn/book/7085254558678515742?suid=1996368849416216&source=android)\n3. [漫谈微服务架构（一）](https://juejin.cn/book/7085254558678515742?suid=1996368849416216&source=android)\n4. [漫谈微服务架构（二）](https://juejin.cn/book/7085254558678515742?suid=1996368849416216&source=android)\n5. [漫谈微服务架构（三）](https://juejin.cn/book/7085254558678515742?suid=1996368849416216&source=android)\n6. [微服务落地一站式解决方案——Spring Cloud](https://juejin.cn/book/7085254558678515742?suid=1996368849416216&source=android)\n7. [实战基础1-代码运行环境及开发工具介绍](https://juejin.cn/book/7085254558678515742?suid=1996368849416216&source=android)\n8. [实战基础2-Spring Boot 开发介绍及Spring Cloud Alibaba模板项目构建](https://juejin.cn/book/7085254558678515742?suid=1996368849416216&source=android)\n9. [服务通信基础讲解](https://juejin.cn/book/7085254558678515742?suid=1996368849416216&source=android)\n10. [微服务架构中的服务治理](https://juejin.cn/book/7085254558678515742?suid=1996368849416216&source=android)\n11. [Nacos安装与配置](https://juejin.cn/book/7085254558678515742?suid=1996368849416216&source=android)\n12. [Nacos整合之服务注册编码实践](https://juejin.cn/book/7085254558678515742?suid=1996368849416216&source=android)\n13. [Nacos整合之服务发现编码实践](https://juejin.cn/book/7085254558678515742?suid=1996368849416216&source=android)\n13. [(补充章节)谈一谈配置中心](https://juejin.cn/book/7085254558678515742?suid=1996368849416216&source=android)\n13. [(补充章节)整合Nacos配置中心编码实践](https://juejin.cn/book/7085254558678515742?suid=1996368849416216&source=android)\n13. [(补充章节)配置动态刷新及多配置读取编码实践](https://juejin.cn/book/7085254558678515742?suid=1996368849416216&source=android)\n14. [服务通信之负载均衡器](https://juejin.cn/book/7085254558678515742?suid=1996368849416216&source=android)\n15. [负载均衡器的源码分析及自定义负载均衡算法](https://juejin.cn/book/7085254558678515742?suid=1996368849416216&source=android)\n16. [服务治理与服务通信总结](https://juejin.cn/book/7085254558678515742?suid=1996368849416216&source=android)\n17. [OpenFeign介绍与整合](https://juejin.cn/book/7085254558678515742?suid=1996368849416216&source=android)\n18. [OpenFeign参数传递编码实践](https://juejin.cn/book/7085254558678515742?suid=1996368849416216&source=android)\n19. [服务网关之Spring Cloud Gateway](https://juejin.cn/book/7085254558678515742?suid=1996368849416216&source=android)\n20. [整合Spring Cloud Gateway编码实践](https://juejin.cn/book/7085254558678515742?suid=1996368849416216&source=android)\n21. [服务网关Spring Cloud Gateway之Predicate（断言）](https://juejin.cn/book/7085254558678515742?suid=1996368849416216&source=android)\n22. [服务网关Spring Cloud Gateway之Filter（过滤器）](https://juejin.cn/book/7085254558678515742?suid=1996368849416216&source=android)\n23. [微服务最终实战项目的启动和运行注意事项](https://juejin.cn/book/7085254558678515742?suid=1996368849416216&source=android)\n24. [最终实战项目的功能介绍与功能演示](https://juejin.cn/book/7085254558678515742?suid=1996368849416216&source=android)\n25. [分布式事务问题演示](https://juejin.cn/book/7085254558678515742?suid=1996368849416216&source=android)\n26. [分布式事务解决方案及Seata搭建](https://juejin.cn/book/7085254558678515742?suid=1996368849416216&source=android)\n27. [整合Seata编码实践](https://juejin.cn/book/7085254558678515742?suid=1996368849416216&source=android)\n28. [Seata的运行流程分析](https://juejin.cn/book/7085254558678515742?suid=1996368849416216&source=android)\n29. [服务容错之限流与熔断](https://juejin.cn/book/7085254558678515742?suid=1996368849416216&source=android)\n30. [服务容错之Sentinel限流配置实践](https://juejin.cn/book/7085254558678515742?suid=1996368849416216&source=android)\n31. [服务容错之Sentinel降级熔断配置实践](https://juejin.cn/book/7085254558678515742?suid=1996368849416216&source=android)\n32. [链路追踪之Sleuth+Zipkin整合](https://juejin.cn/book/7085254558678515742?suid=1996368849416216&source=android)\n33. [从零到一搭建微服务项目编码实战（一）](https://juejin.cn/book/7085254558678515742?suid=1996368849416216&source=android)\n34. [从零到一搭建微服务项目编码实战（二）](https://juejin.cn/book/7085254558678515742?suid=1996368849416216&source=android)\n35. [从零到一搭建微服务项目编码实战（三）](https://juejin.cn/book/7085254558678515742?suid=1996368849416216&source=android)\n36. [从零到一搭建微服务项目编码实战（四）](https://juejin.cn/book/7085254558678515742?suid=1996368849416216&source=android)\n37. [从零到一搭建微服务项目编码实战（五）](https://juejin.cn/book/7085254558678515742?suid=1996368849416216&source=android)\n38. [从零到一搭建微服务项目编码实战（六）](https://juejin.cn/book/7085254558678515742?suid=1996368849416216&source=android)\n39. [从零到一搭建微服务项目编码实战（七）](https://juejin.cn/book/7085254558678515742?suid=1996368849416216&source=android)\n40. [从零到一搭建微服务项目编码实战（八）](https://juejin.cn/book/7085254558678515742?suid=1996368849416216&source=android)\n41. [从零到一搭建微服务项目编码实战（九）](https://juejin.cn/book/7085254558678515742?suid=1996368849416216&source=android)\n42. [从零到一搭建微服务项目编码实战（十）](https://juejin.cn/book/7085254558678515742?suid=1996368849416216&source=android)\n43. [从零到一搭建微服务项目编码实战（十一）](https://juejin.cn/book/7085254558678515742?suid=1996368849416216&source=android)\n44. [从零到一搭建微服务项目编码实战（十二）](https://juejin.cn/book/7085254558678515742?suid=1996368849416216&source=android)\n45. [从零到一搭建微服务项目编码实战（十三）](https://juejin.cn/book/7085254558678515742?suid=1996368849416216&source=android)\n46. [从零到一搭建微服务项目编码实战（十四）](https://juejin.cn/book/7085254558678515742?suid=1996368849416216&source=android)\n47. [从零到一搭建微服务项目编码实战（十五）](https://juejin.cn/book/7085254558678515742?suid=1996368849416216&source=android)\n49. [(补充章节)Spring Cloud Gateway聚合Swagger接口](https://juejin.cn/book/7085254558678515742?suid=1996368849416216&source=android)\n50. [(补充章节)微服务架构实战项目中整合Seata](https://juejin.cn/book/7085254558678515742?suid=1996368849416216&source=android)\n51. [(补充章节)微服务架构实战项目打包及部署](https://juejin.cn/book/7085254558678515742?suid=1996368849416216&source=android)\n52. [(补充章节)微服务架构实战项目中整合Sentinel](https://juejin.cn/book/7085254558678515742?suid=1996368849416216&source=android)\n53. [(补充章节)微服务架构实战项目中整合Seluth、Zipkin](https://juejin.cn/book/7085254558678515742?suid=1996368849416216&source=android)\n54. [(补充章节)链路追踪之ELK日志中心搭建](https://juejin.cn/book/7085254558678515742?suid=1996368849416216&source=android)\n55. [(补充章节)微服务架构实战项目中整合ELK日志中心](https://juejin.cn/book/7085254558678515742?suid=1996368849416216&source=android)\n55. [课程总结](https://juejin.cn/book/7085254558678515742?suid=1996368849416216&source=android)\n\n## 联系作者\n\n关注公众号：**程序员十三**，回复\"勾搭\"进群交流。\n\n![wx-gzh](https://newbee-mall.oss-cn-beijing.aliyuncs.com/wx-gzh/%E7%A8%8B%E5%BA%8F%E5%91%98%E5%8D%81%E4%B8%89-%E5%85%AC%E4%BC%97%E5%8F%B7.png)\n\n> 大家有任何问题或者建议都可以在 [issues](https://github.com/newbee-ltd/newbee-mall-cloud/issues) 中反馈给我，我会慢慢完善这个项目。\n\n- 我的邮箱：2449207463@qq.com\n- QQ技术交流群：791509631\n\n> newbee-mall-cloud 在 GitHub 和国内的码云都创建了代码仓库，如果有人访问 GitHub 比较慢的话，建议在 Gitee 上查看该项目，两个仓库会保持同步更新。\n\n- [newbee-mall-cloud in GitHub](https://github.com/newbee-ltd/newbee-mall-cloud)\n- [newbee-mall-cloud in Gitee](https://gitee.com/newbee-ltd/newbee-mall-cloud)\n\n## 软件著作权\n\n本系统已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n\n## 感谢\n\n- [spring-projects](https://github.com/spring-projects/spring-boot)\n- [spring-cloud](https://github.com/spring-cloud)\n- [spring-cloud-alibaba](https://github.com/alibaba/spring-cloud-alibaba)\n- [alibaba](https://github.com/alibaba)\n- [seata](https://github.com/seata/seata)\n- [elasticsearch](https://github.com/elastic/elasticsearch)\n- [mybatis](https://github.com/mybatis/mybatis-3)\n- [projectlombok](https://github.com/projectlombok/lombok)\n- [swagger-api](https://github.com/swagger-api)\n"
  },
  {
    "path": "newbee-mall-cloud-common/pom.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--  @author 程序员十三\n      @qq交流群 791509631\n      @email 2449207463@qq.com\n      @link https://github.com/newbee-ltd -->\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd\">\n    <modelVersion>4.0.0</modelVersion>\n    <groupId>ltd.newbee.cloud</groupId>\n    <artifactId>newbee-mall-cloud-common</artifactId>\n    <version>0.0.1-SNAPSHOT</version>\n    <packaging>jar</packaging>\n    <name>newbee-mall-cloud-common</name>\n    <description>公共模块</description>\n\n    <parent>\n        <groupId>ltd.newbee.cloud</groupId>\n        <artifactId>newbee-mall-cloud</artifactId>\n        <version>0.0.1-SNAPSHOT</version>\n    </parent>\n\n    <properties>\n        <java.version>1.8</java.version>\n    </properties>\n\n    <dependencies>\n        <dependency>\n            <groupId>org.projectlombok</groupId>\n            <artifactId>lombok</artifactId>\n            <version>${lombok.version}</version>\n            <scope>provided</scope>\n        </dependency>\n\n        <dependency>\n            <groupId>org.springframework</groupId>\n            <artifactId>spring-beans</artifactId>\n        </dependency>\n\n        <dependency>\n            <groupId>io.swagger</groupId>\n            <artifactId>swagger-annotations</artifactId>\n            <version>1.5.20</version>\n            <scope>compile</scope>\n        </dependency>\n\n    </dependencies>\n    <!--  @author 程序员十三\n      @qq交流群 791509631\n      @email 2449207463@qq.com\n      @link https://github.com/newbee-ltd -->\n</project>\n"
  },
  {
    "path": "newbee-mall-cloud-common/src/main/java/ltd/common/cloud/newbee/dto/PageQueryUtil.java",
    "content": "package ltd.common.cloud.newbee.dto;\n\nimport java.util.LinkedHashMap;\nimport java.util.Map;\n\n/**\n * 分页查询参数\n *\n * @author 13\n * @qq交流群 796794009\n * @email 2449207463@qq.com\n * @link https://github.com/newbee-ltd\n */\npublic class PageQueryUtil extends LinkedHashMap<String, Object> {\n    //当前页码\n    private int page;\n    //每页条数\n    private int limit;\n\n    public PageQueryUtil(Map<String, Object> params) {\n        this.putAll(params);\n\n        //分页参数\n        this.page = Integer.parseInt(params.get(\"page\").toString());\n        this.limit = Integer.parseInt(params.get(\"limit\").toString());\n        this.put(\"start\", (page - 1) * limit);\n        this.put(\"page\", page);\n        this.put(\"limit\", limit);\n    }\n\n\n    public int getPage() {\n        return page;\n    }\n\n    public void setPage(int page) {\n        this.page = page;\n    }\n\n    public int getLimit() {\n        return limit;\n    }\n\n    public void setLimit(int limit) {\n        this.limit = limit;\n    }\n\n    @Override\n    public String toString() {\n        return \"PageUtil{\" +\n                \"page=\" + page +\n                \", limit=\" + limit +\n                '}';\n    }\n}\n"
  },
  {
    "path": "newbee-mall-cloud-common/src/main/java/ltd/common/cloud/newbee/dto/PageResult.java",
    "content": "package ltd.common.cloud.newbee.dto;\n\nimport io.swagger.annotations.ApiModelProperty;\n\nimport java.io.Serializable;\nimport java.util.List;\n\n/**\n * 分页工具类\n *\n * @author 13\n * @qq交流群 796794009\n * @email 2449207463@qq.com\n * @link https://github.com/newbee-ltd\n */\npublic class PageResult<T> implements Serializable {\n\n    @ApiModelProperty(\"总记录数\")\n    private int totalCount;\n\n    @ApiModelProperty(\"每页记录数\")\n    private int pageSize;\n\n    @ApiModelProperty(\"总页数\")\n    private int totalPage;\n\n    @ApiModelProperty(\"当前页数\")\n    private int currPage;\n\n    @ApiModelProperty(\"列表数据\")\n    private List<T> list;\n\n    /**\n     * 分页\n     *\n     * @param list       列表数据\n     * @param totalCount 总记录数\n     * @param pageSize   每页记录数\n     * @param currPage   当前页数\n     */\n    public PageResult(List<T> list, int totalCount, int pageSize, int currPage) {\n        this.list = list;\n        this.totalCount = totalCount;\n        this.pageSize = pageSize;\n        this.currPage = currPage;\n        this.totalPage = (int) Math.ceil((double) totalCount / pageSize);\n    }\n\n    public int getTotalCount() {\n        return totalCount;\n    }\n\n    public void setTotalCount(int totalCount) {\n        this.totalCount = totalCount;\n    }\n\n    public int getPageSize() {\n        return pageSize;\n    }\n\n    public void setPageSize(int pageSize) {\n        this.pageSize = pageSize;\n    }\n\n    public int getTotalPage() {\n        return totalPage;\n    }\n\n    public void setTotalPage(int totalPage) {\n        this.totalPage = totalPage;\n    }\n\n    public int getCurrPage() {\n        return currPage;\n    }\n\n    public void setCurrPage(int currPage) {\n        this.currPage = currPage;\n    }\n\n    public List<T> getList() {\n        return list;\n    }\n\n    public void setList(List<T> list) {\n        this.list = list;\n    }\n\n}\n"
  },
  {
    "path": "newbee-mall-cloud-common/src/main/java/ltd/common/cloud/newbee/dto/Result.java",
    "content": "package ltd.common.cloud.newbee.dto;\n\nimport io.swagger.annotations.ApiModelProperty;\n\nimport java.io.Serializable;\n\n/**\n * @author 13\n * @qq交流群 796794009\n * @email 2449207463@qq.com\n * @link https://github.com/newbee-ltd\n */\npublic class Result<T> implements Serializable {\n    private static final long serialVersionUID = 1L;\n\n    //业务码，比如成功、失败、权限不足等 code，可自行定义\n    @ApiModelProperty(\"返回码\")\n    private int resultCode;\n    //返回信息，后端在进行业务处理后返回给前端一个提示信息，可自行定义\n    @ApiModelProperty(\"返回信息\")\n    private String message;\n    //数据结果，泛型，可以是列表、单个对象、数字、布尔值等\n    @ApiModelProperty(\"返回数据\")\n    private T data;\n\n    public Result() {\n    }\n\n    public Result(int resultCode, String message) {\n        this.resultCode = resultCode;\n        this.message = message;\n    }\n\n    public int getResultCode() {\n        return resultCode;\n    }\n\n    public void setResultCode(int resultCode) {\n        this.resultCode = resultCode;\n    }\n\n    public String getMessage() {\n        return message;\n    }\n\n    public void setMessage(String message) {\n        this.message = message;\n    }\n\n    public T getData() {\n        return data;\n    }\n\n    public void setData(T data) {\n        this.data = data;\n    }\n\n    @Override\n    public String toString() {\n        return \"Result{\" +\n                \"resultCode=\" + resultCode +\n                \", message='\" + message + '\\'' +\n                \", data=\" + data +\n                '}';\n    }\n}\n"
  },
  {
    "path": "newbee-mall-cloud-common/src/main/java/ltd/common/cloud/newbee/dto/ResultGenerator.java",
    "content": "package ltd.common.cloud.newbee.dto;\n\nimport org.springframework.util.StringUtils;\n\n/**\n * 响应结果生成工具\n *\n * @author 13\n * @qq交流群 796794009\n * @email 2449207463@qq.com\n * @link https://github.com/newbee-ltd\n */\npublic class ResultGenerator {\n    private static final String DEFAULT_SUCCESS_MESSAGE = \"SUCCESS\";\n    private static final String DEFAULT_FAIL_MESSAGE = \"FAIL\";\n    private static final int RESULT_CODE_SUCCESS = 200;\n    private static final int RESULT_CODE_SERVER_ERROR = 500;\n\n    public static Result genSuccessResult() {\n        Result result = new Result();\n        result.setResultCode(RESULT_CODE_SUCCESS);\n        result.setMessage(DEFAULT_SUCCESS_MESSAGE);\n        return result;\n    }\n\n    public static Result genSuccessResult(String message) {\n        Result result = new Result();\n        result.setResultCode(RESULT_CODE_SUCCESS);\n        result.setMessage(message);\n        return result;\n    }\n\n    public static Result genSuccessResult(Object data) {\n        Result result = new Result();\n        result.setResultCode(RESULT_CODE_SUCCESS);\n        result.setMessage(DEFAULT_SUCCESS_MESSAGE);\n        result.setData(data);\n        return result;\n    }\n\n    public static Result genFailResult(String message) {\n        Result result = new Result();\n        result.setResultCode(RESULT_CODE_SERVER_ERROR);\n        if (!StringUtils.hasText(message)) {\n            result.setMessage(DEFAULT_FAIL_MESSAGE);\n        } else {\n            result.setMessage(message);\n        }\n        return result;\n    }\n\n    public static Result genErrorResult(int code, String message) {\n        Result result = new Result();\n        result.setResultCode(code);\n        result.setMessage(message);\n        return result;\n    }\n}\n"
  },
  {
    "path": "newbee-mall-cloud-common/src/main/java/ltd/common/cloud/newbee/enums/IndexConfigTypeEnum.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.common.cloud.newbee.enums;\n\n/**\n * @author 13\n * @qq交流群 796794009\n * @email 2449207463@qq.com\n * @link https://github.com/newbee-ltd\n * @apiNote 首页配置项 1-搜索框热搜 2-搜索下拉框热搜 3-(首页)热销商品 4-(首页)新品上线 5-(首页)为你推荐\n */\npublic enum IndexConfigTypeEnum {\n\n    DEFAULT(0, \"DEFAULT\"),\n    INDEX_SEARCH_HOTS(1, \"INDEX_SEARCH_HOTS\"),\n    INDEX_SEARCH_DOWN_HOTS(2, \"INDEX_SEARCH_DOWN_HOTS\"),\n    INDEX_GOODS_HOT(3, \"INDEX_GOODS_HOTS\"),\n    INDEX_GOODS_NEW(4, \"INDEX_GOODS_NEW\"),\n    INDEX_GOODS_RECOMMOND(5, \"INDEX_GOODS_RECOMMOND\");\n\n    private int type;\n\n    private String name;\n\n    IndexConfigTypeEnum(int type, String name) {\n        this.type = type;\n        this.name = name;\n    }\n\n    public static IndexConfigTypeEnum getIndexConfigTypeEnumByType(int type) {\n        for (IndexConfigTypeEnum indexConfigTypeEnum : IndexConfigTypeEnum.values()) {\n            if (indexConfigTypeEnum.getType() == type) {\n                return indexConfigTypeEnum;\n            }\n        }\n        return DEFAULT;\n    }\n\n    public int getType() {\n        return type;\n    }\n\n    public void setType(int type) {\n        this.type = type;\n    }\n\n    public String getName() {\n        return name;\n    }\n\n    public void setName(String name) {\n        this.name = name;\n    }\n}\n"
  },
  {
    "path": "newbee-mall-cloud-common/src/main/java/ltd/common/cloud/newbee/enums/NewBeeMallCategoryLevelEnum.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.common.cloud.newbee.enums;\n\n/**\n * @author 13\n * @qq交流群 796794009\n * @email 2449207463@qq.com\n * @link https://github.com/newbee-ltd\n * @apiNote 分类级别\n */\npublic enum NewBeeMallCategoryLevelEnum {\n\n    DEFAULT(0, \"ERROR\"),\n    LEVEL_ONE(1, \"一级分类\"),\n    LEVEL_TWO(2, \"二级分类\"),\n    LEVEL_THREE(3, \"三级分类\");\n\n    private int level;\n\n    private String name;\n\n    NewBeeMallCategoryLevelEnum(int level, String name) {\n        this.level = level;\n        this.name = name;\n    }\n\n    public static NewBeeMallCategoryLevelEnum getNewBeeMallOrderStatusEnumByLevel(int level) {\n        for (NewBeeMallCategoryLevelEnum newBeeMallCategoryLevelEnum : NewBeeMallCategoryLevelEnum.values()) {\n            if (newBeeMallCategoryLevelEnum.getLevel() == level) {\n                return newBeeMallCategoryLevelEnum;\n            }\n        }\n        return DEFAULT;\n    }\n\n    public int getLevel() {\n        return level;\n    }\n\n    public void setLevel(int level) {\n        this.level = level;\n    }\n\n    public String getName() {\n        return name;\n    }\n\n    public void setName(String name) {\n        this.name = name;\n    }\n}\n"
  },
  {
    "path": "newbee-mall-cloud-common/src/main/java/ltd/common/cloud/newbee/enums/NewBeeMallOrderStatusEnum.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.common.cloud.newbee.enums;\n\n/**\n * @author 13\n * @qq交流群 796794009\n * @email 2449207463@qq.com\n * @link https://github.com/newbee-ltd\n * @apiNote 订单状态:0.待支付 1.已支付 2.配货完成 3:出库成功 4.交易成功 -1.手动关闭 -2.超时关闭 -3.商家关闭\n */\npublic enum NewBeeMallOrderStatusEnum {\n\n    DEFAULT(-9, \"ERROR\"),\n    ORDER_PRE_PAY(0, \"待支付\"),\n    ORDER_PAID(1, \"已支付\"),\n    ORDER_PACKAGED(2, \"配货完成\"),\n    ORDER_EXPRESS(3, \"出库成功\"),\n    ORDER_SUCCESS(4, \"交易成功\"),\n    ORDER_CLOSED_BY_MALLUSER(-1, \"手动关闭\"),\n    ORDER_CLOSED_BY_EXPIRED(-2, \"超时关闭\"),\n    ORDER_CLOSED_BY_JUDGE(-3, \"商家关闭\");\n\n    private int orderStatus;\n\n    private String name;\n\n    NewBeeMallOrderStatusEnum(int orderStatus, String name) {\n        this.orderStatus = orderStatus;\n        this.name = name;\n    }\n\n    public static NewBeeMallOrderStatusEnum getNewBeeMallOrderStatusEnumByStatus(int orderStatus) {\n        for (NewBeeMallOrderStatusEnum newBeeMallOrderStatusEnum : NewBeeMallOrderStatusEnum.values()) {\n            if (newBeeMallOrderStatusEnum.getOrderStatus() == orderStatus) {\n                return newBeeMallOrderStatusEnum;\n            }\n        }\n        return DEFAULT;\n    }\n\n    public int getOrderStatus() {\n        return orderStatus;\n    }\n\n    public void setOrderStatus(int orderStatus) {\n        this.orderStatus = orderStatus;\n    }\n\n    public String getName() {\n        return name;\n    }\n\n    public void setName(String name) {\n        this.name = name;\n    }\n}\n"
  },
  {
    "path": "newbee-mall-cloud-common/src/main/java/ltd/common/cloud/newbee/enums/PayStatusEnum.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.common.cloud.newbee.enums;\n\n/**\n * @author 13\n * @qq交流群 796794009\n * @email 2449207463@qq.com\n * @link https://github.com/newbee-ltd\n * @apiNote 订单状态:0.支付中 1.支付成功 -1.支付失败\n */\npublic enum PayStatusEnum {\n\n    DEFAULT(-1, \"支付失败\"),\n    PAY_ING(0, \"支付中\"),\n    PAY_SUCCESS(1, \"支付成功\");\n\n    private int payStatus;\n\n    private String name;\n\n    PayStatusEnum(int payStatus, String name) {\n        this.payStatus = payStatus;\n        this.name = name;\n    }\n\n    public static PayStatusEnum getPayStatusEnumByStatus(int payStatus) {\n        for (PayStatusEnum payStatusEnum : PayStatusEnum.values()) {\n            if (payStatusEnum.getPayStatus() == payStatus) {\n                return payStatusEnum;\n            }\n        }\n        return DEFAULT;\n    }\n\n    public int getPayStatus() {\n        return payStatus;\n    }\n\n    public void setPayStatus(int payStatus) {\n        this.payStatus = payStatus;\n    }\n\n    public String getName() {\n        return name;\n    }\n\n    public void setName(String name) {\n        this.name = name;\n    }\n}\n"
  },
  {
    "path": "newbee-mall-cloud-common/src/main/java/ltd/common/cloud/newbee/enums/PayTypeEnum.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.common.cloud.newbee.enums;\n\n/**\n * @author 13\n * @qq交流群 796794009\n * @email 2449207463@qq.com\n * @link https://github.com/newbee-ltd\n * @apiNote 订单状态:0.无 1.支付宝 2.微信支付\n */\npublic enum PayTypeEnum {\n\n    DEFAULT(-1, \"ERROR\"),\n    NOT_PAY(0, \"无\"),\n    ALI_PAY(1, \"支付宝\"),\n    WEIXIN_PAY(2, \"微信支付\");\n\n    private int payType;\n\n    private String name;\n\n    PayTypeEnum(int payType, String name) {\n        this.payType = payType;\n        this.name = name;\n    }\n\n    public static PayTypeEnum getPayTypeEnumByType(int payType) {\n        for (PayTypeEnum payTypeEnum : PayTypeEnum.values()) {\n            if (payTypeEnum.getPayType() == payType) {\n                return payTypeEnum;\n            }\n        }\n        return DEFAULT;\n    }\n\n    public int getPayType() {\n        return payType;\n    }\n\n    public void setPayType(int payType) {\n        this.payType = payType;\n    }\n\n    public String getName() {\n        return name;\n    }\n\n    public void setName(String name) {\n        this.name = name;\n    }\n}\n"
  },
  {
    "path": "newbee-mall-cloud-common/src/main/java/ltd/common/cloud/newbee/enums/ServiceResultEnum.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.common.cloud.newbee.enums;\n\npublic enum ServiceResultEnum {\n    ERROR(\"error\"),\n\n    SUCCESS(\"success\"),\n\n    DATA_NOT_EXIST(\"未查询到记录！\"),\n\n    PARAM_ERROR(\"参数错误！\"),\n\n    SAME_CATEGORY_EXIST(\"已存在同级同名的分类！\"),\n\n    SAME_LOGIN_NAME_EXIST(\"用户名已存在！\"),\n\n    LOGIN_NAME_NULL(\"请输入登录名！\"),\n\n    LOGIN_NAME_IS_NOT_PHONE(\"请输入正确的手机号！\"),\n\n    LOGIN_PASSWORD_NULL(\"请输入密码！\"),\n\n    LOGIN_VERIFY_CODE_NULL(\"请输入验证码！\"),\n\n    LOGIN_VERIFY_CODE_ERROR(\"验证码错误！\"),\n\n    SAME_INDEX_CONFIG_EXIST(\"已存在相同的首页配置项！\"),\n\n    GOODS_CATEGORY_ERROR(\"分类数据异常！\"),\n\n    SAME_GOODS_EXIST(\"已存在相同的商品信息！\"),\n\n    GOODS_NOT_EXIST(\"商品不存在！\"),\n\n    GOODS_PUT_DOWN(\"商品已下架！\"),\n\n    SHOPPING_CART_ITEM_LIMIT_NUMBER_ERROR(\"超出单个商品的最大购买数量！\"),\n\n    SHOPPING_CART_ITEM_NUMBER_ERROR(\"商品数量不能小于 1 ！\"),\n\n    SHOPPING_CART_ITEM_TOTAL_NUMBER_ERROR(\"超出购物车最大容量！\"),\n\n    SHOPPING_CART_ITEM_EXIST_ERROR(\"已存在！无需重复添加！\"),\n\n    LOGIN_ERROR(\"登录失败！\"),\n\n    NOT_LOGIN_ERROR(\"未登录！\"),\n\n    ADMIN_NOT_LOGIN_ERROR(\"管理员未登录！\"),\n\n    TOKEN_EXPIRE_ERROR(\"无效认证！请重新登录！\"),\n\n    ADMIN_TOKEN_EXPIRE_ERROR(\"管理员登录过期！请重新登录！\"),\n\n    USER_NULL_ERROR(\"无效用户！请重新登录！\"),\n\n    LOGIN_USER_LOCKED_ERROR(\"用户已被禁止登录！\"),\n\n    ORDER_NOT_EXIST_ERROR(\"订单不存在！\"),\n\n    ORDER_ITEM_NOT_EXIST_ERROR(\"订单项不存在！\"),\n\n    NULL_ADDRESS_ERROR(\"地址不能为空！\"),\n\n    ORDER_PRICE_ERROR(\"订单价格异常！\"),\n\n    ORDER_ITEM_NULL_ERROR(\"订单项异常！\"),\n\n    ORDER_GENERATE_ERROR(\"生成订单异常！\"),\n\n    SHOPPING_ITEM_ERROR(\"购物车数据异常！\"),\n\n    SHOPPING_ITEM_COUNT_ERROR(\"库存不足！\"),\n\n    ORDER_STATUS_ERROR(\"订单状态异常！\"),\n\n    OPERATE_ERROR(\"操作失败！\"),\n\n    REQUEST_FORBIDEN_ERROR(\"禁止该操作！\"),\n\n    NO_PERMISSION_ERROR(\"无权限！\"),\n\n    DB_ERROR(\"database error\");\n\n    private String result;\n\n    ServiceResultEnum(String result) {\n        this.result = result;\n    }\n\n    public String getResult() {\n        return result;\n    }\n\n    public void setResult(String result) {\n        this.result = result;\n    }\n}\n"
  },
  {
    "path": "newbee-mall-cloud-common/src/main/java/ltd/common/cloud/newbee/exception/NewBeeMallException.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.common.cloud.newbee.exception;\n\npublic class NewBeeMallException extends RuntimeException {\n\n    public NewBeeMallException() {\n    }\n\n    public NewBeeMallException(String message) {\n        super(message);\n    }\n\n    /**\n     * 丢出一个异常\n     *\n     * @param message\n     */\n    public static void fail(String message) {\n        throw new NewBeeMallException(message);\n    }\n\n}\n"
  },
  {
    "path": "newbee-mall-cloud-common/src/main/java/ltd/common/cloud/newbee/pojo/AdminUserToken.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.common.cloud.newbee.pojo;\n\nimport lombok.Data;\n\nimport java.io.Serializable;\n\n@Data\npublic class AdminUserToken implements Serializable {\n    private Long adminUserId;\n\n    private String token;\n}"
  },
  {
    "path": "newbee-mall-cloud-common/src/main/java/ltd/common/cloud/newbee/pojo/MallUserToken.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.common.cloud.newbee.pojo;\n\nimport lombok.Data;\n\nimport java.io.Serializable;\n\n@Data\npublic class MallUserToken implements Serializable {\n    private Long userId;\n\n    private String token;\n\n}"
  },
  {
    "path": "newbee-mall-cloud-common/src/main/java/ltd/common/cloud/newbee/util/BeanUtil.java",
    "content": "package ltd.common.cloud.newbee.util;\n\nimport org.springframework.beans.BeanUtils;\nimport org.springframework.beans.BeanWrapper;\nimport org.springframework.beans.BeanWrapperImpl;\nimport org.springframework.beans.PropertyAccessorFactory;\n\nimport java.beans.PropertyDescriptor;\nimport java.lang.reflect.Field;\nimport java.util.*;\n\npublic abstract class BeanUtil {\n\n    public static Object copyProperties(Object source, Object target, String... ignoreProperties) {\n        if (source == null) {\n            return target;\n        }\n        BeanUtils.copyProperties(source, target, ignoreProperties);\n        return target;\n    }\n\n    public static <T> List<T> copyList(List sources, Class<T> clazz) {\n        return copyList(sources, clazz, null);\n    }\n\n    public static <T> List<T> copyList(List sources, Class<T> clazz, Callback<T> callback) {\n        List<T> targetList = new ArrayList<>();\n        if (sources != null) {\n            try {\n                for (Object source : sources) {\n                    T target = clazz.newInstance();\n                    copyProperties(source, target);\n                    if (callback != null) {\n                        callback.set(source, target);\n                    }\n                    targetList.add(target);\n                }\n            } catch (InstantiationException e) {\n                e.printStackTrace();\n            } catch (IllegalAccessException e) {\n                e.printStackTrace();\n            }\n        }\n        return targetList;\n    }\n\n    public static Map<String, Object> toMap(Object bean, String... ignoreProperties) {\n        Map<String, Object> map = new LinkedHashMap<>();\n        List<String> ignoreList = new ArrayList<>(Arrays.asList(ignoreProperties));\n        ignoreList.add(\"class\");\n        BeanWrapper beanWrapper = PropertyAccessorFactory.forBeanPropertyAccess(bean);\n        for (PropertyDescriptor pd : beanWrapper.getPropertyDescriptors()) {\n            if (!ignoreList.contains(pd.getName()) && beanWrapper.isReadableProperty(pd.getName())) {\n                Object propertyValue = beanWrapper.getPropertyValue(pd.getName());\n                map.put(pd.getName(), propertyValue);\n            }\n        }\n        return map;\n    }\n\n    public static <T> T toBean(Map<String, Object> map, Class<T> beanType) {\n        BeanWrapper beanWrapper = new BeanWrapperImpl(beanType);\n        map.forEach((key, value) -> {\n            if (beanWrapper.isWritableProperty(key)) {\n                beanWrapper.setPropertyValue(key, value);\n            }\n        });\n        return (T) beanWrapper.getWrappedInstance();\n    }\n\n    public static interface Callback<T> {\n        void set(Object source, T target);\n    }\n\n    //检查Pojo对象是否有null字段\n    public static boolean checkPojoNullField(Object o, Class<?> clz) {\n        try {\n            Field[] fields = clz.getDeclaredFields();\n            for (Field field : fields) {\n                field.setAccessible(true);\n                if (field.get(o) == null) {\n                    return false;\n                }\n            }\n            if (clz.getSuperclass() != Object.class) {\n                return checkPojoNullField(o, clz.getSuperclass());\n            }\n            return true;\n        } catch (IllegalAccessException e) {\n            return false;\n        }\n    }\n}\n"
  },
  {
    "path": "newbee-mall-cloud-common/src/main/java/ltd/common/cloud/newbee/util/MD5Util.java",
    "content": "package ltd.common.cloud.newbee.util;\n\nimport java.security.MessageDigest;\n\n/**\n * @author 13\n * @qq交流群 796794009\n * @email 2449207463@qq.com\n * @link https://github.com/newbee-ltd\n */\npublic class MD5Util {\n\n    private static String byteArrayToHexString(byte b[]) {\n        StringBuffer resultSb = new StringBuffer();\n        for (int i = 0; i < b.length; i++)\n            resultSb.append(byteToHexString(b[i]));\n\n        return resultSb.toString();\n    }\n\n    private static String byteToHexString(byte b) {\n        int n = b;\n        if (n < 0)\n            n += 256;\n        int d1 = n / 16;\n        int d2 = n % 16;\n        return hexDigits[d1] + hexDigits[d2];\n    }\n\n    public static String MD5Encode(String origin, String charsetname) {\n        String resultString = null;\n        try {\n            resultString = new String(origin);\n            MessageDigest md = MessageDigest.getInstance(\"MD5\");\n            if (charsetname == null || \"\".equals(charsetname))\n                resultString = byteArrayToHexString(md.digest(resultString\n                        .getBytes()));\n            else\n                resultString = byteArrayToHexString(md.digest(resultString\n                        .getBytes(charsetname)));\n        } catch (Exception exception) {\n        }\n        return resultString;\n    }\n\n    private static final String hexDigits[] = {\"0\", \"1\", \"2\", \"3\", \"4\", \"5\",\n            \"6\", \"7\", \"8\", \"9\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\"};\n}\n"
  },
  {
    "path": "newbee-mall-cloud-common/src/main/java/ltd/common/cloud/newbee/util/NewBeeMallUtils.java",
    "content": "package ltd.common.cloud.newbee.util;\n\nimport org.springframework.util.StringUtils;\n\nimport java.net.URI;\n\n/**\n * @author 13\n */\npublic class NewBeeMallUtils {\n\n    public static URI getHost(URI uri) {\n        URI effectiveURI = null;\n        try {\n            effectiveURI = new URI(uri.getScheme(), uri.getUserInfo(), uri.getHost(), uri.getPort(), null, null, null);\n        } catch (Throwable var4) {\n            effectiveURI = null;\n        }\n        return effectiveURI;\n    }\n\n    public static String cleanString(String value) {\n        if (!StringUtils.hasText(value)) {\n            return \"\";\n        }\n        value = value.toLowerCase();\n        value = value.replaceAll(\"<\", \"& lt;\").replaceAll(\">\", \"& gt;\");\n        value = value.replaceAll(\"\\\\(\", \"& #40;\").replaceAll(\"\\\\)\", \"& #41;\");\n        value = value.replaceAll(\"'\", \"& #39;\");\n        value = value.replaceAll(\"onload\", \"0nl0ad\");\n        value = value.replaceAll(\"xml\", \"xm1\");\n        value = value.replaceAll(\"window\", \"wind0w\");\n        value = value.replaceAll(\"click\", \"cl1ck\");\n        value = value.replaceAll(\"var\", \"v0r\");\n        value = value.replaceAll(\"let\", \"1et\");\n        value = value.replaceAll(\"function\", \"functi0n\");\n        value = value.replaceAll(\"return\", \"retu1n\");\n        value = value.replaceAll(\"$\", \"\");\n        value = value.replaceAll(\"document\", \"d0cument\");\n        value = value.replaceAll(\"const\", \"c0nst\");\n        value = value.replaceAll(\"eval\\\\((.*)\\\\)\", \"\");\n        value = value.replaceAll(\"[\\\\\\\"\\\\\\'][\\\\s]*javascript:(.*)[\\\\\\\"\\\\\\']\", \"\\\"\\\"\");\n        value = value.replaceAll(\"script\", \"scr1pt\");\n        value = value.replaceAll(\"insert\", \"1nsert\");\n        value = value.replaceAll(\"drop\", \"dr0p\");\n        value = value.replaceAll(\"create\", \"cre0ate\");\n        value = value.replaceAll(\"update\", \"upd0ate\");\n        value = value.replaceAll(\"alter\", \"a1ter\");\n        value = value.replaceAll(\"from\", \"fr0m\");\n        value = value.replaceAll(\"where\", \"wh1re\");\n        value = value.replaceAll(\"database\", \"data1base\");\n        value = value.replaceAll(\"table\", \"tab1e\");\n        value = value.replaceAll(\"tb\", \"tb0\");\n        return value;\n    }\n}\n"
  },
  {
    "path": "newbee-mall-cloud-common/src/main/java/ltd/common/cloud/newbee/util/NumberUtil.java",
    "content": "package ltd.common.cloud.newbee.util;\n\nimport java.util.regex.Matcher;\nimport java.util.regex.Pattern;\n\n/**\n * @author 13\n * @qq交流群 796794009\n * @email 2449207463@qq.com\n * @link https://github.com/newbee-ltd\n */\npublic class NumberUtil {\n\n    private NumberUtil() {\n    }\n\n\n    /**\n     * 判断是否为11位电话号码\n     *\n     * @param phone\n     * @return\n     */\n    public static boolean isPhone(String phone) {\n        Pattern pattern = Pattern.compile(\"^((13[0-9])|(14[5,7])|(15[^4,\\\\D])|(17[0-8])|(18[0-9]))\\\\d{8}$\");\n        Matcher matcher = pattern.matcher(phone);\n        return matcher.matches();\n    }\n\n    /**\n     * 生成指定长度的随机数\n     *\n     * @param length\n     * @return\n     */\n    public static int genRandomNum(int length) {\n        int num = 1;\n        double random = Math.random();\n        if (random < 0.1) {\n            random = random + 0.1;\n        }\n        for (int i = 0; i < length; i++) {\n            num = num * 10;\n        }\n        return (int) ((random * num));\n    }\n\n    /**\n     * 生成订单流水号\n     *\n     * @return\n     */\n    public static String genOrderNo() {\n        StringBuffer buffer = new StringBuffer(String.valueOf(System.currentTimeMillis()));\n        int num = genRandomNum(4);\n        buffer.append(num);\n        return buffer.toString();\n    }\n}\n"
  },
  {
    "path": "newbee-mall-cloud-common/src/main/java/ltd/common/cloud/newbee/util/SystemUtil.java",
    "content": "package ltd.common.cloud.newbee.util;\n\nimport java.math.BigInteger;\nimport java.security.MessageDigest;\n\n/**\n * @author 13\n * @qq交流群 796794009\n * @email 2449207463@qq.com\n * @link https://github.com/newbee-ltd\n */\npublic class SystemUtil {\n\n    private SystemUtil() {\n    }\n\n\n    /**\n     * 登录或注册成功后,生成保持用户登录状态会话token值\n     *\n     * @param src:为用户最新一次登录时的now()+user.id+random(4)\n     * @return\n     */\n    public static String genToken(String src) {\n        if (null == src || \"\".equals(src)) {\n            return null;\n        }\n        try {\n            MessageDigest md = MessageDigest.getInstance(\"MD5\");\n            md.update(src.getBytes());\n            String result = new BigInteger(1, md.digest()).toString(16);\n            if (result.length() == 31) {\n                result = result + \"-\";\n            }\n            System.out.println(result);\n            return result;\n        } catch (Exception e) {\n            return null;\n        }\n    }\n\n}\n"
  },
  {
    "path": "newbee-mall-cloud-gateway-admin/pom.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--  @author 程序员十三\n      @qq交流群 791509631\n      @email 2449207463@qq.com\n      @link https://github.com/newbee-ltd -->\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd\">\n    <modelVersion>4.0.0</modelVersion>\n    <groupId>ltd.newbee.cloud</groupId>\n    <artifactId>newbee-mall-cloud-gateway-admin</artifactId>\n    <version>0.0.1-SNAPSHOT</version>\n    <name>newbee-mall-cloud-gateway-admin</name>\n    <description>网关模块</description>\n\n    <parent>\n        <groupId>ltd.newbee.cloud</groupId>\n        <artifactId>newbee-mall-cloud</artifactId>\n        <version>0.0.1-SNAPSHOT</version>\n    </parent>\n\n    <properties>\n        <java.version>1.8</java.version>\n    </properties>\n\n    <dependencies>\n        <dependency>\n            <groupId>org.springframework.cloud</groupId>\n            <artifactId>spring-cloud-starter-gateway</artifactId>\n        </dependency>\n\n        <dependency>\n            <groupId>org.springframework.cloud</groupId>\n            <artifactId>spring-cloud-starter-loadbalancer</artifactId>\n        </dependency>\n\n        <dependency>\n            <groupId>com.alibaba.cloud</groupId>\n            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>\n        </dependency>\n\n        <dependency>\n            <groupId>io.springfox</groupId>\n            <artifactId>springfox-boot-starter</artifactId>\n        </dependency>\n\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter-data-redis</artifactId>\n        </dependency>\n\n        <dependency>\n            <groupId>ltd.user.newbee.cloud</groupId>\n            <artifactId>newbee-mall-cloud-user-api</artifactId>\n            <version>0.0.1-SNAPSHOT</version>\n        </dependency>\n\n        <dependency>\n            <groupId>ltd.newbee.cloud</groupId>\n            <artifactId>newbee-mall-cloud-common</artifactId>\n            <version>0.0.1-SNAPSHOT</version>\n        </dependency>\n\n    </dependencies>\n    <!--  @author 程序员十三\n      @qq交流群 791509631\n      @email 2449207463@qq.com\n      @link https://github.com/newbee-ltd -->\n</project>\n"
  },
  {
    "path": "newbee-mall-cloud-gateway-admin/src/main/java/ltd/gateway/cloud/newbee/NewBeeMallCloudAdminGatewayApplication.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本系统已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.gateway.cloud.newbee;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigure.SpringBootApplication;\nimport org.springframework.cloud.client.discovery.EnableDiscoveryClient;\n\n/**\n * @author 程序员十三\n * @qq交流群 791509631\n * @email 2449207463@qq.com\n * @link https://github.com/newbee-ltd\n */\n@SpringBootApplication\n@EnableDiscoveryClient\npublic class NewBeeMallCloudAdminGatewayApplication {\n\n    public static void main(String[] args) {\n        SpringApplication.run(NewBeeMallCloudAdminGatewayApplication.class, args);\n    }\n\n}\n"
  },
  {
    "path": "newbee-mall-cloud-gateway-admin/src/main/java/ltd/gateway/cloud/newbee/config/PolymerizeSwaggerProvider.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本系统已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.gateway.cloud.newbee.config;\n\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.cloud.gateway.config.GatewayProperties;\nimport org.springframework.cloud.gateway.support.NameUtils;\nimport org.springframework.context.annotation.Primary;\nimport org.springframework.stereotype.Component;\nimport springfox.documentation.swagger.web.SwaggerResource;\nimport springfox.documentation.swagger.web.SwaggerResourcesProvider;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\n/**\n * 在网关层聚合底层微服务的Swagger资源\n *\n * @author 程序员十三\n * @qq交流群 791509631\n * @email 2449207463@qq.com\n * @link https://github.com/newbee-ltd\n */\n@Primary\n@Component\npublic class PolymerizeSwaggerProvider implements SwaggerResourcesProvider {\n\n    /**\n     * Swagger Doc的URL后缀\n     */\n    public static final String API_DOCS_URL = \"/v3/api-docs\";\n\n    @Autowired\n    private GatewayProperties gatewayProperties;\n\n    @Override\n    public List<SwaggerResource> get() {\n        List<SwaggerResource> resources = new ArrayList<>();\n        List<String> routes = new ArrayList<>();\n        //需要聚合的路由配置\n        routes.add(\"user-service-swagger-route\");\n        routes.add(\"goods-service-swagger-route\");\n        routes.add(\"recommend-service-swagger-route\");\n        routes.add(\"order-service-swagger-route\");\n        gatewayProperties.getRoutes().stream().filter(routeDefinition -> routes.contains(routeDefinition.getId()))\n                .forEach(routeDefinition -> routeDefinition.getPredicates().stream()\n                        .filter(predicateDefinition -> (\"Path\").equalsIgnoreCase(predicateDefinition.getName()))\n                        .forEach(predicateDefinition -> resources.add(swaggerResource(routeDefinition.getId(),\n                                predicateDefinition.getArgs().get(NameUtils.GENERATED_NAME_PREFIX + \"0\")\n                                        .replace(\"/**\", API_DOCS_URL)))));\n        return resources;\n    }\n\n    private SwaggerResource swaggerResource(String name, String url) {\n        SwaggerResource swaggerResource = new SwaggerResource();\n        swaggerResource.setName(name);\n        swaggerResource.setLocation(url);\n        swaggerResource.setSwaggerVersion(\"3.0\");\n        return swaggerResource;\n    }\n}\n"
  },
  {
    "path": "newbee-mall-cloud-gateway-admin/src/main/java/ltd/gateway/cloud/newbee/config/RedisConfig.java",
    "content": "package ltd.gateway.cloud.newbee.config;\n\nimport org.springframework.boot.autoconfigure.AutoConfigureAfter;\nimport org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration;\nimport org.springframework.cache.CacheManager;\nimport org.springframework.cache.annotation.CachingConfigurerSupport;\nimport org.springframework.cache.annotation.EnableCaching;\nimport org.springframework.cache.interceptor.KeyGenerator;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\nimport org.springframework.data.redis.cache.RedisCacheManager;\nimport org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;\nimport org.springframework.data.redis.core.RedisTemplate;\nimport org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;\nimport org.springframework.data.redis.serializer.StringRedisSerializer;\n\nimport javax.annotation.Resource;\nimport java.io.Serializable;\nimport java.lang.reflect.Method;\nimport java.util.HashSet;\nimport java.util.Set;\n\n@Configuration\n@EnableCaching\n@AutoConfigureAfter(RedisAutoConfiguration.class)\npublic class RedisConfig extends CachingConfigurerSupport {\n\n    @Resource\n    private LettuceConnectionFactory lettuceConnectionFactory;\n\n    public RedisConfig(){}\n\n    @Bean\n    public RedisTemplate<String, Serializable> redisCacheTemplate(LettuceConnectionFactory redisConnectionFactory){\n        RedisTemplate<String,Serializable> template = new RedisTemplate<String,Serializable>();\n        template.setKeySerializer(new StringRedisSerializer());\n        template.setValueSerializer(new GenericJackson2JsonRedisSerializer());\n        template.setHashKeySerializer(new StringRedisSerializer());\n        template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());\n        template.setConnectionFactory(redisConnectionFactory);\n        return template;\n    }\n\n    @Bean\n    public CacheManager cacheManager() {\n        RedisCacheManager.RedisCacheManagerBuilder builder = RedisCacheManager.RedisCacheManagerBuilder\n                .fromConnectionFactory(lettuceConnectionFactory);\n        @SuppressWarnings(\"serial\")\n        Set<String> cacheNames = new HashSet<String>() {\n            {\n                add(\"codeNameCache\");\n            }\n        };\n        builder.initialCacheNames(cacheNames);\n        return builder.build();\n    }\n\n    @Bean\n    public KeyGenerator keyGenerator() {\n        return new KeyGenerator() {\n            @Override\n            public Object generate(Object target, Method method, Object... params) {\n                StringBuffer stringBuffer = new StringBuffer();\n                stringBuffer.append(target.getClass().getName());\n                stringBuffer.append(method.getName());\n                for (Object obj : params) {\n                    stringBuffer.append(obj.toString());\n                }\n                return stringBuffer.toString();\n            }\n        };\n    }\n}\n\n"
  },
  {
    "path": "newbee-mall-cloud-gateway-admin/src/main/java/ltd/gateway/cloud/newbee/filter/ValidTokenGlobalFilter.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本系统已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.gateway.cloud.newbee.filter;\n\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport com.fasterxml.jackson.databind.node.ObjectNode;\nimport ltd.common.cloud.newbee.dto.Result;\nimport ltd.common.cloud.newbee.dto.ResultGenerator;\nimport ltd.common.cloud.newbee.pojo.AdminUserToken;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.cloud.gateway.filter.GatewayFilterChain;\nimport org.springframework.cloud.gateway.filter.GlobalFilter;\nimport org.springframework.core.Ordered;\nimport org.springframework.core.io.buffer.DataBuffer;\nimport org.springframework.data.redis.core.RedisTemplate;\nimport org.springframework.data.redis.core.ValueOperations;\nimport org.springframework.http.HttpHeaders;\nimport org.springframework.http.HttpStatus;\nimport org.springframework.stereotype.Component;\nimport org.springframework.util.StringUtils;\nimport org.springframework.web.server.ServerWebExchange;\nimport reactor.core.publisher.Flux;\nimport reactor.core.publisher.Mono;\n\nimport java.nio.charset.StandardCharsets;\n\n/**\n * @author 程序员十三\n * @qq交流群 791509631\n * @email 2449207463@qq.com\n * @link https://github.com/newbee-ltd\n */\n@Component\npublic class ValidTokenGlobalFilter implements GlobalFilter, Ordered {\n\n    @Autowired\n    private RedisTemplate redisTemplate;\n\n    @Override\n    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {\n\n        // 登录接口、swagger请求，直接放行\n        if (exchange.getRequest().getURI().getPath().equals(\"/users/admin/login\") || exchange.getRequest().getURI().getPath().contains(\"/swagger/v3/api-docs\")) {\n            return chain.filter(exchange);\n        }\n\n        HttpHeaders headers = exchange.getRequest().getHeaders();\n\n        if (headers == null || headers.isEmpty()) {\n            // 返回错误提示\n            return wrapErrorResponse(exchange, chain);\n        }\n\n        String token = headers.getFirst(\"token\");\n\n        if (!StringUtils.hasText(token)) {\n            // 返回错误提示\n            return wrapErrorResponse(exchange, chain);\n        }\n        ValueOperations<String, AdminUserToken> opsForAdminUserToken = redisTemplate.opsForValue();\n        AdminUserToken tokenObject = opsForAdminUserToken.get(token);\n        if (tokenObject == null) {\n            // 返回错误提示\n            return wrapErrorResponse(exchange, chain);\n        }\n\n        return chain.filter(exchange);\n    }\n\n    @Override\n    public int getOrder() {\n        return Ordered.HIGHEST_PRECEDENCE;\n    }\n\n    Mono<Void> wrapErrorResponse(ServerWebExchange exchange, GatewayFilterChain chain) {\n        Result result = ResultGenerator.genErrorResult(419, \"无权限访问\");\n        ObjectMapper mapper = new ObjectMapper();\n        ObjectNode resultNode = mapper.valueToTree(result);\n        byte[] bytes = resultNode.toString().getBytes(StandardCharsets.UTF_8);\n        DataBuffer dataBuffer = exchange.getResponse().bufferFactory().wrap(bytes);\n        exchange.getResponse().setStatusCode(HttpStatus.OK);\n        return exchange.getResponse().writeWith(Flux.just(dataBuffer));\n    }\n\n}"
  },
  {
    "path": "newbee-mall-cloud-gateway-admin/src/main/resources/application.properties",
    "content": "server.port=29100\n# 服务名称\nspring.application.name=newbee-mall-cloud-gateway-admin\n# Nacos地址\nspring.cloud.nacos.discovery.server-addr=127.0.0.1:8848\n# Nacos登录用户名(默认为nacos，生产环境一定要修改)\nspring.cloud.nacos.username=nacos\n# Nacos登录密码(默认为nacos，生产环境一定要修改)\nspring.cloud.nacos.password=nacos\n# 网关开启服务注册与服务发现\nspring.cloud.gateway.discovery.locator.enabled=true\nspring.cloud.gateway.discovery.locator.lower-case-service-id=true\n\n# 用户服务的路由配置\nspring.cloud.gateway.routes[0].id=user-service-route\nspring.cloud.gateway.routes[0].uri=lb://newbee-mall-cloud-user-service\nspring.cloud.gateway.routes[0].order=1\nspring.cloud.gateway.routes[0].predicates[0]=Path=/users/admin/**\n\n# 商品服务的路由配置-1\nspring.cloud.gateway.routes[1].id=categories-admin-service-route\nspring.cloud.gateway.routes[1].uri=lb://newbee-mall-cloud-goods-service\nspring.cloud.gateway.routes[1].order=1\nspring.cloud.gateway.routes[1].predicates[0]=Path=/categories/admin/**\n\n# 商品服务的路由配置-2\nspring.cloud.gateway.routes[2].id=goods-admin-service-route\nspring.cloud.gateway.routes[2].uri=lb://newbee-mall-cloud-goods-service\nspring.cloud.gateway.routes[2].order=1\nspring.cloud.gateway.routes[2].predicates[0]=Path=/goods/admin/**\n\n# 推荐服务的路由配置-1\nspring.cloud.gateway.routes[3].id=carousels-admin-service-route\nspring.cloud.gateway.routes[3].uri=lb://newbee-mall-cloud-recommend-service\nspring.cloud.gateway.routes[3].order=1\nspring.cloud.gateway.routes[3].predicates[0]=Path=/carousels/admin/**\n\n# 推荐服务的路由配置-2\nspring.cloud.gateway.routes[4].id=indexConfigs-admin-service-route\nspring.cloud.gateway.routes[4].uri=lb://newbee-mall-cloud-recommend-service\nspring.cloud.gateway.routes[4].order=1\nspring.cloud.gateway.routes[4].predicates[0]=Path=/indexConfigs/admin/**\n\n# 订单服务的路由配置\nspring.cloud.gateway.routes[5].id=order-service-route\nspring.cloud.gateway.routes[5].uri=lb://newbee-mall-cloud-order-service\nspring.cloud.gateway.routes[5].order=1\nspring.cloud.gateway.routes[5].predicates[0]=Path=/orders/admin/**\n\n# 用户服务Swagger的路由配置\nspring.cloud.gateway.routes[6].id=user-service-swagger-route\nspring.cloud.gateway.routes[6].uri=lb://newbee-mall-cloud-user-service\nspring.cloud.gateway.routes[6].order=1\nspring.cloud.gateway.routes[6].predicates[0]=Path=/users/swagger/**\nspring.cloud.gateway.routes[6].filters[0]=StripPrefix=2\n\n# 商品服务Swagger的路由配置\nspring.cloud.gateway.routes[7].id=goods-service-swagger-route\nspring.cloud.gateway.routes[7].uri=lb://newbee-mall-cloud-goods-service\nspring.cloud.gateway.routes[7].order=1\nspring.cloud.gateway.routes[7].predicates[0]=Path=/categories/swagger/**\nspring.cloud.gateway.routes[7].filters[0]=StripPrefix=2\n\n# 推荐服务Swagger的路由配置\nspring.cloud.gateway.routes[8].id=recommend-service-swagger-route\nspring.cloud.gateway.routes[8].uri=lb://newbee-mall-cloud-recommend-service\nspring.cloud.gateway.routes[8].order=1\nspring.cloud.gateway.routes[8].predicates[0]=Path=/indexConfigs/swagger/**\nspring.cloud.gateway.routes[8].filters[0]=StripPrefix=2\n\n# 订单服务Swagger的路由配置\nspring.cloud.gateway.routes[9].id=order-service-swagger-route\nspring.cloud.gateway.routes[9].uri=lb://newbee-mall-cloud-order-service\nspring.cloud.gateway.routes[9].order=1\nspring.cloud.gateway.routes[9].predicates[0]=Path=/orders/swagger/**\nspring.cloud.gateway.routes[9].filters[0]=StripPrefix=2\n\n##Redis 配置\n# Redis数据库索引（默认为0）\nspring.redis.database=13\n# Redis服务器地址\nspring.redis.host=127.0.0.1\n# Redis服务器连接端口\nspring.redis.port=6379\n# Redis服务器连接密码\nspring.redis.password=123456789\n# 连接池最大连接数（使用负值表示没有限制）\nspring.redis.jedis.pool.max-active=8\n# 连接池最大阻塞等待时间（使用负值表示没有限制）\nspring.redis.jedis.pool.max-wait=-1\n# 连接池中的最大空闲连接\nspring.redis.jedis.pool.max-idle=8\n# 连接池中的最小空闲连接\nspring.redis.jedis.pool.min-idle=0\n# 连接超时时间（毫秒）\nspring.redis.timeout=5000"
  },
  {
    "path": "newbee-mall-cloud-gateway-mall/pom.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--  @author 程序员十三\n      @qq交流群 791509631\n      @email 2449207463@qq.com\n      @link https://github.com/newbee-ltd -->\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd\">\n    <modelVersion>4.0.0</modelVersion>\n    <groupId>ltd.newbee.cloud</groupId>\n    <artifactId>newbee-mall-cloud-gateway-mall</artifactId>\n    <version>0.0.1-SNAPSHOT</version>\n    <name>newbee-mall-cloud-gateway-mall</name>\n    <description>商城端网关模块</description>\n\n    <parent>\n        <groupId>ltd.newbee.cloud</groupId>\n        <artifactId>newbee-mall-cloud</artifactId>\n        <version>0.0.1-SNAPSHOT</version>\n    </parent>\n\n    <properties>\n        <java.version>1.8</java.version>\n        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>\n        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>\n    </properties>\n\n    <dependencies>\n        <dependency>\n            <groupId>org.springframework.cloud</groupId>\n            <artifactId>spring-cloud-starter-gateway</artifactId>\n        </dependency>\n\n        <dependency>\n            <groupId>org.springframework.cloud</groupId>\n            <artifactId>spring-cloud-starter-loadbalancer</artifactId>\n        </dependency>\n\n        <dependency>\n            <groupId>com.alibaba.cloud</groupId>\n            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>\n        </dependency>\n\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter-data-redis</artifactId>\n        </dependency>\n\n        <dependency>\n            <groupId>io.springfox</groupId>\n            <artifactId>springfox-boot-starter</artifactId>\n        </dependency>\n\n        <dependency>\n            <groupId>ltd.user.newbee.cloud</groupId>\n            <artifactId>newbee-mall-cloud-user-api</artifactId>\n            <version>0.0.1-SNAPSHOT</version>\n        </dependency>\n\n        <dependency>\n            <groupId>ltd.newbee.cloud</groupId>\n            <artifactId>newbee-mall-cloud-common</artifactId>\n            <version>0.0.1-SNAPSHOT</version>\n        </dependency>\n\n    </dependencies>\n    <!--  @author 程序员十三\n      @qq交流群 791509631\n      @email 2449207463@qq.com\n      @link https://github.com/newbee-ltd -->\n</project>\n"
  },
  {
    "path": "newbee-mall-cloud-gateway-mall/src/main/java/ltd/gateway/cloud/newbee/NewBeeMallCloudMallGatewayApplication.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本系统已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.gateway.cloud.newbee;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigure.SpringBootApplication;\nimport org.springframework.cloud.client.discovery.EnableDiscoveryClient;\n\n/**\n * @author 程序员十三\n * @qq交流群 791509631\n * @email 2449207463@qq.com\n * @link https://github.com/newbee-ltd\n */\n@SpringBootApplication\n@EnableDiscoveryClient\npublic class NewBeeMallCloudMallGatewayApplication {\n\n    public static void main(String[] args) {\n        SpringApplication.run(NewBeeMallCloudMallGatewayApplication.class, args);\n    }\n\n}\n"
  },
  {
    "path": "newbee-mall-cloud-gateway-mall/src/main/java/ltd/gateway/cloud/newbee/config/PolymerizeSwaggerProvider.java",
    "content": "package ltd.gateway.cloud.newbee.config;\n\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.cloud.gateway.config.GatewayProperties;\nimport org.springframework.cloud.gateway.support.NameUtils;\nimport org.springframework.context.annotation.Primary;\nimport org.springframework.stereotype.Component;\nimport springfox.documentation.swagger.web.SwaggerResource;\nimport springfox.documentation.swagger.web.SwaggerResourcesProvider;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\n/**\n * 在网关层聚合底层微服务的Swagger资源\n *\n * @author 程序员十三\n * @qq交流群 791509631\n * @email 2449207463@qq.com\n * @link https://github.com/newbee-ltd\n */\n@Primary\n@Component\npublic class PolymerizeSwaggerProvider implements SwaggerResourcesProvider {\n\n    /**\n     * Swagger Doc的URL后缀\n     */\n    public static final String API_DOCS_URL = \"/v3/api-docs\";\n\n    @Autowired\n    private GatewayProperties gatewayProperties;\n\n    @Override\n    public List<SwaggerResource> get() {\n        List<SwaggerResource> resources = new ArrayList<>();\n        List<String> routes = new ArrayList<>();\n        //需要聚合的路由配置\n        routes.add(\"user-service-swagger-route\");\n        routes.add(\"recommend-service-swagger-route\");\n        routes.add(\"goods-service-swagger-route\");\n        routes.add(\"order-service-swagger-route\");\n        routes.add(\"shop-cart-service-swagger-route\");\n        gatewayProperties.getRoutes().stream().filter(routeDefinition -> routes.contains(routeDefinition.getId()))\n                .forEach(routeDefinition -> routeDefinition.getPredicates().stream()\n                        .filter(predicateDefinition -> (\"Path\").equalsIgnoreCase(predicateDefinition.getName()))\n                        .forEach(predicateDefinition -> resources.add(swaggerResource(routeDefinition.getId(),\n                                predicateDefinition.getArgs().get(NameUtils.GENERATED_NAME_PREFIX + \"0\")\n                                        .replace(\"/**\", API_DOCS_URL)))));\n        return resources;\n    }\n\n    private SwaggerResource swaggerResource(String name, String url) {\n        SwaggerResource swaggerResource = new SwaggerResource();\n        swaggerResource.setName(name);\n        swaggerResource.setLocation(url);\n        swaggerResource.setSwaggerVersion(\"3.0\");\n        return swaggerResource;\n    }\n}\n"
  },
  {
    "path": "newbee-mall-cloud-gateway-mall/src/main/java/ltd/gateway/cloud/newbee/config/RedisConfig.java",
    "content": "package ltd.gateway.cloud.newbee.config;\n\nimport org.springframework.boot.autoconfigure.AutoConfigureAfter;\nimport org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration;\nimport org.springframework.cache.CacheManager;\nimport org.springframework.cache.annotation.CachingConfigurerSupport;\nimport org.springframework.cache.annotation.EnableCaching;\nimport org.springframework.cache.interceptor.KeyGenerator;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\nimport org.springframework.data.redis.cache.RedisCacheManager;\nimport org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;\nimport org.springframework.data.redis.core.RedisTemplate;\nimport org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;\nimport org.springframework.data.redis.serializer.StringRedisSerializer;\n\nimport javax.annotation.Resource;\nimport java.io.Serializable;\nimport java.lang.reflect.Method;\nimport java.util.HashSet;\nimport java.util.Set;\n\n@Configuration\n@EnableCaching\n@AutoConfigureAfter(RedisAutoConfiguration.class)\npublic class RedisConfig extends CachingConfigurerSupport {\n\n    @Resource\n    private LettuceConnectionFactory lettuceConnectionFactory;\n\n    public RedisConfig(){}\n\n    @Bean\n    public RedisTemplate<String, Serializable> redisCacheTemplate(LettuceConnectionFactory redisConnectionFactory){\n        RedisTemplate<String,Serializable> template = new RedisTemplate<String,Serializable>();\n        template.setKeySerializer(new StringRedisSerializer());\n        template.setValueSerializer(new GenericJackson2JsonRedisSerializer());\n        template.setHashKeySerializer(new StringRedisSerializer());\n        template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());\n        template.setConnectionFactory(redisConnectionFactory);\n        return template;\n    }\n\n    @Bean\n    public CacheManager cacheManager() {\n        RedisCacheManager.RedisCacheManagerBuilder builder = RedisCacheManager.RedisCacheManagerBuilder\n                .fromConnectionFactory(lettuceConnectionFactory);\n        @SuppressWarnings(\"serial\")\n        Set<String> cacheNames = new HashSet<String>() {\n            {\n                add(\"codeNameCache\");\n            }\n        };\n        builder.initialCacheNames(cacheNames);\n        return builder.build();\n    }\n\n    @Bean\n    public KeyGenerator keyGenerator() {\n        return new KeyGenerator() {\n            @Override\n            public Object generate(Object target, Method method, Object... params) {\n                StringBuffer stringBuffer = new StringBuffer();\n                stringBuffer.append(target.getClass().getName());\n                stringBuffer.append(method.getName());\n                for (Object obj : params) {\n                    stringBuffer.append(obj.toString());\n                }\n                return stringBuffer.toString();\n            }\n        };\n    }\n}\n\n"
  },
  {
    "path": "newbee-mall-cloud-gateway-mall/src/main/java/ltd/gateway/cloud/newbee/filter/ValidMallUserTokenGlobalFilter.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本系统已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.gateway.cloud.newbee.filter;\n\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport com.fasterxml.jackson.databind.node.ObjectNode;\nimport ltd.common.cloud.newbee.dto.Result;\nimport ltd.common.cloud.newbee.dto.ResultGenerator;\nimport ltd.common.cloud.newbee.pojo.MallUserToken;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.cloud.gateway.filter.GatewayFilterChain;\nimport org.springframework.cloud.gateway.filter.GlobalFilter;\nimport org.springframework.core.Ordered;\nimport org.springframework.core.io.buffer.DataBuffer;\nimport org.springframework.data.redis.core.RedisTemplate;\nimport org.springframework.data.redis.core.ValueOperations;\nimport org.springframework.http.HttpHeaders;\nimport org.springframework.http.HttpStatus;\nimport org.springframework.stereotype.Component;\nimport org.springframework.util.StringUtils;\nimport org.springframework.web.server.ServerWebExchange;\nimport reactor.core.publisher.Flux;\nimport reactor.core.publisher.Mono;\n\nimport java.nio.charset.StandardCharsets;\nimport java.util.ArrayList;\nimport java.util.List;\n\n/**\n * @author 程序员十三\n * @qq交流群 791509631\n * @email 2449207463@qq.com\n * @link https://github.com/newbee-ltd\n */\n@Component\npublic class ValidMallUserTokenGlobalFilter implements GlobalFilter, Ordered {\n\n    @Autowired\n    private RedisTemplate redisTemplate;\n\n    @Override\n    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {\n\n        final List<String> ignoreURLs = new ArrayList<>();\n        ignoreURLs.add(\"/users/mall/login\");\n        ignoreURLs.add(\"/users/mall/register\");\n        ignoreURLs.add(\"/categories/mall/listAll\");\n        ignoreURLs.add(\"/mall/index/recommondInfos\");\n        ignoreURLs.add(\"/indexConfigs/swagger/v3/api-docs\");\n        ignoreURLs.add(\"/carts/swagger/v3/api-docs\");\n        ignoreURLs.add(\"/orders/swagger/v3/api-docs\");\n        ignoreURLs.add(\"/users/swagger/v3/api-docs\");\n        ignoreURLs.add(\"/goods/swagger/v3/api-docs\");\n\n        // 登录注册接口，直接放行\n        if (ignoreURLs.contains(exchange.getRequest().getURI().getPath())) {\n            return chain.filter(exchange);\n        }\n\n        HttpHeaders headers = exchange.getRequest().getHeaders();\n\n        if (headers == null || headers.isEmpty()) {\n            // 返回错误提示\n            return wrapErrorResponse(exchange, chain);\n        }\n\n        String token = headers.getFirst(\"token\");\n\n        if (!StringUtils.hasText(token)) {\n            // 返回错误提示\n            return wrapErrorResponse(exchange, chain);\n        }\n        ValueOperations<String, MallUserToken> opsForMallUserToken = redisTemplate.opsForValue();\n        MallUserToken tokenObject = opsForMallUserToken.get(token);\n        if (tokenObject == null) {\n            // 返回错误提示\n            return wrapErrorResponse(exchange, chain);\n        }\n\n        return chain.filter(exchange);\n    }\n\n    @Override\n    public int getOrder() {\n        return Ordered.HIGHEST_PRECEDENCE;\n    }\n\n    Mono<Void> wrapErrorResponse(ServerWebExchange exchange, GatewayFilterChain chain) {\n        Result result = ResultGenerator.genErrorResult(416, \"无权限访问\");\n        ObjectMapper mapper = new ObjectMapper();\n        ObjectNode resultNode = mapper.valueToTree(result);\n        byte[] bytes = resultNode.toString().getBytes(StandardCharsets.UTF_8);\n        DataBuffer dataBuffer = exchange.getResponse().bufferFactory().wrap(bytes);\n        exchange.getResponse().setStatusCode(HttpStatus.OK);\n        return exchange.getResponse().writeWith(Flux.just(dataBuffer));\n    }\n\n}"
  },
  {
    "path": "newbee-mall-cloud-gateway-mall/src/main/resources/application.properties",
    "content": "server.port=29110\n\n# 服务名称\nspring.application.name=newbee-mall-cloud-gateway-mall\n# Nacos地址\nspring.cloud.nacos.discovery.server-addr=127.0.0.1:8848\n# Nacos登录用户名(默认为nacos，生产环境一定要修改)\nspring.cloud.nacos.username=nacos\n# Nacos登录密码(默认为nacos，生产环境一定要修改)\nspring.cloud.nacos.password=nacos\n# 网关开启服务注册与服务发现\nspring.cloud.gateway.discovery.locator.enabled=true\nspring.cloud.gateway.discovery.locator.lower-case-service-id=true\n\n# 用户服务的路由配置\nspring.cloud.gateway.routes[0].id=user-service-route\nspring.cloud.gateway.routes[0].uri=lb://newbee-mall-cloud-user-service\nspring.cloud.gateway.routes[0].order=1\nspring.cloud.gateway.routes[0].predicates[0]=Path=/users/mall/**\n\n# 首页接口的路由配置\nspring.cloud.gateway.routes[1].id=recommend-service-route\nspring.cloud.gateway.routes[1].uri=lb://newbee-mall-cloud-recommend-service\nspring.cloud.gateway.routes[1].order=1\nspring.cloud.gateway.routes[1].predicates[0]=Path=/mall/index/**\n\n# 分类接口的路由配置\nspring.cloud.gateway.routes[2].id=goods-service-route\nspring.cloud.gateway.routes[2].uri=lb://newbee-mall-cloud-goods-service\nspring.cloud.gateway.routes[2].order=1\nspring.cloud.gateway.routes[2].predicates[0]=Path=/categories/mall/**\n\n# 商品接口的路由配置\nspring.cloud.gateway.routes[3].id=goods-service-route2\nspring.cloud.gateway.routes[3].uri=lb://newbee-mall-cloud-goods-service\nspring.cloud.gateway.routes[3].order=1\nspring.cloud.gateway.routes[3].predicates[0]=Path=/goods/mall/**\n\n# 购物车接口的路由配置\nspring.cloud.gateway.routes[4].id=shop-cart-service-route\nspring.cloud.gateway.routes[4].uri=lb://newbee-mall-cloud-shop-cart-service\nspring.cloud.gateway.routes[4].order=1\nspring.cloud.gateway.routes[4].predicates[0]=Path=/shop-cart/**\n\n# 订单接口的路由配置\nspring.cloud.gateway.routes[5].id=order-service-route\nspring.cloud.gateway.routes[5].uri=lb://newbee-mall-cloud-order-service\nspring.cloud.gateway.routes[5].order=1\nspring.cloud.gateway.routes[5].predicates[0]=Path=/orders/mall/**\n\n# 收货地址接口的路由配置\nspring.cloud.gateway.routes[6].id=order-service-route2\nspring.cloud.gateway.routes[6].uri=lb://newbee-mall-cloud-order-service\nspring.cloud.gateway.routes[6].order=1\nspring.cloud.gateway.routes[6].predicates[0]=Path=/mall/address/**\n\n# 商品服务Swagger的路由配置\nspring.cloud.gateway.routes[7].id=goods-service-swagger-route\nspring.cloud.gateway.routes[7].uri=lb://newbee-mall-cloud-goods-service\nspring.cloud.gateway.routes[7].order=1\nspring.cloud.gateway.routes[7].predicates[0]=Path=/goods/swagger/**\nspring.cloud.gateway.routes[7].filters[0]=StripPrefix=2\n\n# 推荐服务Swagger的路由配置\nspring.cloud.gateway.routes[8].id=recommend-service-swagger-route\nspring.cloud.gateway.routes[8].uri=lb://newbee-mall-cloud-recommend-service\nspring.cloud.gateway.routes[8].order=1\nspring.cloud.gateway.routes[8].predicates[0]=Path=/indexConfigs/swagger/**\nspring.cloud.gateway.routes[8].filters[0]=StripPrefix=2\n\n# 订单服务Swagger的路由配置\nspring.cloud.gateway.routes[9].id=order-service-swagger-route\nspring.cloud.gateway.routes[9].uri=lb://newbee-mall-cloud-order-service\nspring.cloud.gateway.routes[9].order=1\nspring.cloud.gateway.routes[9].predicates[0]=Path=/orders/swagger/**\nspring.cloud.gateway.routes[9].filters[0]=StripPrefix=2\n\n# 用户服务Swagger的路由配置\nspring.cloud.gateway.routes[10].id=user-service-swagger-route\nspring.cloud.gateway.routes[10].uri=lb://newbee-mall-cloud-user-service\nspring.cloud.gateway.routes[10].order=1\nspring.cloud.gateway.routes[10].predicates[0]=Path=/users/swagger/**\nspring.cloud.gateway.routes[10].filters[0]=StripPrefix=2\n\n# 购物车服务Swagger的路由配置\nspring.cloud.gateway.routes[11].id=shop-cart-service-swagger-route\nspring.cloud.gateway.routes[11].uri=lb://newbee-mall-cloud-shop-cart-service\nspring.cloud.gateway.routes[11].order=1\nspring.cloud.gateway.routes[11].predicates[0]=Path=/carts/swagger/**\nspring.cloud.gateway.routes[11].filters[0]=StripPrefix=2\n\n##Redis 配置\n# Redis数据库索引（默认为0）\nspring.redis.database=13\n# Redis服务器地址\nspring.redis.host=127.0.0.1\n# Redis服务器连接端口\nspring.redis.port=6379\n# Redis服务器连接密码\nspring.redis.password=123456789\n# 连接池最大连接数（使用负值表示没有限制）\nspring.redis.jedis.pool.max-active=8\n# 连接池最大阻塞等待时间（使用负值表示没有限制）\nspring.redis.jedis.pool.max-wait=-1\n# 连接池中的最大空闲连接\nspring.redis.jedis.pool.max-idle=8\n# 连接池中的最小空闲连接\nspring.redis.jedis.pool.min-idle=0\n# 连接超时时间（毫秒）\nspring.redis.timeout=5000"
  },
  {
    "path": "newbee-mall-cloud-goods-service/newbee-mall-cloud-goods-api/pom.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--  @author 程序员十三\n      @qq交流群 791509631\n      @email 2449207463@qq.com\n      @link https://github.com/newbee-ltd -->\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd\">\n    <modelVersion>4.0.0</modelVersion>\n    <groupId>ltd.goods.newbee.cloud</groupId>\n    <artifactId>newbee-mall-cloud-goods-api</artifactId>\n    <packaging>jar</packaging>\n    <version>0.0.1-SNAPSHOT</version>\n    <name>newbee-mall-cloud-goods-api</name>\n    <description>商品服务openfeign</description>\n\n    <parent>\n        <groupId>ltd.newbee.cloud</groupId>\n        <artifactId>newbee-mall-cloud-goods-service</artifactId>\n        <version>0.0.1-SNAPSHOT</version>\n    </parent>\n\n    <properties>\n        <java.version>1.8</java.version>\n    </properties>\n\n    <dependencies>\n\n        <dependency>\n            <groupId>org.springframework.cloud</groupId>\n            <artifactId>spring-cloud-starter-openfeign</artifactId>\n        </dependency>\n\n        <dependency>\n            <groupId>ltd.newbee.cloud</groupId>\n            <artifactId>newbee-mall-cloud-common</artifactId>\n            <version>0.0.1-SNAPSHOT</version>\n        </dependency>\n\n    </dependencies>\n    <!--  @author 程序员十三\n      @qq交流群 791509631\n      @email 2449207463@qq.com\n      @link https://github.com/newbee-ltd -->\n</project>\n"
  },
  {
    "path": "newbee-mall-cloud-goods-service/newbee-mall-cloud-goods-api/src/main/java/ltd/goods/cloud/newbee/dto/NewBeeMallGoodsDTO.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.goods.cloud.newbee.dto;\n\npublic class NewBeeMallGoodsDTO {\n    private Long goodsId;\n\n    private String goodsName;\n\n    private String goodsIntro;\n\n    private Long goodsCategoryId;\n\n    private String goodsCoverImg;\n\n    private String goodsCarousel;\n\n    private Integer originalPrice;\n\n    private Integer sellingPrice;\n\n    private Integer stockNum;\n\n    private String tag;\n\n    private Byte goodsSellStatus;\n\n    public Long getGoodsId() {\n        return goodsId;\n    }\n\n    public void setGoodsId(Long goodsId) {\n        this.goodsId = goodsId;\n    }\n\n    public String getGoodsName() {\n        return goodsName;\n    }\n\n    public void setGoodsName(String goodsName) {\n        this.goodsName = goodsName;\n    }\n\n    public String getGoodsIntro() {\n        return goodsIntro;\n    }\n\n    public void setGoodsIntro(String goodsIntro) {\n        this.goodsIntro = goodsIntro;\n    }\n\n    public Long getGoodsCategoryId() {\n        return goodsCategoryId;\n    }\n\n    public void setGoodsCategoryId(Long goodsCategoryId) {\n        this.goodsCategoryId = goodsCategoryId;\n    }\n\n    public String getGoodsCoverImg() {\n        return goodsCoverImg;\n    }\n\n    public void setGoodsCoverImg(String goodsCoverImg) {\n        this.goodsCoverImg = goodsCoverImg;\n    }\n\n    public String getGoodsCarousel() {\n        return goodsCarousel;\n    }\n\n    public void setGoodsCarousel(String goodsCarousel) {\n        this.goodsCarousel = goodsCarousel;\n    }\n\n    public Integer getOriginalPrice() {\n        return originalPrice;\n    }\n\n    public void setOriginalPrice(Integer originalPrice) {\n        this.originalPrice = originalPrice;\n    }\n\n    public Integer getSellingPrice() {\n        return sellingPrice;\n    }\n\n    public void setSellingPrice(Integer sellingPrice) {\n        this.sellingPrice = sellingPrice;\n    }\n\n    public Integer getStockNum() {\n        return stockNum;\n    }\n\n    public void setStockNum(Integer stockNum) {\n        this.stockNum = stockNum;\n    }\n\n    public String getTag() {\n        return tag;\n    }\n\n    public void setTag(String tag) {\n        this.tag = tag;\n    }\n\n    public Byte getGoodsSellStatus() {\n        return goodsSellStatus;\n    }\n\n    public void setGoodsSellStatus(Byte goodsSellStatus) {\n        this.goodsSellStatus = goodsSellStatus;\n    }\n}"
  },
  {
    "path": "newbee-mall-cloud-goods-service/newbee-mall-cloud-goods-api/src/main/java/ltd/goods/cloud/newbee/dto/StockNumDTO.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.goods.cloud.newbee.dto;\n\npublic class StockNumDTO {\n    private Long goodsId;\n\n    private Integer goodsCount;\n\n    public Long getGoodsId() {\n        return goodsId;\n    }\n\n    public void setGoodsId(Long goodsId) {\n        this.goodsId = goodsId;\n    }\n\n    public Integer getGoodsCount() {\n        return goodsCount;\n    }\n\n    public void setGoodsCount(Integer goodsCount) {\n        this.goodsCount = goodsCount;\n    }\n}\n"
  },
  {
    "path": "newbee-mall-cloud-goods-service/newbee-mall-cloud-goods-api/src/main/java/ltd/goods/cloud/newbee/dto/UpdateStockNumDTO.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.goods.cloud.newbee.dto;\n\nimport java.util.List;\n\npublic class UpdateStockNumDTO {\n\n    private List<StockNumDTO> stockNumDTOS;\n\n    public List<StockNumDTO> getStockNumDTOS() {\n        return stockNumDTOS;\n    }\n\n    public void setStockNumDTOS(List<StockNumDTO> stockNumDTOS) {\n        this.stockNumDTOS = stockNumDTOS;\n    }\n}\n"
  },
  {
    "path": "newbee-mall-cloud-goods-service/newbee-mall-cloud-goods-api/src/main/java/ltd/goods/cloud/newbee/openfeign/NewBeeCloudGoodsServiceFeign.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本系统已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.goods.cloud.newbee.openfeign;\n\nimport ltd.common.cloud.newbee.dto.Result;\nimport ltd.goods.cloud.newbee.dto.NewBeeMallGoodsDTO;\nimport ltd.goods.cloud.newbee.dto.UpdateStockNumDTO;\nimport org.springframework.cloud.openfeign.FeignClient;\nimport org.springframework.web.bind.annotation.GetMapping;\nimport org.springframework.web.bind.annotation.PutMapping;\nimport org.springframework.web.bind.annotation.RequestBody;\nimport org.springframework.web.bind.annotation.RequestParam;\n\nimport java.util.List;\n\n@FeignClient(value = \"newbee-mall-cloud-goods-service\", path = \"/goods\")\npublic interface NewBeeCloudGoodsServiceFeign {\n\n    @GetMapping(value = \"/admin/goodsDetail\")\n    Result<NewBeeMallGoodsDTO> getGoodsDetail(@RequestParam(value = \"goodsId\") Long goodsId);\n\n    @GetMapping(value = \"/admin/listByGoodsIds\")\n    Result<List<NewBeeMallGoodsDTO>> listByGoodsIds(@RequestParam(value = \"goodsIds\") List<Long> goodsIds);\n\n    @PutMapping(value = \"/admin/updateStock\")\n    Result<Boolean> updateStock(@RequestBody UpdateStockNumDTO updateStockNumDTO);\n}\n"
  },
  {
    "path": "newbee-mall-cloud-goods-service/newbee-mall-cloud-goods-web/pom.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--  @author 程序员十三\n      @qq交流群 791509631\n      @email 2449207463@qq.com\n      @link https://github.com/newbee-ltd -->\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd\">\n    <modelVersion>4.0.0</modelVersion>\n    <groupId>ltd.goods.newbee.cloud</groupId>\n    <artifactId>newbee-mall-cloud-goods-web</artifactId>\n    <version>0.0.1-SNAPSHOT</version>\n    <name>newbee-mall-cloud-goods-web</name>\n    <description>商品服务</description>\n\n    <parent>\n        <groupId>ltd.newbee.cloud</groupId>\n        <artifactId>newbee-mall-cloud-goods-service</artifactId>\n        <version>0.0.1-SNAPSHOT</version>\n    </parent>\n\n    <properties>\n        <java.version>1.8</java.version>\n    </properties>\n\n    <dependencies>\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter-web</artifactId>\n        </dependency>\n\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter-test</artifactId>\n            <scope>test</scope>\n        </dependency>\n\n        <dependency>\n            <groupId>com.alibaba.cloud</groupId>\n            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>\n        </dependency>\n\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter-validation</artifactId>\n        </dependency>\n\n        <dependency>\n            <groupId>org.mybatis.spring.boot</groupId>\n            <artifactId>mybatis-spring-boot-starter</artifactId>\n        </dependency>\n\n        <!-- Seata 依赖包 -->\n        <dependency>\n            <groupId>com.alibaba.cloud</groupId>\n            <artifactId>spring-cloud-starter-alibaba-seata</artifactId>\n        </dependency>\n\n        <dependency>\n            <groupId>org.projectlombok</groupId>\n            <artifactId>lombok</artifactId>\n            <version>${lombok.version}</version>\n            <scope>provided</scope>\n        </dependency>\n\n        <dependency>\n            <groupId>io.springfox</groupId>\n            <artifactId>springfox-boot-starter</artifactId>\n        </dependency>\n\n        <dependency>\n            <groupId>mysql</groupId>\n            <artifactId>mysql-connector-java</artifactId>\n            <scope>runtime</scope>\n        </dependency>\n\n        <dependency>\n            <groupId>com.alibaba.cloud</groupId>\n            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>\n        </dependency>\n\n        <!-- Sleuth依赖项 -->\n        <dependency>\n            <groupId>org.springframework.cloud</groupId>\n            <artifactId>spring-cloud-starter-sleuth</artifactId>\n        </dependency>\n        <!--Zipkin 依赖-->\n        <dependency>\n            <groupId>org.springframework.cloud</groupId>\n            <artifactId>spring-cloud-sleuth-zipkin</artifactId>\n        </dependency>\n\n        <dependency>\n            <groupId>net.logstash.logback</groupId>\n            <artifactId>logstash-logback-encoder</artifactId>\n            <version>${logstash-logback-encoder.version}</version>\n        </dependency>\n\n        <dependency>\n            <groupId>ltd.newbee.cloud</groupId>\n            <artifactId>newbee-mall-cloud-common</artifactId>\n            <version>0.0.1-SNAPSHOT</version>\n        </dependency>\n\n        <dependency>\n            <groupId>org.springframework.cloud</groupId>\n            <artifactId>spring-cloud-starter-loadbalancer</artifactId>\n        </dependency>\n\n        <dependency>\n            <groupId>ltd.user.newbee.cloud</groupId>\n            <artifactId>newbee-mall-cloud-user-api</artifactId>\n            <version>0.0.1-SNAPSHOT</version>\n        </dependency>\n\n    </dependencies>\n    <!--  @author 程序员十三\n      @qq交流群 791509631\n      @email 2449207463@qq.com\n      @link https://github.com/newbee-ltd -->\n</project>\n"
  },
  {
    "path": "newbee-mall-cloud-goods-service/newbee-mall-cloud-goods-web/src/main/java/ltd/goods/cloud/newbee/NewBeeMallCloudGoodsServiceApplication.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本系统已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.goods.cloud.newbee;\n\nimport ltd.user.cloud.newbee.openfeign.NewBeeCloudUserServiceFeign;\nimport org.mybatis.spring.annotation.MapperScan;\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigure.SpringBootApplication;\nimport org.springframework.cloud.client.discovery.EnableDiscoveryClient;\nimport org.springframework.cloud.openfeign.EnableFeignClients;\n\n/**\n * @author 程序员十三\n * @qq交流群 791509631\n * @email 2449207463@qq.com\n * @link https://github.com/newbee-ltd\n */\n@SpringBootApplication\n@EnableDiscoveryClient\n@MapperScan(\"ltd.goods.cloud.newbee.dao\")\n@EnableFeignClients(basePackageClasses = {NewBeeCloudUserServiceFeign.class})\npublic class NewBeeMallCloudGoodsServiceApplication {\n\n    public static void main(String[] args) {\n        System.setProperty(\"nacos.logging.default.config.enabled\",\"false\");\n        SpringApplication.run(NewBeeMallCloudGoodsServiceApplication.class, args);\n    }\n\n}\n"
  },
  {
    "path": "newbee-mall-cloud-goods-service/newbee-mall-cloud-goods-web/src/main/java/ltd/goods/cloud/newbee/config/GoodsServiceExceptionHandler.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.goods.cloud.newbee.config;\n\nimport ltd.common.cloud.newbee.enums.ServiceResultEnum;\nimport ltd.common.cloud.newbee.dto.Result;\nimport ltd.common.cloud.newbee.exception.NewBeeMallException;\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport org.springframework.validation.BindException;\nimport org.springframework.validation.BindingResult;\nimport org.springframework.web.bind.MethodArgumentNotValidException;\nimport org.springframework.web.bind.annotation.ExceptionHandler;\nimport org.springframework.web.bind.annotation.RestControllerAdvice;\n\nimport javax.servlet.http.HttpServletRequest;\nimport java.util.Objects;\n\n/**\n * 全局异常处理\n */\n@RestControllerAdvice\npublic class GoodsServiceExceptionHandler {\n\n    private static final Logger log = LoggerFactory.getLogger(GoodsServiceExceptionHandler.class);\n\n    @ExceptionHandler(BindException.class)\n    public Object bindException(BindException e) {\n        log.error(\"GoodsServiceExceptionHandler:\",e);\n        Result result = new Result();\n        result.setResultCode(510);\n        BindingResult bindingResult = e.getBindingResult();\n        result.setMessage(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());\n        return result;\n    }\n\n    @ExceptionHandler(MethodArgumentNotValidException.class)\n    public Object bindException(MethodArgumentNotValidException e) {\n        log.error(\"GoodsServiceExceptionHandler:\",e);\n        Result result = new Result();\n        result.setResultCode(510);\n        BindingResult bindingResult = e.getBindingResult();\n        result.setMessage(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());\n        return result;\n    }\n\n    @ExceptionHandler(Exception.class)\n    public Object handleException(Exception e, HttpServletRequest req) {\n        log.error(\"GoodsServiceExceptionHandler:\",e);\n        Result result = new Result();\n        result.setResultCode(500);\n        //区分是否为自定义异常\n        if (e instanceof NewBeeMallException) {\n            result.setMessage(e.getMessage());\n            if (e.getMessage().equals(ServiceResultEnum.ADMIN_NOT_LOGIN_ERROR.getResult()) || e.getMessage().equals(ServiceResultEnum.ADMIN_TOKEN_EXPIRE_ERROR.getResult())) {\n                result.setResultCode(419);\n            }\n            if (e.getMessage().equals(ServiceResultEnum.NOT_LOGIN_ERROR.getResult()) || e.getMessage().equals(ServiceResultEnum.TOKEN_EXPIRE_ERROR.getResult())) {\n                result.setResultCode(416);\n            }\n        } else {\n            e.printStackTrace();\n            result.setMessage(\"未知异常，请查看控制台日志并检查配置文件。\");\n        }\n        return result;\n\n    }\n}\n"
  },
  {
    "path": "newbee-mall-cloud-goods-service/newbee-mall-cloud-goods-web/src/main/java/ltd/goods/cloud/newbee/config/GoodsServiceSwagger3Config.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.goods.cloud.newbee.config;\n\nimport ltd.common.cloud.newbee.pojo.MallUserToken;\nimport ltd.common.cloud.newbee.pojo.AdminUserToken;\nimport ltd.goods.cloud.newbee.entity.LoginAdminUser;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\nimport springfox.documentation.builders.ApiInfoBuilder;\nimport springfox.documentation.builders.PathSelectors;\nimport springfox.documentation.builders.RequestHandlerSelectors;\nimport springfox.documentation.builders.RequestParameterBuilder;\nimport springfox.documentation.oas.annotations.EnableOpenApi;\nimport springfox.documentation.schema.ScalarType;\nimport springfox.documentation.service.ApiInfo;\nimport springfox.documentation.service.ParameterType;\nimport springfox.documentation.service.RequestParameter;\nimport springfox.documentation.spi.DocumentationType;\nimport springfox.documentation.spring.web.plugins.Docket;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\n@Configuration\n@EnableOpenApi\npublic class GoodsServiceSwagger3Config{\n\n    @Bean\n    public Docket api() {\n        return new Docket(DocumentationType.OAS_30)\n                .apiInfo(apiInfo())\n                .ignoredParameterTypes(AdminUserToken.class, LoginAdminUser.class, MallUserToken.class)\n                .select()\n                .apis(RequestHandlerSelectors.basePackage(\"ltd.goods.cloud.newbee.controller\"))\n                .paths(PathSelectors.any())\n                .build()\n                .globalRequestParameters(getGlobalRequestParameters());\n    }\n\n    //生成全局通用参数\n    private List<RequestParameter> getGlobalRequestParameters() {\n        List<RequestParameter> parameters = new ArrayList<>();\n        parameters.add(new RequestParameterBuilder()\n                .name(\"token\")\n                .description(\"登录认证token\")\n                .required(false) // 非必传\n                .in(ParameterType.HEADER) //请求头中的参数，其它类型可以点进ParameterType类中查看\n                .query(q -> q.model(m -> m.scalarModel(ScalarType.STRING)))\n                .build());\n        return parameters;\n    }\n\n    private ApiInfo apiInfo() {\n        return new ApiInfoBuilder()\n                .title(\"newbee-mall-cloud-goods-service接口文档\")\n                .description(\"swagger接口文档\")\n                .version(\"2.0\")\n                .build();\n    }\n}"
  },
  {
    "path": "newbee-mall-cloud-goods-service/newbee-mall-cloud-goods-web/src/main/java/ltd/goods/cloud/newbee/config/GoodsServiceWebMvcConfigurer.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.goods.cloud.newbee.config;\n\nimport com.alibaba.cloud.seata.web.SeataHandlerInterceptor;\nimport com.alibaba.cloud.sentinel.SentinelProperties;\nimport com.alibaba.csp.sentinel.adapter.spring.webmvc.SentinelWebInterceptor;\nimport ltd.goods.cloud.newbee.config.handler.TokenToAdminUserMethodArgumentResolver;\nimport ltd.goods.cloud.newbee.config.handler.TokenToMallUserMethodArgumentResolver;\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.context.annotation.Configuration;\nimport org.springframework.context.annotation.Lazy;\nimport org.springframework.web.method.support.HandlerMethodArgumentResolver;\nimport org.springframework.web.servlet.HandlerInterceptor;\nimport org.springframework.web.servlet.config.annotation.InterceptorRegistry;\nimport org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;\nimport org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;\n\nimport java.util.List;\nimport java.util.Optional;\n\n@Configuration\npublic class GoodsServiceWebMvcConfigurer extends WebMvcConfigurationSupport {\n\n    private static final Logger log = LoggerFactory.getLogger(GoodsServiceWebMvcConfigurer.class);\n\n    @Autowired\n    private SentinelProperties sentinelProperties;\n    @Autowired\n    private Optional<SentinelWebInterceptor> sentinelWebInterceptorOptional;\n\n    @Autowired\n    @Lazy\n    private TokenToAdminUserMethodArgumentResolver tokenToAdminUserMethodArgumentResolver;\n\n    @Autowired\n    @Lazy\n    private TokenToMallUserMethodArgumentResolver tokenToMallUserMethodArgumentResolver;\n\n    /**\n     * @param argumentResolvers\n     * @tip @TokenToAdminUser 注解处理方法\n     */\n    public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {\n        argumentResolvers.add(tokenToAdminUserMethodArgumentResolver);\n        argumentResolvers.add(tokenToMallUserMethodArgumentResolver);\n    }\n\n    @Override\n    public void addResourceHandlers(ResourceHandlerRegistry registry) {\n        registry.\n                addResourceHandler(\"/swagger-ui/**\")\n                .addResourceLocations(\"classpath:/META-INF/resources/webjars/springfox-swagger-ui/\")\n                .resourceChain(false);\n    }\n\n    public void addInterceptors(InterceptorRegistry registry) {\n        registry.addInterceptor(new SeataHandlerInterceptor()).addPathPatterns(\"/**\");\n        if (this.sentinelWebInterceptorOptional.isPresent()) {\n            SentinelProperties.Filter filterConfig = this.sentinelProperties.getFilter();\n            registry.addInterceptor((HandlerInterceptor) this.sentinelWebInterceptorOptional.get()).order(filterConfig.getOrder()).addPathPatterns(filterConfig.getUrlPatterns());\n            log.info(\"[Sentinel Starter] register SentinelWebInterceptor with urlPatterns: {}.\", filterConfig.getUrlPatterns());\n        }\n    }\n\n}"
  },
  {
    "path": "newbee-mall-cloud-goods-service/newbee-mall-cloud-goods-web/src/main/java/ltd/goods/cloud/newbee/config/OpenFeignConfiguration.java",
    "content": "package ltd.goods.cloud.newbee.config;\n\nimport feign.Logger;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\n\n@Configuration\npublic class OpenFeignConfiguration {\n    @Bean\n    public Logger.Level openFeignLogLevel() {\n        // 设置OpenFeign日志级别\n        return Logger.Level.FULL;\n    }\n}\n"
  },
  {
    "path": "newbee-mall-cloud-goods-service/newbee-mall-cloud-goods-web/src/main/java/ltd/goods/cloud/newbee/config/SeataProxyConfiguration.java",
    "content": "package ltd.goods.cloud.newbee.config;\n\nimport com.alibaba.druid.pool.DruidDataSource;\nimport io.seata.rm.datasource.DataSourceProxy;\nimport org.springframework.boot.context.properties.ConfigurationProperties;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\nimport org.springframework.context.annotation.Primary;\n\nimport javax.annotation.PostConstruct;\nimport javax.sql.DataSource;\n\n@Configuration\npublic class SeataProxyConfiguration {\n\n    //创建Druid数据源\n    @Bean\n    @ConfigurationProperties(prefix = \"spring.datasource\")\n    public DruidDataSource druidDataSource() {\n        return new DruidDataSource();\n    }\n\n    //创建DataSource数据源代理\n    @Bean(\"dataSource\")\n    @Primary\n    public DataSource dataSourceDelegation(DruidDataSource druidDataSource) {\n        return new DataSourceProxy(druidDataSource);\n    }\n\n    /*\n     * 解决druid 日志报错：discard long time none received connection:xxx\n     * */\n    @PostConstruct\n    public void setProperties(){\n        System.setProperty(\"druid.mysql.usePingMethod\",\"false\");\n    }\n}\n\n"
  },
  {
    "path": "newbee-mall-cloud-goods-service/newbee-mall-cloud-goods-web/src/main/java/ltd/goods/cloud/newbee/config/annotation/TokenToAdminUser.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.goods.cloud.newbee.config.annotation;\n\nimport java.lang.annotation.*;\n\n@Target({ElementType.PARAMETER})\n@Retention(RetentionPolicy.RUNTIME)\n@Documented\npublic @interface TokenToAdminUser {\n\n    /**\n     * 当前用户在request中的名字\n     *\n     * @return\n     */\n    String value() default \"adminUser\";\n\n}\n"
  },
  {
    "path": "newbee-mall-cloud-goods-service/newbee-mall-cloud-goods-web/src/main/java/ltd/goods/cloud/newbee/config/annotation/TokenToMallUser.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.goods.cloud.newbee.config.annotation;\n\nimport java.lang.annotation.*;\n\n@Target({ElementType.PARAMETER})\n@Retention(RetentionPolicy.RUNTIME)\n@Documented\npublic @interface TokenToMallUser {\n\n    /**\n     * 当前用户在request中的名字\n     *\n     * @return\n     */\n    String value() default \"user\";\n\n}\n"
  },
  {
    "path": "newbee-mall-cloud-goods-service/newbee-mall-cloud-goods-web/src/main/java/ltd/goods/cloud/newbee/config/handler/TokenToAdminUserMethodArgumentResolver.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.goods.cloud.newbee.config.handler;\n\nimport ltd.common.cloud.newbee.enums.ServiceResultEnum;\nimport ltd.common.cloud.newbee.dto.Result;\nimport ltd.common.cloud.newbee.exception.NewBeeMallException;\nimport ltd.goods.cloud.newbee.config.annotation.TokenToAdminUser;\nimport ltd.goods.cloud.newbee.entity.LoginAdminUser;\nimport ltd.user.cloud.newbee.openfeign.NewBeeCloudUserServiceFeign;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.core.MethodParameter;\nimport org.springframework.stereotype.Component;\nimport org.springframework.web.bind.support.WebDataBinderFactory;\nimport org.springframework.web.context.request.NativeWebRequest;\nimport org.springframework.web.method.support.HandlerMethodArgumentResolver;\nimport org.springframework.web.method.support.ModelAndViewContainer;\n\nimport java.util.LinkedHashMap;\n\n@Component\npublic class TokenToAdminUserMethodArgumentResolver implements HandlerMethodArgumentResolver {\n\n    @Autowired\n    private NewBeeCloudUserServiceFeign newBeeCloudUserService;\n\n    public TokenToAdminUserMethodArgumentResolver() {\n    }\n\n    public boolean supportsParameter(MethodParameter parameter) {\n        if (parameter.hasParameterAnnotation(TokenToAdminUser.class)) {\n            return true;\n        }\n        return false;\n    }\n\n    public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) {\n        if (parameter.getParameterAnnotation(TokenToAdminUser.class) instanceof TokenToAdminUser) {\n            String token = webRequest.getHeader(\"token\");\n            if (null != token && !\"\".equals(token) && token.length() == 32) {\n                // 通过用户中心获取用户信息\n                Result result = newBeeCloudUserService.getAdminUserByToken(token);\n\n                if (result == null || result.getResultCode() != 200 || result.getData() == null) {\n                    NewBeeMallException.fail(ServiceResultEnum.ADMIN_NOT_LOGIN_ERROR.getResult());\n                }\n\n                LinkedHashMap resultData = (LinkedHashMap) result.getData();\n\n                // 将返回的字段封装到LoginAdminUser对象中\n                LoginAdminUser loginAdminUser = new LoginAdminUser();\n                loginAdminUser.setAdminUserId(Long.valueOf(resultData.get(\"adminUserId\").toString()));\n                loginAdminUser.setLoginUserName((String) resultData.get(\"loginUserName\"));\n                loginAdminUser.setNickName((String) resultData.get(\"nickName\"));\n                loginAdminUser.setLocked(Byte.valueOf(resultData.get(\"locked\").toString()));\n                return loginAdminUser;\n            } else {\n                NewBeeMallException.fail(ServiceResultEnum.ADMIN_NOT_LOGIN_ERROR.getResult());\n            }\n        }\n        return null;\n    }\n\n}\n"
  },
  {
    "path": "newbee-mall-cloud-goods-service/newbee-mall-cloud-goods-web/src/main/java/ltd/goods/cloud/newbee/config/handler/TokenToMallUserMethodArgumentResolver.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.goods.cloud.newbee.config.handler;\n\nimport ltd.common.cloud.newbee.enums.ServiceResultEnum;\nimport ltd.common.cloud.newbee.dto.Result;\nimport ltd.common.cloud.newbee.exception.NewBeeMallException;\nimport ltd.common.cloud.newbee.pojo.MallUserToken;\nimport ltd.goods.cloud.newbee.config.annotation.TokenToMallUser;\nimport ltd.user.cloud.newbee.dto.MallUserDTO;\nimport ltd.user.cloud.newbee.openfeign.NewBeeCloudUserServiceFeign;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.core.MethodParameter;\nimport org.springframework.stereotype.Component;\nimport org.springframework.web.bind.support.WebDataBinderFactory;\nimport org.springframework.web.context.request.NativeWebRequest;\nimport org.springframework.web.method.support.HandlerMethodArgumentResolver;\nimport org.springframework.web.method.support.ModelAndViewContainer;\n\n@Component\npublic class TokenToMallUserMethodArgumentResolver implements HandlerMethodArgumentResolver {\n\n    @Autowired\n    private NewBeeCloudUserServiceFeign newBeeCloudUserService;\n\n    public TokenToMallUserMethodArgumentResolver() {\n    }\n\n    public boolean supportsParameter(MethodParameter parameter) {\n        if (parameter.hasParameterAnnotation(TokenToMallUser.class)) {\n            return true;\n        }\n        return false;\n    }\n\n    public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) {\n        if (parameter.getParameterAnnotation(TokenToMallUser.class) instanceof TokenToMallUser) {\n            String token = webRequest.getHeader(\"token\");\n            if (null != token && !\"\".equals(token) && token.length() == 32) {\n                Result<MallUserDTO> result = newBeeCloudUserService.getMallUserByToken(token);\n                if (result == null || result.getResultCode() != 200 || result.getData() == null) {\n                    NewBeeMallException.fail(ServiceResultEnum.TOKEN_EXPIRE_ERROR.getResult());\n                }\n                MallUserToken mallUserToken = new MallUserToken();\n                mallUserToken.setToken(token);\n                mallUserToken.setUserId(result.getData().getUserId());\n                return mallUserToken;\n            } else {\n                NewBeeMallException.fail(ServiceResultEnum.NOT_LOGIN_ERROR.getResult());\n            }\n        }\n        return null;\n    }\n\n}\n"
  },
  {
    "path": "newbee-mall-cloud-goods-service/newbee-mall-cloud-goods-web/src/main/java/ltd/goods/cloud/newbee/controller/NewBeeAdminGoodsCategoryController.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本系统已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.goods.cloud.newbee.controller;\n\nimport io.swagger.annotations.Api;\nimport io.swagger.annotations.ApiOperation;\nimport io.swagger.annotations.ApiParam;\nimport ltd.common.cloud.newbee.enums.NewBeeMallCategoryLevelEnum;\nimport ltd.common.cloud.newbee.enums.ServiceResultEnum;\nimport ltd.common.cloud.newbee.dto.PageQueryUtil;\nimport ltd.common.cloud.newbee.dto.Result;\nimport ltd.common.cloud.newbee.dto.ResultGenerator;\nimport ltd.common.cloud.newbee.util.BeanUtil;\nimport ltd.goods.cloud.newbee.config.annotation.TokenToAdminUser;\nimport ltd.goods.cloud.newbee.controller.param.BatchIdParam;\nimport ltd.goods.cloud.newbee.controller.param.GoodsCategoryAddParam;\nimport ltd.goods.cloud.newbee.controller.param.GoodsCategoryEditParam;\nimport ltd.goods.cloud.newbee.entity.GoodsCategory;\nimport ltd.goods.cloud.newbee.entity.LoginAdminUser;\nimport ltd.goods.cloud.newbee.service.NewBeeMallCategoryService;\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport org.springframework.util.CollectionUtils;\nimport org.springframework.web.bind.annotation.*;\n\nimport javax.annotation.Resource;\nimport javax.validation.Valid;\nimport java.util.Collections;\nimport java.util.HashMap;\nimport java.util.List;\nimport java.util.Map;\n\n/**\n * @author 13\n * @qq交流群 796794009\n * @email 2449207463@qq.com\n * @link https://github.com/newbee-ltd\n */\n@RestController\n@Api(value = \"v1\", tags = \"后台管理系统分类模块接口\")\n@RequestMapping(\"/categories/admin\")\npublic class NewBeeAdminGoodsCategoryController {\n\n    private static final Logger logger = LoggerFactory.getLogger(NewBeeAdminGoodsCategoryController.class);\n\n    @Resource\n    private NewBeeMallCategoryService newBeeMallCategoryService;\n\n    /**\n     * 列表\n     */\n    @RequestMapping(value = \"/list\", method = RequestMethod.GET)\n    @ApiOperation(value = \"商品分类列表\", notes = \"根据级别和上级分类id查询\")\n    public Result list(@RequestParam(required = false) @ApiParam(value = \"页码\") Integer pageNumber,\n                       @RequestParam(required = false) @ApiParam(value = \"每页条数\") Integer pageSize,\n                       @RequestParam(required = false) @ApiParam(value = \"分类级别\") Integer categoryLevel,\n                       @RequestParam(required = false) @ApiParam(value = \"上级分类的id\") Long parentId, @TokenToAdminUser LoginAdminUser adminUser) {\n        logger.info(\"adminUser:{}\", adminUser.toString());\n        if (pageNumber == null || pageNumber < 1 || pageSize == null || pageSize < 10 || categoryLevel == null || categoryLevel < 0 || categoryLevel > 3 || parentId == null || parentId < 0) {\n            return ResultGenerator.genFailResult(\"分页参数异常！\");\n        }\n        Map params = new HashMap(8);\n        params.put(\"page\", pageNumber);\n        params.put(\"limit\", pageSize);\n        params.put(\"categoryLevel\", categoryLevel);\n        params.put(\"parentId\", parentId);\n        PageQueryUtil pageUtil = new PageQueryUtil(params);\n        return ResultGenerator.genSuccessResult(newBeeMallCategoryService.getCategorisPage(pageUtil));\n    }\n\n    /**\n     * 列表\n     */\n    @RequestMapping(value = \"/list4Select\", method = RequestMethod.GET)\n    @ApiOperation(value = \"商品分类列表\", notes = \"用于三级分类联动效果制作\")\n    public Result listForSelect(@RequestParam(\"categoryId\") Long categoryId, @TokenToAdminUser LoginAdminUser adminUser) {\n        logger.info(\"adminUser:{}\", adminUser.toString());\n        if (categoryId == null || categoryId < 1) {\n            return ResultGenerator.genFailResult(\"缺少参数！\");\n        }\n        GoodsCategory category = newBeeMallCategoryService.getGoodsCategoryById(categoryId);\n        //既不是一级分类也不是二级分类则为不返回数据\n        if (category == null || category.getCategoryLevel() == NewBeeMallCategoryLevelEnum.LEVEL_THREE.getLevel()) {\n            return ResultGenerator.genFailResult(\"参数异常！\");\n        }\n        Map categoryResult = new HashMap(4);\n        if (category.getCategoryLevel() == NewBeeMallCategoryLevelEnum.LEVEL_ONE.getLevel()) {\n            //如果是一级分类则返回当前一级分类下的所有二级分类，以及二级分类列表中第一条数据下的所有三级分类列表\n            //查询一级分类列表中第一个实体的所有二级分类\n            List<GoodsCategory> secondLevelCategories = newBeeMallCategoryService.selectByLevelAndParentIdsAndNumber(Collections.singletonList(categoryId), NewBeeMallCategoryLevelEnum.LEVEL_TWO.getLevel());\n            if (!CollectionUtils.isEmpty(secondLevelCategories)) {\n                //查询二级分类列表中第一个实体的所有三级分类\n                List<GoodsCategory> thirdLevelCategories = newBeeMallCategoryService.selectByLevelAndParentIdsAndNumber(Collections.singletonList(secondLevelCategories.get(0).getCategoryId()), NewBeeMallCategoryLevelEnum.LEVEL_THREE.getLevel());\n                categoryResult.put(\"secondLevelCategories\", secondLevelCategories);\n                categoryResult.put(\"thirdLevelCategories\", thirdLevelCategories);\n            }\n        }\n        if (category.getCategoryLevel() == NewBeeMallCategoryLevelEnum.LEVEL_TWO.getLevel()) {\n            //如果是二级分类则返回当前分类下的所有三级分类列表\n            List<GoodsCategory> thirdLevelCategories = newBeeMallCategoryService.selectByLevelAndParentIdsAndNumber(Collections.singletonList(categoryId), NewBeeMallCategoryLevelEnum.LEVEL_THREE.getLevel());\n            categoryResult.put(\"thirdLevelCategories\", thirdLevelCategories);\n        }\n        return ResultGenerator.genSuccessResult(categoryResult);\n    }\n\n    /**\n     * 添加\n     */\n    @RequestMapping(value = \"/add\", method = RequestMethod.POST)\n    @ApiOperation(value = \"新增分类\", notes = \"新增分类\")\n    public Result save(@RequestBody @Valid GoodsCategoryAddParam goodsCategoryAddParam, @TokenToAdminUser LoginAdminUser adminUser) {\n        logger.info(\"adminUser:{}\", adminUser.toString());\n        GoodsCategory goodsCategory = new GoodsCategory();\n        BeanUtil.copyProperties(goodsCategoryAddParam, goodsCategory);\n        String result = newBeeMallCategoryService.saveCategory(goodsCategory);\n        if (ServiceResultEnum.SUCCESS.getResult().equals(result)) {\n            return ResultGenerator.genSuccessResult();\n        } else {\n            return ResultGenerator.genFailResult(result);\n        }\n    }\n\n\n    /**\n     * 修改\n     */\n    @RequestMapping(value = \"/update\", method = RequestMethod.PUT)\n    @ApiOperation(value = \"修改分类信息\", notes = \"修改分类信息\")\n    public Result update(@RequestBody @Valid GoodsCategoryEditParam goodsCategoryEditParam, @TokenToAdminUser LoginAdminUser adminUser) {\n        logger.info(\"adminUser:{}\", adminUser.toString());\n        GoodsCategory goodsCategory = new GoodsCategory();\n        BeanUtil.copyProperties(goodsCategoryEditParam, goodsCategory);\n        String result = newBeeMallCategoryService.updateGoodsCategory(goodsCategory);\n        if (ServiceResultEnum.SUCCESS.getResult().equals(result)) {\n            return ResultGenerator.genSuccessResult();\n        } else {\n            return ResultGenerator.genFailResult(result);\n        }\n    }\n\n    /**\n     * 详情\n     */\n    @RequestMapping(value = \"/detail/{id}\", method = RequestMethod.GET)\n    @ApiOperation(value = \"获取单条分类信息\", notes = \"根据id查询\")\n    public Result info(@PathVariable(\"id\") Long id, @TokenToAdminUser LoginAdminUser adminUser) {\n        logger.info(\"adminUser:{}\", adminUser.toString());\n        GoodsCategory goodsCategory = newBeeMallCategoryService.getGoodsCategoryById(id);\n        if (goodsCategory == null) {\n            return ResultGenerator.genFailResult(\"未查询到数据\");\n        }\n        return ResultGenerator.genSuccessResult(goodsCategory);\n    }\n\n    /**\n     * 分类删除\n     */\n    @RequestMapping(value = \"/batchDelete\", method = RequestMethod.DELETE)\n    @ApiOperation(value = \"批量删除分类信息\", notes = \"批量删除分类信息\")\n    public Result delete(@RequestBody BatchIdParam batchIdParam, @TokenToAdminUser LoginAdminUser adminUser) {\n        logger.info(\"adminUser:{}\", adminUser.toString());\n        if (batchIdParam == null || batchIdParam.getIds().length < 1) {\n            return ResultGenerator.genFailResult(\"参数异常！\");\n        }\n        if (newBeeMallCategoryService.deleteBatch(batchIdParam.getIds())) {\n            return ResultGenerator.genSuccessResult();\n        } else {\n            return ResultGenerator.genFailResult(\"删除失败\");\n        }\n    }\n}"
  },
  {
    "path": "newbee-mall-cloud-goods-service/newbee-mall-cloud-goods-web/src/main/java/ltd/goods/cloud/newbee/controller/NewBeeAdminGoodsInfoController.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本系统已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.goods.cloud.newbee.controller;\n\nimport io.seata.core.context.RootContext;\nimport io.swagger.annotations.Api;\nimport io.swagger.annotations.ApiOperation;\nimport io.swagger.annotations.ApiParam;\nimport ltd.common.cloud.newbee.enums.ServiceResultEnum;\nimport ltd.common.cloud.newbee.dto.PageQueryUtil;\nimport ltd.common.cloud.newbee.dto.Result;\nimport ltd.common.cloud.newbee.dto.ResultGenerator;\nimport ltd.common.cloud.newbee.util.BeanUtil;\nimport ltd.goods.cloud.newbee.config.annotation.TokenToAdminUser;\nimport ltd.goods.cloud.newbee.controller.param.BatchIdParam;\nimport ltd.goods.cloud.newbee.controller.param.GoodsAddParam;\nimport ltd.goods.cloud.newbee.controller.param.GoodsEditParam;\nimport ltd.goods.cloud.newbee.entity.GoodsCategory;\nimport ltd.goods.cloud.newbee.entity.LoginAdminUser;\nimport ltd.goods.cloud.newbee.entity.NewBeeMallGoods;\nimport ltd.goods.cloud.newbee.entity.UpdateStockNumDTO;\nimport ltd.goods.cloud.newbee.service.NewBeeMallCategoryService;\nimport ltd.goods.cloud.newbee.service.NewBeeMallGoodsService;\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport org.springframework.util.StringUtils;\nimport org.springframework.web.bind.annotation.*;\n\nimport javax.annotation.Resource;\nimport javax.validation.Valid;\nimport java.util.HashMap;\nimport java.util.List;\nimport java.util.Map;\n\n/**\n * @author 13\n * @qq交流群 796794009\n * @email 2449207463@qq.com\n * @link https://github.com/newbee-ltd\n */\n@RestController\n@Api(value = \"v1\", tags = \"后台管理系统商品模块接口\")\n@RequestMapping(\"/goods/admin\")\npublic class NewBeeAdminGoodsInfoController {\n\n    private static final Logger logger = LoggerFactory.getLogger(NewBeeAdminGoodsInfoController.class);\n\n    @Resource\n    private NewBeeMallGoodsService newBeeMallGoodsService;\n    @Resource\n    private NewBeeMallCategoryService newBeeMallCategoryService;\n\n    /**\n     * 列表\n     */\n    @RequestMapping(value = \"/list\", method = RequestMethod.GET)\n    @ApiOperation(value = \"商品列表\", notes = \"可根据名称和上架状态筛选\")\n    public Result list(@RequestParam(required = false) @ApiParam(value = \"页码\") Integer pageNumber,\n                       @RequestParam(required = false) @ApiParam(value = \"每页条数\") Integer pageSize,\n                       @RequestParam(required = false) @ApiParam(value = \"商品名称\") String goodsName,\n                       @RequestParam(required = false) @ApiParam(value = \"上架状态 0-上架 1-下架\") Integer goodsSellStatus, @TokenToAdminUser LoginAdminUser adminUser) {\n        logger.info(\"adminUser:{}\", adminUser.toString());\n        if (pageNumber == null || pageNumber < 1 || pageSize == null || pageSize < 10) {\n            return ResultGenerator.genFailResult(\"分页参数异常！\");\n        }\n        Map params = new HashMap(8);\n        params.put(\"page\", pageNumber);\n        params.put(\"limit\", pageSize);\n        if (StringUtils.hasText(goodsName)) {\n            params.put(\"goodsName\", goodsName);\n        }\n        if (goodsSellStatus != null) {\n            params.put(\"goodsSellStatus\", goodsSellStatus);\n        }\n        PageQueryUtil pageUtil = new PageQueryUtil(params);\n        return ResultGenerator.genSuccessResult(newBeeMallGoodsService.getNewBeeMallGoodsPage(pageUtil));\n    }\n\n    /**\n     * 添加\n     */\n    @RequestMapping(value = \"/add\", method = RequestMethod.POST)\n    @ApiOperation(value = \"新增商品信息\", notes = \"新增商品信息\")\n    public Result save(@RequestBody @Valid GoodsAddParam goodsAddParam, @TokenToAdminUser LoginAdminUser adminUser) {\n        logger.info(\"adminUser:{}\", adminUser.toString());\n        NewBeeMallGoods newBeeMallGoods = new NewBeeMallGoods();\n        BeanUtil.copyProperties(goodsAddParam, newBeeMallGoods);\n        String result = newBeeMallGoodsService.saveNewBeeMallGoods(newBeeMallGoods);\n        if (ServiceResultEnum.SUCCESS.getResult().equals(result)) {\n            return ResultGenerator.genSuccessResult();\n        } else {\n            return ResultGenerator.genFailResult(result);\n        }\n    }\n\n\n    /**\n     * 修改\n     */\n    @RequestMapping(value = \"/update\", method = RequestMethod.PUT)\n    @ApiOperation(value = \"修改商品信息\", notes = \"修改商品信息\")\n    public Result update(@RequestBody @Valid GoodsEditParam goodsEditParam, @TokenToAdminUser LoginAdminUser adminUser) {\n        logger.info(\"adminUser:{}\", adminUser.toString());\n        NewBeeMallGoods newBeeMallGoods = new NewBeeMallGoods();\n        BeanUtil.copyProperties(goodsEditParam, newBeeMallGoods);\n        String result = newBeeMallGoodsService.updateNewBeeMallGoods(newBeeMallGoods);\n        if (ServiceResultEnum.SUCCESS.getResult().equals(result)) {\n            return ResultGenerator.genSuccessResult();\n        } else {\n            return ResultGenerator.genFailResult(result);\n        }\n    }\n\n    /**\n     * 详情\n     */\n    @GetMapping(\"/detail/{id}\")\n    @ApiOperation(value = \"获取单条商品信息\", notes = \"根据id查询\")\n    public Result info(@PathVariable(\"id\") Long id, @TokenToAdminUser LoginAdminUser adminUser) {\n        logger.info(\"adminUser:{}\", adminUser.toString());\n        Map goodsInfo = new HashMap(8);\n        NewBeeMallGoods goods = newBeeMallGoodsService.getNewBeeMallGoodsById(id);\n        if (goods == null) {\n            return ResultGenerator.genFailResult(ServiceResultEnum.DATA_NOT_EXIST.getResult());\n        }\n        goodsInfo.put(\"goods\", goods);\n        GoodsCategory thirdCategory;\n        GoodsCategory secondCategory;\n        GoodsCategory firstCategory;\n        thirdCategory = newBeeMallCategoryService.getGoodsCategoryById(goods.getGoodsCategoryId());\n        if (thirdCategory != null) {\n            goodsInfo.put(\"thirdCategory\", thirdCategory);\n            secondCategory = newBeeMallCategoryService.getGoodsCategoryById(thirdCategory.getParentId());\n            if (secondCategory != null) {\n                goodsInfo.put(\"secondCategory\", secondCategory);\n                firstCategory = newBeeMallCategoryService.getGoodsCategoryById(secondCategory.getParentId());\n                if (firstCategory != null) {\n                    goodsInfo.put(\"firstCategory\", firstCategory);\n                }\n            }\n        }\n        return ResultGenerator.genSuccessResult(goodsInfo);\n    }\n\n    /**\n     * 批量修改销售状态\n     */\n    @RequestMapping(value = \"/updateStatus/{sellStatus}\", method = RequestMethod.PUT)\n    @ApiOperation(value = \"批量修改销售状态\", notes = \"批量修改销售状态\")\n    public Result delete(@RequestBody BatchIdParam batchIdParam, @PathVariable(\"sellStatus\") int sellStatus, @TokenToAdminUser LoginAdminUser adminUser) {\n        logger.info(\"adminUser:{}\", adminUser.toString());\n        if (batchIdParam == null || batchIdParam.getIds().length < 1) {\n            return ResultGenerator.genFailResult(\"参数异常！\");\n        }\n        if (sellStatus != 0 && sellStatus != 1) {\n            return ResultGenerator.genFailResult(\"状态异常！\");\n        }\n        if (newBeeMallGoodsService.batchUpdateSellStatus(batchIdParam.getIds(), sellStatus)) {\n            return ResultGenerator.genSuccessResult();\n        } else {\n            return ResultGenerator.genFailResult(\"修改失败\");\n        }\n    }\n\n    /**\n     * 详情\n     */\n    @GetMapping(\"/goodsDetail\")\n    @ApiOperation(value = \"获取单条商品信息\", notes = \"根据id查询\")\n    public Result goodsDetail(@RequestParam(\"goodsId\") Long goodsId) {\n        NewBeeMallGoods goods = newBeeMallGoodsService.getNewBeeMallGoodsById(goodsId);\n        return ResultGenerator.genSuccessResult(goods);\n    }\n\n    /**\n     * 根据ids查询商品列表\n     */\n    @GetMapping(\"/listByGoodsIds\")\n    @ApiOperation(value = \"根据ids查询商品列表\", notes = \"根据ids查询\")\n    public Result getNewBeeMallGoodsByIds(@RequestParam(\"goodsIds\") List<Long> goodsIds) {\n        List<NewBeeMallGoods> newBeeMallGoods = newBeeMallGoodsService.getNewBeeMallGoodsByIds(goodsIds);\n        return ResultGenerator.genSuccessResult(newBeeMallGoods);\n    }\n\n    /**\n     * 修改库存\n     */\n    @PutMapping(\"/updateStock\")\n    @ApiOperation(value = \"修改库存\", notes = \"\")\n    public Result updateStock(@RequestBody UpdateStockNumDTO updateStockNumDTO) {\n        System.out.println(\"RootContext.getXID()=\"+RootContext.getXID());\n        return ResultGenerator.genSuccessResult(newBeeMallGoodsService.updateStockNum(updateStockNumDTO.getStockNumDTOS()));\n    }\n\n}"
  },
  {
    "path": "newbee-mall-cloud-goods-service/newbee-mall-cloud-goods-web/src/main/java/ltd/goods/cloud/newbee/controller/NewBeeMallGoodsCategoryController.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.goods.cloud.newbee.controller;\n\nimport io.swagger.annotations.Api;\nimport io.swagger.annotations.ApiOperation;\nimport ltd.common.cloud.newbee.enums.ServiceResultEnum;\nimport ltd.common.cloud.newbee.dto.Result;\nimport ltd.common.cloud.newbee.dto.ResultGenerator;\nimport ltd.common.cloud.newbee.exception.NewBeeMallException;\nimport ltd.goods.cloud.newbee.controller.vo.NewBeeMallIndexCategoryVO;\nimport ltd.goods.cloud.newbee.service.NewBeeMallCategoryService;\nimport org.springframework.util.CollectionUtils;\nimport org.springframework.web.bind.annotation.GetMapping;\nimport org.springframework.web.bind.annotation.RequestMapping;\nimport org.springframework.web.bind.annotation.RestController;\n\nimport javax.annotation.Resource;\nimport java.util.List;\n\n@RestController\n@Api(value = \"v1\", tags = \"新蜂商城分类页面接口\")\n@RequestMapping(\"/categories/mall\")\npublic class NewBeeMallGoodsCategoryController {\n\n    @Resource\n    private NewBeeMallCategoryService newBeeMallCategoryService;\n\n    @GetMapping(\"/listAll\")\n    @ApiOperation(value = \"获取分类数据\", notes = \"分类页面使用\")\n    public Result<List<NewBeeMallIndexCategoryVO>> getCategories() {\n        List<NewBeeMallIndexCategoryVO> categories = newBeeMallCategoryService.getCategoriesForIndex();\n        if (CollectionUtils.isEmpty(categories)) {\n            NewBeeMallException.fail(ServiceResultEnum.DATA_NOT_EXIST.getResult());\n        }\n        return ResultGenerator.genSuccessResult(categories);\n    }\n}\n"
  },
  {
    "path": "newbee-mall-cloud-goods-service/newbee-mall-cloud-goods-web/src/main/java/ltd/goods/cloud/newbee/controller/NewBeeMallGoodsController.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.goods.cloud.newbee.controller;\n\nimport io.swagger.annotations.Api;\nimport io.swagger.annotations.ApiOperation;\nimport io.swagger.annotations.ApiParam;\nimport ltd.common.cloud.newbee.enums.ServiceResultEnum;\nimport ltd.common.cloud.newbee.dto.PageQueryUtil;\nimport ltd.common.cloud.newbee.dto.PageResult;\nimport ltd.common.cloud.newbee.dto.Result;\nimport ltd.common.cloud.newbee.dto.ResultGenerator;\nimport ltd.common.cloud.newbee.exception.NewBeeMallException;\nimport ltd.common.cloud.newbee.pojo.MallUserToken;\nimport ltd.common.cloud.newbee.util.BeanUtil;\nimport ltd.goods.cloud.newbee.config.annotation.TokenToMallUser;\nimport ltd.goods.cloud.newbee.controller.vo.NewBeeMallGoodsDetailVO;\nimport ltd.goods.cloud.newbee.controller.vo.NewBeeMallSearchGoodsVO;\nimport ltd.goods.cloud.newbee.entity.NewBeeMallGoods;\nimport ltd.goods.cloud.newbee.service.NewBeeMallGoodsService;\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport org.springframework.util.StringUtils;\nimport org.springframework.validation.BindException;\nimport org.springframework.web.bind.annotation.*;\n\nimport javax.annotation.Resource;\nimport java.util.HashMap;\nimport java.util.List;\nimport java.util.Map;\n\n@RestController\n@Api(value = \"v1\", tags = \"新蜂商城商品相关接口\")\n@RequestMapping(\"/goods/mall\")\npublic class NewBeeMallGoodsController {\n\n    private static final Logger logger = LoggerFactory.getLogger(NewBeeMallGoodsController.class);\n\n    @Resource\n    private NewBeeMallGoodsService newBeeMallGoodsService;\n\n    @GetMapping(\"/test1\")\n    public Result<String> test1() throws BindException {\n        throw new BindException(1,\"BindException\");\n    }\n\n    @GetMapping(\"/test2\")\n    public Result<String> test2() throws NewBeeMallException {\n        NewBeeMallException.fail(\"NewBeeMallException\");\n        return ResultGenerator.genSuccessResult(\"test2\");\n    }\n\n    @GetMapping(\"/test3\")\n    public Result<String> test3() throws Exception {\n        int i=1/0;\n        return ResultGenerator.genSuccessResult(\"test2\");\n    }\n\n    @GetMapping(\"/search\")\n    @ApiOperation(value = \"商品搜索接口\", notes = \"根据关键字和分类id进行搜索\")\n    public Result<PageResult<List<NewBeeMallSearchGoodsVO>>> search(@RequestParam(required = false) @ApiParam(value = \"搜索关键字\") String keyword,\n                                                                    @RequestParam(required = false) @ApiParam(value = \"分类id\") Long goodsCategoryId,\n                                                                    @RequestParam(required = false) @ApiParam(value = \"orderBy\") String orderBy,\n                                                                    @RequestParam(required = false) @ApiParam(value = \"页码\") Integer pageNumber,\n                                                                    @TokenToMallUser MallUserToken loginMallUserToken) {\n        \n        logger.info(\"goods search api,keyword={},goodsCategoryId={},orderBy={},pageNumber={},userId={}\", keyword, goodsCategoryId, orderBy, pageNumber, loginMallUserToken.getUserId());\n\n        Map params = new HashMap(8);\n        //两个搜索参数都为空，直接返回异常\n        if (goodsCategoryId == null && !StringUtils.hasText(keyword)) {\n            NewBeeMallException.fail(\"非法的搜索参数\");\n        }\n        if (pageNumber == null || pageNumber < 1) {\n            pageNumber = 1;\n        }\n        params.put(\"goodsCategoryId\", goodsCategoryId);\n        params.put(\"page\", pageNumber);\n        params.put(\"limit\", 10);\n        //对keyword做过滤 去掉空格\n        if (StringUtils.hasText(keyword)) {\n            params.put(\"keyword\", keyword);\n        }\n        if (StringUtils.hasText(orderBy)) {\n            params.put(\"orderBy\", orderBy);\n        }\n        //搜索上架状态下的商品\n        params.put(\"goodsSellStatus\", 0);\n        //封装商品数据\n        PageQueryUtil pageUtil = new PageQueryUtil(params);\n        return ResultGenerator.genSuccessResult(newBeeMallGoodsService.searchNewBeeMallGoods(pageUtil));\n    }\n\n    @GetMapping(\"/detail/{goodsId}\")\n    @ApiOperation(value = \"商品详情接口\", notes = \"传参为商品id\")\n    public Result<NewBeeMallGoodsDetailVO> goodsDetail(@ApiParam(value = \"商品id\") @PathVariable(\"goodsId\") Long goodsId, @TokenToMallUser MallUserToken loginMallUserToken) {\n        logger.info(\"goods detail api,goodsId={},userId={}\", goodsId, loginMallUserToken.getUserId());\n        if (goodsId < 1) {\n            return ResultGenerator.genFailResult(\"参数异常\");\n        }\n        NewBeeMallGoods goods = newBeeMallGoodsService.getNewBeeMallGoodsById(goodsId);\n        if (0 != goods.getGoodsSellStatus()) {\n            NewBeeMallException.fail(ServiceResultEnum.GOODS_PUT_DOWN.getResult());\n        }\n        NewBeeMallGoodsDetailVO goodsDetailVO = new NewBeeMallGoodsDetailVO();\n        BeanUtil.copyProperties(goods, goodsDetailVO);\n        goodsDetailVO.setGoodsCarouselList(goods.getGoodsCarousel().split(\",\"));\n        return ResultGenerator.genSuccessResult(goodsDetailVO);\n    }\n\n}\n"
  },
  {
    "path": "newbee-mall-cloud-goods-service/newbee-mall-cloud-goods-web/src/main/java/ltd/goods/cloud/newbee/controller/param/BatchIdParam.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.goods.cloud.newbee.controller.param;\n\nimport lombok.Data;\n\nimport java.io.Serializable;\n\n@Data\npublic class BatchIdParam implements Serializable {\n    //id数组\n    Long[] ids;\n}\n"
  },
  {
    "path": "newbee-mall-cloud-goods-service/newbee-mall-cloud-goods-web/src/main/java/ltd/goods/cloud/newbee/controller/param/GoodsAddParam.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.goods.cloud.newbee.controller.param;\n\nimport io.swagger.annotations.ApiModelProperty;\nimport lombok.Data;\nimport org.hibernate.validator.constraints.Length;\n\nimport javax.validation.constraints.Max;\nimport javax.validation.constraints.Min;\nimport javax.validation.constraints.NotEmpty;\nimport javax.validation.constraints.NotNull;\n\n@Data\npublic class GoodsAddParam {\n\n    @ApiModelProperty(\"商品名称\")\n    @NotEmpty(message = \"商品名称不能为空\")\n    @Length(max = 128,message = \"商品名称内容过长\")\n    private String goodsName;\n\n    @ApiModelProperty(\"商品简介\")\n    @NotEmpty(message = \"商品简介不能为空\")\n    @Length(max = 200,message = \"商品简介内容过长\")\n    private String goodsIntro;\n\n    @ApiModelProperty(\"分类id\")\n    @NotNull(message = \"分类id不能为空\")\n    @Min(value = 1, message = \"分类id最低为1\")\n    private Long goodsCategoryId;\n\n    @ApiModelProperty(\"商品主图\")\n    @NotEmpty(message = \"商品主图不能为空\")\n    private String goodsCoverImg;\n\n    @ApiModelProperty(\"originalPrice\")\n    @NotNull(message = \"originalPrice不能为空\")\n    @Min(value = 1, message = \"originalPrice最低为1\")\n    @Max(value = 1000000, message = \"originalPrice最高为1000000\")\n    private Integer originalPrice;\n\n    @ApiModelProperty(\"sellingPrice\")\n    @NotNull(message = \"sellingPrice不能为空\")\n    @Min(value = 1, message = \"sellingPrice最低为1\")\n    @Max(value = 1000000, message = \"sellingPrice最高为1000000\")\n    private Integer sellingPrice;\n\n    @ApiModelProperty(\"库存\")\n    @NotNull(message = \"库存不能为空\")\n    @Min(value = 1, message = \"库存最低为1\")\n    @Max(value = 100000, message = \"库存最高为100000\")\n    private Integer stockNum;\n\n    @ApiModelProperty(\"商品标签\")\n    @NotEmpty(message = \"商品标签不能为空\")\n    @Length(max = 16,message = \"商品标签内容过长\")\n    private String tag;\n\n    private Byte goodsSellStatus;\n\n    @ApiModelProperty(\"商品详情\")\n    @NotEmpty(message = \"商品详情不能为空\")\n    private String goodsDetailContent;\n}"
  },
  {
    "path": "newbee-mall-cloud-goods-service/newbee-mall-cloud-goods-web/src/main/java/ltd/goods/cloud/newbee/controller/param/GoodsCategoryAddParam.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.goods.cloud.newbee.controller.param;\n\nimport io.swagger.annotations.ApiModelProperty;\nimport lombok.Data;\nimport org.hibernate.validator.constraints.Length;\n\nimport javax.validation.constraints.Max;\nimport javax.validation.constraints.Min;\nimport javax.validation.constraints.NotEmpty;\nimport javax.validation.constraints.NotNull;\n\n@Data\npublic class GoodsCategoryAddParam {\n\n    @ApiModelProperty(\"分类层级\")\n    @NotNull(message = \"categoryLevel不能为空\")\n    @Min(value = 1, message = \"分类级别最低为1\")\n    @Max(value = 3, message = \"分类级别最高为3\")\n    private Byte categoryLevel;\n\n    @ApiModelProperty(\"父类id\")\n    @NotNull(message = \"parentId不能为空\")\n    @Min(value = 0, message = \"parentId最低为0\")\n    private Long parentId;\n\n    @ApiModelProperty(\"分类名称\")\n    @NotEmpty(message = \"categoryName不能为空\")\n    @Length(max = 16,message = \"分类名称过长\")\n    private String categoryName;\n\n    @ApiModelProperty(\"排序值\")\n    @Min(value = 1, message = \"categoryRank最低为1\")\n    @Max(value = 200, message = \"categoryRank最高为200\")\n    @NotNull(message = \"categoryRank不能为空\")\n    private Integer categoryRank;\n}"
  },
  {
    "path": "newbee-mall-cloud-goods-service/newbee-mall-cloud-goods-web/src/main/java/ltd/goods/cloud/newbee/controller/param/GoodsCategoryEditParam.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.goods.cloud.newbee.controller.param;\n\nimport io.swagger.annotations.ApiModelProperty;\nimport lombok.Data;\nimport org.hibernate.validator.constraints.Length;\n\nimport javax.validation.constraints.Max;\nimport javax.validation.constraints.Min;\nimport javax.validation.constraints.NotEmpty;\nimport javax.validation.constraints.NotNull;\n\n@Data\npublic class GoodsCategoryEditParam {\n\n    @ApiModelProperty(\"待修改分类id\")\n    @NotNull(message = \"分类id不能为空\")\n    @Min(value = 1, message = \"分类id不能为空\")\n    private Long categoryId;\n\n    @ApiModelProperty(\"分类层级\")\n    @NotNull(message = \"categoryLevel不能为空\")\n    @Min(value = 1, message = \"分类级别最低为1\")\n    @Max(value = 3, message = \"分类级别最高为3\")\n    private Byte categoryLevel;\n\n    @ApiModelProperty(\"父类id\")\n    @NotNull(message = \"parentId不能为空\")\n    @Min(value = 0, message = \"parentId最低为0\")\n    private Long parentId;\n\n    @ApiModelProperty(\"分类名称\")\n    @NotEmpty(message = \"categoryName不能为空\")\n    @Length(max = 16,message = \"分类名称过长\")\n    private String categoryName;\n\n    @ApiModelProperty(\"排序值\")\n    @Min(value = 1, message = \"categoryRank最低为1\")\n    @Max(value = 200, message = \"categoryRank最高为200\")\n    @NotNull(message = \"categoryRank不能为空\")\n    private Integer categoryRank;\n}"
  },
  {
    "path": "newbee-mall-cloud-goods-service/newbee-mall-cloud-goods-web/src/main/java/ltd/goods/cloud/newbee/controller/param/GoodsEditParam.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.goods.cloud.newbee.controller.param;\n\nimport io.swagger.annotations.ApiModelProperty;\nimport lombok.Data;\nimport org.hibernate.validator.constraints.Length;\n\nimport javax.validation.constraints.Max;\nimport javax.validation.constraints.Min;\nimport javax.validation.constraints.NotEmpty;\nimport javax.validation.constraints.NotNull;\n\n@Data\npublic class GoodsEditParam {\n\n    @ApiModelProperty(\"待修改商品id\")\n    @NotNull(message = \"商品id不能为空\")\n    @Min(value = 1, message = \"商品id不能为空\")\n    private Long goodsId;\n\n    @ApiModelProperty(\"商品名称\")\n    @NotEmpty(message = \"商品名称不能为空\")\n    @Length(max = 128,message = \"商品名称内容过长\")\n    private String goodsName;\n\n    @ApiModelProperty(\"商品简介\")\n    @NotEmpty(message = \"商品简介不能为空\")\n    @Length(max = 200,message = \"商品简介内容过长\")\n    private String goodsIntro;\n\n    @ApiModelProperty(\"分类id\")\n    @NotNull(message = \"分类id不能为空\")\n    @Min(value = 1, message = \"分类id最低为1\")\n    private Long goodsCategoryId;\n\n    @ApiModelProperty(\"商品主图\")\n    @NotEmpty(message = \"商品主图不能为空\")\n    private String goodsCoverImg;\n\n    @ApiModelProperty(\"originalPrice\")\n    @NotNull(message = \"originalPrice不能为空\")\n    @Min(value = 1, message = \"originalPrice最低为1\")\n    @Max(value = 1000000, message = \"originalPrice最高为1000000\")\n    private Integer originalPrice;\n\n    @ApiModelProperty(\"sellingPrice\")\n    @NotNull(message = \"sellingPrice不能为空\")\n    @Min(value = 1, message = \"sellingPrice最低为1\")\n    @Max(value = 1000000, message = \"sellingPrice最高为1000000\")\n    private Integer sellingPrice;\n\n    @ApiModelProperty(\"库存\")\n    @NotNull(message = \"库存不能为空\")\n    @Min(value = 1, message = \"库存最低为1\")\n    @Max(value = 100000, message = \"库存最高为100000\")\n    private Integer stockNum;\n\n    @ApiModelProperty(\"商品标签\")\n    @NotEmpty(message = \"商品标签不能为空\")\n    @Length(max = 16,message = \"商品标签内容过长\")\n    private String tag;\n\n    private Byte goodsSellStatus;\n\n    @ApiModelProperty(\"商品详情\")\n    @NotEmpty(message = \"商品详情不能为空\")\n    private String goodsDetailContent;\n}"
  },
  {
    "path": "newbee-mall-cloud-goods-service/newbee-mall-cloud-goods-web/src/main/java/ltd/goods/cloud/newbee/controller/vo/NewBeeMallGoodsDetailVO.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.goods.cloud.newbee.controller.vo;\n\nimport io.swagger.annotations.ApiModelProperty;\nimport lombok.Data;\n\nimport java.io.Serializable;\n\n/**\n * 商品详情页VO\n */\n@Data\npublic class NewBeeMallGoodsDetailVO implements Serializable {\n\n    @ApiModelProperty(\"商品id\")\n    private Long goodsId;\n\n    @ApiModelProperty(\"商品名称\")\n    private String goodsName;\n\n    @ApiModelProperty(\"商品简介\")\n    private String goodsIntro;\n\n    @ApiModelProperty(\"商品图片地址\")\n    private String goodsCoverImg;\n\n    @ApiModelProperty(\"商品价格\")\n    private Integer sellingPrice;\n\n    @ApiModelProperty(\"商品标签\")\n    private String tag;\n\n    @ApiModelProperty(\"商品图片\")\n    private String[] goodsCarouselList;\n\n    @ApiModelProperty(\"商品原价\")\n    private Integer originalPrice;\n\n    @ApiModelProperty(\"商品详情字段\")\n    private String goodsDetailContent;\n}\n"
  },
  {
    "path": "newbee-mall-cloud-goods-service/newbee-mall-cloud-goods-web/src/main/java/ltd/goods/cloud/newbee/controller/vo/NewBeeMallIndexCategoryVO.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.goods.cloud.newbee.controller.vo;\n\nimport io.swagger.annotations.ApiModelProperty;\nimport lombok.Data;\n\nimport java.io.Serializable;\nimport java.util.List;\n\n/**\n * 首页分类数据VO\n */\n@Data\npublic class NewBeeMallIndexCategoryVO implements Serializable {\n\n    @ApiModelProperty(\"当前一级分类id\")\n    private Long categoryId;\n\n    @ApiModelProperty(\"当前分类级别\")\n    private Byte categoryLevel;\n\n    @ApiModelProperty(\"当前一级分类名称\")\n    private String categoryName;\n\n    @ApiModelProperty(\"二级分类列表\")\n    private List<SecondLevelCategoryVO> secondLevelCategoryVOS;\n}\n"
  },
  {
    "path": "newbee-mall-cloud-goods-service/newbee-mall-cloud-goods-web/src/main/java/ltd/goods/cloud/newbee/controller/vo/NewBeeMallSearchGoodsVO.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.goods.cloud.newbee.controller.vo;\n\nimport io.swagger.annotations.ApiModelProperty;\nimport lombok.Data;\n\nimport java.io.Serializable;\n\n/**\n * 搜索列表页商品VO\n */\n@Data\npublic class NewBeeMallSearchGoodsVO implements Serializable {\n\n    @ApiModelProperty(\"商品id\")\n    private Long goodsId;\n\n    @ApiModelProperty(\"商品名称\")\n    private String goodsName;\n\n    @ApiModelProperty(\"商品简介\")\n    private String goodsIntro;\n\n    @ApiModelProperty(\"商品图片地址\")\n    private String goodsCoverImg;\n\n    @ApiModelProperty(\"商品价格\")\n    private Integer sellingPrice;\n\n}\n"
  },
  {
    "path": "newbee-mall-cloud-goods-service/newbee-mall-cloud-goods-web/src/main/java/ltd/goods/cloud/newbee/controller/vo/SecondLevelCategoryVO.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.goods.cloud.newbee.controller.vo;\n\nimport io.swagger.annotations.ApiModelProperty;\nimport lombok.Data;\n\nimport java.io.Serializable;\nimport java.util.List;\n\n/**\n * 首页分类数据VO(第二级)\n */\n@Data\npublic class SecondLevelCategoryVO implements Serializable {\n\n    @ApiModelProperty(\"当前二级分类id\")\n    private Long categoryId;\n\n    @ApiModelProperty(\"父级分类id\")\n    private Long parentId;\n\n    @ApiModelProperty(\"当前分类级别\")\n    private Byte categoryLevel;\n\n    @ApiModelProperty(\"当前二级分类名称\")\n    private String categoryName;\n\n    @ApiModelProperty(\"三级分类列表\")\n    private List<ThirdLevelCategoryVO> thirdLevelCategoryVOS;\n}\n"
  },
  {
    "path": "newbee-mall-cloud-goods-service/newbee-mall-cloud-goods-web/src/main/java/ltd/goods/cloud/newbee/controller/vo/ThirdLevelCategoryVO.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.goods.cloud.newbee.controller.vo;\n\nimport io.swagger.annotations.ApiModelProperty;\nimport lombok.Data;\n\nimport java.io.Serializable;\n\n/**\n * 首页分类数据VO(第三级)\n */\n@Data\npublic class ThirdLevelCategoryVO implements Serializable {\n\n    @ApiModelProperty(\"当前三级分类id\")\n    private Long categoryId;\n\n    @ApiModelProperty(\"当前分类级别\")\n    private Byte categoryLevel;\n\n    @ApiModelProperty(\"当前三级分类名称\")\n    private String categoryName;\n}\n"
  },
  {
    "path": "newbee-mall-cloud-goods-service/newbee-mall-cloud-goods-web/src/main/java/ltd/goods/cloud/newbee/dao/GoodsCategoryMapper.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.goods.cloud.newbee.dao;\n\nimport ltd.common.cloud.newbee.dto.PageQueryUtil;\nimport ltd.goods.cloud.newbee.entity.GoodsCategory;\nimport org.apache.ibatis.annotations.Param;\n\nimport java.util.List;\n\npublic interface GoodsCategoryMapper {\n    int deleteByPrimaryKey(Long categoryId);\n\n    int insert(GoodsCategory record);\n\n    int insertSelective(GoodsCategory record);\n\n    GoodsCategory selectByPrimaryKey(Long categoryId);\n\n    GoodsCategory selectByLevelAndName(@Param(\"categoryLevel\") Byte categoryLevel, @Param(\"categoryName\") String categoryName);\n\n    int updateByPrimaryKeySelective(GoodsCategory record);\n\n    int updateByPrimaryKey(GoodsCategory record);\n\n    List<GoodsCategory> findGoodsCategoryList(PageQueryUtil pageUtil);\n\n    int getTotalGoodsCategories(PageQueryUtil pageUtil);\n\n    int deleteBatch(Long[] ids);\n\n    List<GoodsCategory> selectByLevelAndParentIdsAndNumber(@Param(\"parentIds\") List<Long> parentIds, @Param(\"categoryLevel\") int categoryLevel, @Param(\"number\") int number);\n}"
  },
  {
    "path": "newbee-mall-cloud-goods-service/newbee-mall-cloud-goods-web/src/main/java/ltd/goods/cloud/newbee/dao/NewBeeMallGoodsMapper.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.goods.cloud.newbee.dao;\n\nimport ltd.common.cloud.newbee.dto.PageQueryUtil;\nimport ltd.goods.cloud.newbee.entity.NewBeeMallGoods;\nimport ltd.goods.cloud.newbee.entity.StockNumDTO;\nimport org.apache.ibatis.annotations.Param;\n\nimport java.util.List;\n\npublic interface NewBeeMallGoodsMapper {\n    int deleteByPrimaryKey(Long goodsId);\n\n    int insert(NewBeeMallGoods record);\n\n    int insertSelective(NewBeeMallGoods record);\n\n    NewBeeMallGoods selectByPrimaryKey(Long goodsId);\n\n    NewBeeMallGoods selectByCategoryIdAndName(@Param(\"goodsName\") String goodsName, @Param(\"goodsCategoryId\") Long goodsCategoryId);\n\n    int updateByPrimaryKeySelective(NewBeeMallGoods record);\n\n    int updateByPrimaryKeyWithBLOBs(NewBeeMallGoods record);\n\n    int updateByPrimaryKey(NewBeeMallGoods record);\n\n    List<NewBeeMallGoods> findNewBeeMallGoodsList(PageQueryUtil pageUtil);\n\n    int getTotalNewBeeMallGoods(PageQueryUtil pageUtil);\n\n    List<NewBeeMallGoods> selectByPrimaryKeys(List<Long> goodsIds);\n\n    List<NewBeeMallGoods> findNewBeeMallGoodsListBySearch(PageQueryUtil pageUtil);\n\n    int getTotalNewBeeMallGoodsBySearch(PageQueryUtil pageUtil);\n\n    int batchInsert(@Param(\"newBeeMallGoodsList\") List<NewBeeMallGoods> newBeeMallGoodsList);\n\n    int updateStockNum(@Param(\"stockNumDTOS\") List<StockNumDTO> stockNumDTOS);\n\n    int batchUpdateSellStatus(@Param(\"orderIds\")Long[] orderIds,@Param(\"sellStatus\") int sellStatus);\n\n}"
  },
  {
    "path": "newbee-mall-cloud-goods-service/newbee-mall-cloud-goods-web/src/main/java/ltd/goods/cloud/newbee/entity/GoodsCategory.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.goods.cloud.newbee.entity;\n\nimport com.fasterxml.jackson.annotation.JsonFormat;\nimport lombok.Data;\n\nimport java.util.Date;\n\n@Data\npublic class GoodsCategory {\n    private Long categoryId;\n\n    private Byte categoryLevel;\n\n    private Long parentId;\n\n    private String categoryName;\n\n    private Integer categoryRank;\n\n    private Byte isDeleted;\n\n    @JsonFormat(pattern = \"yyyy-MM-dd HH:mm:ss\", timezone = \"GMT+8\")\n    private Date createTime;\n\n    private Integer createUser;\n\n    @JsonFormat(pattern = \"yyyy-MM-dd HH:mm:ss\", timezone = \"GMT+8\")\n    private Date updateTime;\n\n    private Integer updateUser;\n}"
  },
  {
    "path": "newbee-mall-cloud-goods-service/newbee-mall-cloud-goods-web/src/main/java/ltd/goods/cloud/newbee/entity/LoginAdminUser.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本系统已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.goods.cloud.newbee.entity;\n\nimport lombok.Data;\n\n@Data\npublic class LoginAdminUser {\n    private Long adminUserId;\n\n    private String loginUserName;\n\n    private String loginPassword;\n\n    private String nickName;\n\n    private Byte locked;\n}"
  },
  {
    "path": "newbee-mall-cloud-goods-service/newbee-mall-cloud-goods-web/src/main/java/ltd/goods/cloud/newbee/entity/NewBeeMallGoods.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.goods.cloud.newbee.entity;\n\nimport com.fasterxml.jackson.annotation.JsonFormat;\nimport lombok.Data;\n\nimport java.util.Date;\n\n@Data\npublic class NewBeeMallGoods {\n    private Long goodsId;\n\n    private String goodsName;\n\n    private String goodsIntro;\n\n    private Long goodsCategoryId;\n\n    private String goodsCoverImg;\n\n    private String goodsCarousel;\n\n    private Integer originalPrice;\n\n    private Integer sellingPrice;\n\n    private Integer stockNum;\n\n    private String tag;\n\n    private Byte goodsSellStatus;\n\n    private Integer createUser;\n\n    @JsonFormat(pattern = \"yyyy-MM-dd HH:mm:ss\", timezone = \"GMT+8\")\n    private Date createTime;\n\n    private Integer updateUser;\n\n    @JsonFormat(pattern = \"yyyy-MM-dd HH:mm:ss\", timezone = \"GMT+8\")\n    private Date updateTime;\n\n    private String goodsDetailContent;\n}"
  },
  {
    "path": "newbee-mall-cloud-goods-service/newbee-mall-cloud-goods-web/src/main/java/ltd/goods/cloud/newbee/entity/StockNumDTO.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.goods.cloud.newbee.entity;\n\nimport lombok.Data;\n\n/**\n * 库存修改所需实体\n */\n\n@Data\npublic class StockNumDTO {\n    private Long goodsId;\n\n    private Integer goodsCount;\n}\n"
  },
  {
    "path": "newbee-mall-cloud-goods-service/newbee-mall-cloud-goods-web/src/main/java/ltd/goods/cloud/newbee/entity/UpdateStockNumDTO.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.goods.cloud.newbee.entity;\n\nimport lombok.Data;\nimport java.util.List;\n\n@Data\npublic class UpdateStockNumDTO {\n\n    private List<StockNumDTO> stockNumDTOS;\n\n    public List<StockNumDTO> getStockNumDTOS() {\n        return stockNumDTOS;\n    }\n\n    public void setStockNumDTOS(List<StockNumDTO> stockNumDTOS) {\n        this.stockNumDTOS = stockNumDTOS;\n    }\n}\n"
  },
  {
    "path": "newbee-mall-cloud-goods-service/newbee-mall-cloud-goods-web/src/main/java/ltd/goods/cloud/newbee/service/NewBeeMallCategoryService.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.goods.cloud.newbee.service;\n\nimport ltd.common.cloud.newbee.dto.PageQueryUtil;\nimport ltd.common.cloud.newbee.dto.PageResult;\nimport ltd.goods.cloud.newbee.controller.vo.NewBeeMallIndexCategoryVO;\nimport ltd.goods.cloud.newbee.entity.GoodsCategory;\n\nimport java.util.List;\n\npublic interface NewBeeMallCategoryService {\n\n    String saveCategory(GoodsCategory goodsCategory);\n\n    String updateGoodsCategory(GoodsCategory goodsCategory);\n\n    GoodsCategory getGoodsCategoryById(Long id);\n\n    Boolean deleteBatch(Long[] ids);\n\n    /**\n     * 后台分页\n     *\n     * @param pageUtil\n     * @return\n     */\n    PageResult getCategorisPage(PageQueryUtil pageUtil);\n\n    /**\n     * 根据parentId和level获取分类列表\n     *\n     * @param parentIds\n     * @param categoryLevel\n     * @return\n     */\n    List<GoodsCategory> selectByLevelAndParentIdsAndNumber(List<Long> parentIds, int categoryLevel);\n\n    /**\n     * 返回分类数据(首页调用)\n     *\n     * @return\n     */\n    List<NewBeeMallIndexCategoryVO> getCategoriesForIndex();\n\n}\n"
  },
  {
    "path": "newbee-mall-cloud-goods-service/newbee-mall-cloud-goods-web/src/main/java/ltd/goods/cloud/newbee/service/NewBeeMallGoodsService.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.goods.cloud.newbee.service;\n\nimport ltd.common.cloud.newbee.dto.PageQueryUtil;\nimport ltd.common.cloud.newbee.dto.PageResult;\nimport ltd.goods.cloud.newbee.entity.NewBeeMallGoods;\nimport ltd.goods.cloud.newbee.entity.StockNumDTO;\nimport org.apache.ibatis.annotations.Param;\n\nimport java.util.List;\n\npublic interface NewBeeMallGoodsService {\n    /**\n     * 后台分页\n     *\n     * @param pageUtil\n     * @return\n     */\n    PageResult getNewBeeMallGoodsPage(PageQueryUtil pageUtil);\n\n    /**\n     * 添加商品\n     *\n     * @param goods\n     * @return\n     */\n    String saveNewBeeMallGoods(NewBeeMallGoods goods);\n\n    /**\n     * 批量新增商品数据\n     *\n     * @param newBeeMallGoodsList\n     * @return\n     */\n    void batchSaveNewBeeMallGoods(List<NewBeeMallGoods> newBeeMallGoodsList);\n\n    /**\n     * 修改商品信息\n     *\n     * @param goods\n     * @return\n     */\n    String updateNewBeeMallGoods(NewBeeMallGoods goods);\n\n    /**\n     * 批量修改销售状态(上架下架)\n     *\n     * @param ids\n     * @return\n     */\n    Boolean batchUpdateSellStatus(Long[] ids, int sellStatus);\n\n    /**\n     * 获取商品详情\n     *\n     * @param id\n     * @return\n     */\n    NewBeeMallGoods getNewBeeMallGoodsById(Long id);\n\n    /**\n     * 获取商品数据\n     *\n     * @param goodsIds\n     * @return\n     */\n    List<NewBeeMallGoods> getNewBeeMallGoodsByIds(List<Long> goodsIds);\n\n    /**\n     * 商品搜索\n     *\n     * @param pageUtil\n     * @return\n     */\n    PageResult searchNewBeeMallGoods(PageQueryUtil pageUtil);\n\n    Boolean updateStockNum(List<StockNumDTO> stockNumDTOS);\n}\n"
  },
  {
    "path": "newbee-mall-cloud-goods-service/newbee-mall-cloud-goods-web/src/main/java/ltd/goods/cloud/newbee/service/impl/NewBeeMallCategoryServiceImpl.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.goods.cloud.newbee.service.impl;\n\nimport ltd.common.cloud.newbee.enums.NewBeeMallCategoryLevelEnum;\nimport ltd.common.cloud.newbee.enums.ServiceResultEnum;\nimport ltd.common.cloud.newbee.dto.PageQueryUtil;\nimport ltd.common.cloud.newbee.dto.PageResult;\nimport ltd.common.cloud.newbee.util.BeanUtil;\nimport ltd.goods.cloud.newbee.controller.vo.NewBeeMallIndexCategoryVO;\nimport ltd.goods.cloud.newbee.controller.vo.SecondLevelCategoryVO;\nimport ltd.goods.cloud.newbee.controller.vo.ThirdLevelCategoryVO;\nimport ltd.goods.cloud.newbee.dao.GoodsCategoryMapper;\nimport ltd.goods.cloud.newbee.entity.GoodsCategory;\nimport ltd.goods.cloud.newbee.service.NewBeeMallCategoryService;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\nimport org.springframework.util.CollectionUtils;\n\nimport java.util.*;\nimport java.util.stream.Collectors;\n\nimport static java.util.stream.Collectors.groupingBy;\n\n@Service\npublic class NewBeeMallCategoryServiceImpl implements NewBeeMallCategoryService {\n\n    @Autowired\n    private GoodsCategoryMapper goodsCategoryMapper;\n\n    @Override\n    public String saveCategory(GoodsCategory goodsCategory) {\n        GoodsCategory temp = goodsCategoryMapper.selectByLevelAndName(goodsCategory.getCategoryLevel(), goodsCategory.getCategoryName());\n        if (temp != null) {\n            return ServiceResultEnum.SAME_CATEGORY_EXIST.getResult();\n        }\n        if (goodsCategoryMapper.insertSelective(goodsCategory) > 0) {\n            return ServiceResultEnum.SUCCESS.getResult();\n        }\n        return ServiceResultEnum.DB_ERROR.getResult();\n    }\n\n    @Override\n    public String updateGoodsCategory(GoodsCategory goodsCategory) {\n        GoodsCategory temp = goodsCategoryMapper.selectByPrimaryKey(goodsCategory.getCategoryId());\n        if (temp == null) {\n            return ServiceResultEnum.DATA_NOT_EXIST.getResult();\n        }\n        GoodsCategory temp2 = goodsCategoryMapper.selectByLevelAndName(goodsCategory.getCategoryLevel(), goodsCategory.getCategoryName());\n        if (temp2 != null && !temp2.getCategoryId().equals(goodsCategory.getCategoryId())) {\n            //同名且不同id 不能继续修改\n            return ServiceResultEnum.SAME_CATEGORY_EXIST.getResult();\n        }\n        goodsCategory.setUpdateTime(new Date());\n        if (goodsCategoryMapper.updateByPrimaryKeySelective(goodsCategory) > 0) {\n            return ServiceResultEnum.SUCCESS.getResult();\n        }\n        return ServiceResultEnum.DB_ERROR.getResult();\n    }\n\n    @Override\n    public GoodsCategory getGoodsCategoryById(Long id) {\n        return goodsCategoryMapper.selectByPrimaryKey(id);\n    }\n\n    @Override\n    public Boolean deleteBatch(Long[] ids) {\n        if (ids.length < 1) {\n            return false;\n        }\n        //删除分类数据\n        return goodsCategoryMapper.deleteBatch(ids) > 0;\n    }\n\n    @Override\n    public PageResult getCategorisPage(PageQueryUtil pageUtil) {\n        List<GoodsCategory> goodsCategories = goodsCategoryMapper.findGoodsCategoryList(pageUtil);\n        int total = goodsCategoryMapper.getTotalGoodsCategories(pageUtil);\n        PageResult pageResult = new PageResult(goodsCategories, total, pageUtil.getLimit(), pageUtil.getPage());\n        return pageResult;\n    }\n\n    @Override\n    public List<GoodsCategory> selectByLevelAndParentIdsAndNumber(List<Long> parentIds, int categoryLevel) {\n        return goodsCategoryMapper.selectByLevelAndParentIdsAndNumber(parentIds, categoryLevel, 0);//0代表查询所有\n    }\n\n\n    @Override\n    public List<NewBeeMallIndexCategoryVO> getCategoriesForIndex() {\n        List<NewBeeMallIndexCategoryVO> newBeeMallIndexCategoryVOS = new ArrayList<>();\n        //获取一级分类的固定数量的数据\n        List<GoodsCategory> firstLevelCategories = goodsCategoryMapper.selectByLevelAndParentIdsAndNumber(Collections.singletonList(0L), NewBeeMallCategoryLevelEnum.LEVEL_ONE.getLevel(), 10);\n        if (!CollectionUtils.isEmpty(firstLevelCategories)) {\n            List<Long> firstLevelCategoryIds = firstLevelCategories.stream().map(GoodsCategory::getCategoryId).collect(Collectors.toList());\n            //获取二级分类的数据\n            List<GoodsCategory> secondLevelCategories = goodsCategoryMapper.selectByLevelAndParentIdsAndNumber(firstLevelCategoryIds, NewBeeMallCategoryLevelEnum.LEVEL_TWO.getLevel(), 0);\n            if (!CollectionUtils.isEmpty(secondLevelCategories)) {\n                List<Long> secondLevelCategoryIds = secondLevelCategories.stream().map(GoodsCategory::getCategoryId).collect(Collectors.toList());\n                //获取三级分类的数据\n                List<GoodsCategory> thirdLevelCategories = goodsCategoryMapper.selectByLevelAndParentIdsAndNumber(secondLevelCategoryIds, NewBeeMallCategoryLevelEnum.LEVEL_THREE.getLevel(), 0);\n                if (!CollectionUtils.isEmpty(thirdLevelCategories)) {\n                    //根据 parentId 将 thirdLevelCategories 分组\n                    Map<Long, List<GoodsCategory>> thirdLevelCategoryMap = thirdLevelCategories.stream().collect(groupingBy(GoodsCategory::getParentId));\n                    List<SecondLevelCategoryVO> secondLevelCategoryVOS = new ArrayList<>();\n                    //处理二级分类\n                    for (GoodsCategory secondLevelCategory : secondLevelCategories) {\n                        SecondLevelCategoryVO secondLevelCategoryVO = new SecondLevelCategoryVO();\n                        BeanUtil.copyProperties(secondLevelCategory, secondLevelCategoryVO);\n                        //如果该二级分类下有数据则放入 secondLevelCategoryVOS 对象中\n                        if (thirdLevelCategoryMap.containsKey(secondLevelCategory.getCategoryId())) {\n                            //根据二级分类的id取出thirdLevelCategoryMap分组中的三级分类list\n                            List<GoodsCategory> tempGoodsCategories = thirdLevelCategoryMap.get(secondLevelCategory.getCategoryId());\n                            secondLevelCategoryVO.setThirdLevelCategoryVOS((BeanUtil.copyList(tempGoodsCategories, ThirdLevelCategoryVO.class)));\n                            secondLevelCategoryVOS.add(secondLevelCategoryVO);\n                        }\n                    }\n                    //处理一级分类\n                    if (!CollectionUtils.isEmpty(secondLevelCategoryVOS)) {\n                        //根据 parentId 将 thirdLevelCategories 分组\n                        Map<Long, List<SecondLevelCategoryVO>> secondLevelCategoryVOMap = secondLevelCategoryVOS.stream().collect(groupingBy(SecondLevelCategoryVO::getParentId));\n                        for (GoodsCategory firstCategory : firstLevelCategories) {\n                            NewBeeMallIndexCategoryVO newBeeMallIndexCategoryVO = new NewBeeMallIndexCategoryVO();\n                            BeanUtil.copyProperties(firstCategory, newBeeMallIndexCategoryVO);\n                            //如果该一级分类下有数据则放入 newBeeMallIndexCategoryVOS 对象中\n                            if (secondLevelCategoryVOMap.containsKey(firstCategory.getCategoryId())) {\n                                //根据一级分类的id取出secondLevelCategoryVOMap分组中的二级级分类list\n                                List<SecondLevelCategoryVO> tempGoodsCategories = secondLevelCategoryVOMap.get(firstCategory.getCategoryId());\n                                newBeeMallIndexCategoryVO.setSecondLevelCategoryVOS(tempGoodsCategories);\n                                newBeeMallIndexCategoryVOS.add(newBeeMallIndexCategoryVO);\n                            }\n                        }\n                    }\n                }\n            }\n            return newBeeMallIndexCategoryVOS;\n        } else {\n            return null;\n        }\n    }\n\n}\n"
  },
  {
    "path": "newbee-mall-cloud-goods-service/newbee-mall-cloud-goods-web/src/main/java/ltd/goods/cloud/newbee/service/impl/NewBeeMallGoodsServiceImpl.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.goods.cloud.newbee.service.impl;\n\nimport ltd.common.cloud.newbee.enums.NewBeeMallCategoryLevelEnum;\nimport ltd.common.cloud.newbee.enums.ServiceResultEnum;\nimport ltd.common.cloud.newbee.dto.PageQueryUtil;\nimport ltd.common.cloud.newbee.dto.PageResult;\nimport ltd.common.cloud.newbee.exception.NewBeeMallException;\nimport ltd.common.cloud.newbee.util.BeanUtil;\nimport ltd.goods.cloud.newbee.controller.vo.NewBeeMallSearchGoodsVO;\nimport ltd.goods.cloud.newbee.dao.GoodsCategoryMapper;\nimport ltd.goods.cloud.newbee.dao.NewBeeMallGoodsMapper;\nimport ltd.goods.cloud.newbee.entity.GoodsCategory;\nimport ltd.goods.cloud.newbee.entity.NewBeeMallGoods;\nimport ltd.goods.cloud.newbee.entity.StockNumDTO;\nimport ltd.goods.cloud.newbee.service.NewBeeMallGoodsService;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\nimport org.springframework.util.CollectionUtils;\n\nimport java.util.ArrayList;\nimport java.util.Date;\nimport java.util.List;\n\n@Service\npublic class NewBeeMallGoodsServiceImpl implements NewBeeMallGoodsService {\n\n    @Autowired\n    private NewBeeMallGoodsMapper goodsMapper;\n    @Autowired\n    private GoodsCategoryMapper goodsCategoryMapper;\n\n    @Override\n    public PageResult getNewBeeMallGoodsPage(PageQueryUtil pageUtil) {\n        List<NewBeeMallGoods> goodsList = goodsMapper.findNewBeeMallGoodsList(pageUtil);\n        int total = goodsMapper.getTotalNewBeeMallGoods(pageUtil);\n        PageResult pageResult = new PageResult(goodsList, total, pageUtil.getLimit(), pageUtil.getPage());\n        return pageResult;\n    }\n\n    @Override\n    public String saveNewBeeMallGoods(NewBeeMallGoods goods) {\n        GoodsCategory goodsCategory = goodsCategoryMapper.selectByPrimaryKey(goods.getGoodsCategoryId());\n        // 分类不存在或者不是三级分类，则该参数字段异常\n        if (goodsCategory == null || goodsCategory.getCategoryLevel().intValue() != NewBeeMallCategoryLevelEnum.LEVEL_THREE.getLevel()) {\n            return ServiceResultEnum.GOODS_CATEGORY_ERROR.getResult();\n        }\n        if (goodsMapper.selectByCategoryIdAndName(goods.getGoodsName(), goods.getGoodsCategoryId()) != null) {\n            return ServiceResultEnum.SAME_GOODS_EXIST.getResult();\n        }\n        if (goodsMapper.insertSelective(goods) > 0) {\n            return ServiceResultEnum.SUCCESS.getResult();\n        }\n        return ServiceResultEnum.DB_ERROR.getResult();\n    }\n\n    @Override\n    public void batchSaveNewBeeMallGoods(List<NewBeeMallGoods> newBeeMallGoodsList) {\n        if (!CollectionUtils.isEmpty(newBeeMallGoodsList)) {\n            goodsMapper.batchInsert(newBeeMallGoodsList);\n        }\n    }\n\n    @Override\n    public String updateNewBeeMallGoods(NewBeeMallGoods goods) {\n        GoodsCategory goodsCategory = goodsCategoryMapper.selectByPrimaryKey(goods.getGoodsCategoryId());\n        // 分类不存在或者不是三级分类，则该参数字段异常\n        if (goodsCategory == null || goodsCategory.getCategoryLevel().intValue() != NewBeeMallCategoryLevelEnum.LEVEL_THREE.getLevel()) {\n            return ServiceResultEnum.GOODS_CATEGORY_ERROR.getResult();\n        }\n        NewBeeMallGoods temp = goodsMapper.selectByPrimaryKey(goods.getGoodsId());\n        if (temp == null) {\n            return ServiceResultEnum.DATA_NOT_EXIST.getResult();\n        }\n        NewBeeMallGoods temp2 = goodsMapper.selectByCategoryIdAndName(goods.getGoodsName(), goods.getGoodsCategoryId());\n        if (temp2 != null && !temp2.getGoodsId().equals(goods.getGoodsId())) {\n            //name和分类id相同且不同id 不能继续修改\n            return ServiceResultEnum.SAME_GOODS_EXIST.getResult();\n        }\n        goods.setUpdateTime(new Date());\n        if (goodsMapper.updateByPrimaryKeySelective(goods) > 0) {\n            return ServiceResultEnum.SUCCESS.getResult();\n        }\n        return ServiceResultEnum.DB_ERROR.getResult();\n    }\n\n    @Override\n    public NewBeeMallGoods getNewBeeMallGoodsById(Long id) {\n        NewBeeMallGoods newBeeMallGoods = goodsMapper.selectByPrimaryKey(id);\n        if (newBeeMallGoods == null) {\n            NewBeeMallException.fail(ServiceResultEnum.GOODS_NOT_EXIST.getResult());\n        }\n        return newBeeMallGoods;\n    }\n\n    @Override\n    public List<NewBeeMallGoods> getNewBeeMallGoodsByIds(List<Long> goodsIds) {\n        return goodsMapper.selectByPrimaryKeys(goodsIds);\n    }\n\n    @Override\n    public Boolean batchUpdateSellStatus(Long[] ids, int sellStatus) {\n        return goodsMapper.batchUpdateSellStatus(ids, sellStatus) > 0;\n    }\n\n\n    @Override\n    public PageResult searchNewBeeMallGoods(PageQueryUtil pageUtil) {\n        List<NewBeeMallGoods> goodsList = goodsMapper.findNewBeeMallGoodsListBySearch(pageUtil);\n        int total = goodsMapper.getTotalNewBeeMallGoodsBySearch(pageUtil);\n        List<NewBeeMallSearchGoodsVO> newBeeMallSearchGoodsVOS = new ArrayList<>();\n        if (!CollectionUtils.isEmpty(goodsList)) {\n            newBeeMallSearchGoodsVOS = BeanUtil.copyList(goodsList, NewBeeMallSearchGoodsVO.class);\n            for (NewBeeMallSearchGoodsVO newBeeMallSearchGoodsVO : newBeeMallSearchGoodsVOS) {\n                String goodsName = newBeeMallSearchGoodsVO.getGoodsName();\n                String goodsIntro = newBeeMallSearchGoodsVO.getGoodsIntro();\n                // 字符串过长导致文字超出的问题\n                if (goodsName.length() > 28) {\n                    goodsName = goodsName.substring(0, 28) + \"...\";\n                    newBeeMallSearchGoodsVO.setGoodsName(goodsName);\n                }\n                if (goodsIntro.length() > 30) {\n                    goodsIntro = goodsIntro.substring(0, 30) + \"...\";\n                    newBeeMallSearchGoodsVO.setGoodsIntro(goodsIntro);\n                }\n            }\n        }\n        PageResult pageResult = new PageResult(newBeeMallSearchGoodsVOS, total, pageUtil.getLimit(), pageUtil.getPage());\n        return pageResult;\n    }\n\n    @Override\n    public Boolean updateStockNum(List<StockNumDTO> stockNumDTOS) {\n        return goodsMapper.updateStockNum(stockNumDTOS) > 0;\n    }\n}\n"
  },
  {
    "path": "newbee-mall-cloud-goods-service/newbee-mall-cloud-goods-web/src/main/resources/application.properties",
    "content": "server.port=29010\n# 服务名称\nspring.application.name=newbee-mall-cloud-goods-service\n# Nacos地址\nspring.cloud.nacos.discovery.server-addr=127.0.0.1:8848\n# Nacos登录用户名(默认为nacos，生产环境一定要修改)\nspring.cloud.nacos.username=nacos\n# Nacos登录密码(默认为nacos，生产环境一定要修改)\nspring.cloud.nacos.password=nacos\n\n# datasource config (MySQL)\nspring.datasource.name=newbee-mall-cloud-goods-datasource\nspring.datasource.driverClassName=com.mysql.cj.jdbc.Driver\nspring.datasource.url=jdbc:mysql://localhost:3306/newbee_mall_cloud_goods_db?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=utf8&autoReconnect=true&useSSL=false&allowMultiQueries=true\nspring.datasource.username=root\nspring.datasource.password=123456\n# 指定数据源类型\nspring.datasource.type=com.alibaba.druid.pool.DruidDataSource\n# Druid 数据源设置\n# 初始化时建立数据库连接的个数\nspring.datasource.initialSize=10\n# 最小连接池数量\nspring.datasource.minIdle=5\n# 最大连接池数量\nspring.datasource.maxActive=30\n# 配置获取连接等待超时的时间\nspring.datasource.maxWait=60000\n# 配置间隔多久才进行一次检测，检测需要关闭的空闲连接，单位是毫秒\nspring.datasource.timeBetweenEvictionRunsMillis=60000\n# 配置一个连接在池中最小生存的时间，单位是毫秒\nspring.datasource.minEvictableIdleTimeMillis=300000\n# 用来检测连接是否有效的SQL语句\nspring.datasource.validationQuery=SELECT 1\nspring.datasource.testWhileIdle=true\nspring.datasource.testOnBorrow=false\nspring.datasource.testOnReturn=false\n\n# mybatis config\nmybatis.mapper-locations=classpath:mapper/*Mapper.xml\n\n# openfeign config\nfeign.client.config.default.connectTimeout=2000\nfeign.client.config.default.readTimeout=5000\nfeign.compression.request.enabled=true\nfeign.compression.request.mime-types=text/xml,application/xml,application/json\nfeign.compression.request.min-request-size=1024\nfeign.compression.response.enabled=true \n\n# sentinel config\nspring.cloud.sentinel.transport.port=8910\nspring.cloud.sentinel.transport.clientIp=127.0.0.1\n# 指定Sentinel控制台地址\nspring.cloud.sentinel.transport.dashboard=127.0.0.1:9113\n\n# 演示需要，开启OpenFeign和当前项目中的DEBUG级别日志\n#logging.level.ltd.user.cloud.newbee.openfeign=debug\n#logging.level.ltd.goods.cloud.newbee=debug\n\n# Sleuth采样率，取值范围为[0.1,1.0]，值越大收集越及时，但性能影响也越大\nspring.sleuth.sampler.probability=1.0\n# 每秒数据采集量，最多n条/秒Trace\nspring.sleuth.sampler.rate=500\n\nspring.zipkin.base-url=http://localhost:9411\n\nseata.enabled=true\nseata.application-id=goods-server\n#事务分组配置\nseata.tx-service-group=newbee_cloud_save_order_group\nservice.vgroupMapping.newbee_cloud_save_order_group=default\n\n#连接Nacos服务中心的配置信息\nseata.registry.type=nacos\nseata.registry.nacos.application=seata-server\nseata.registry.nacos.server-addr=127.0.0.1:8848\nseata.registry.nacos.username=nacos\nseata.registry.nacos.password=nacos\nseata.registry.nacos.group=DEFAULT_GROUP\nseata.registry.nacos.cluster=default"
  },
  {
    "path": "newbee-mall-cloud-goods-service/newbee-mall-cloud-goods-web/src/main/resources/logback.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE configuration>\n<configuration>\n    <include resource=\"org/springframework/boot/logging/logback/defaults.xml\"/>\n    <include resource=\"org/springframework/boot/logging/logback/console-appender.xml\"/>\n    <!--应用名称-->\n    <property name=\"APP_NAME\" value=\"newbee-mall-cloud-goods-service-log\"/>\n    <contextName>${APP_NAME}</contextName>\n\n    <!-- 控制台的日志输出样式 -->\n    <property name=\"CONSOLE_LOG_PATTERN\" value=\"%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}\"/>\n\n    <!-- 控制台输出 -->\n    <appender name=\"CONSOLE\" class=\"ch.qos.logback.core.ConsoleAppender\">\n        <filter class=\"ch.qos.logback.classic.filter.ThresholdFilter\">\n            <level>INFO</level>\n        </filter>\n        <!-- 日志输出编码 -->\n        <encoder>\n            <pattern>${CONSOLE_LOG_PATTERN}</pattern>\n            <charset>utf8</charset>\n        </encoder>\n    </appender>\n\n    <appender name=\"LOGSTASH\" class=\"net.logstash.logback.appender.LogstashTcpSocketAppender\">\n        <!--可以访问的logstash日志收集端口-->\n        <destination>192.168.110.57:4560</destination>\n        <filter class=\"ch.qos.logback.classic.filter.ThresholdFilter\">\n            <level>INFO</level>\n        </filter>\n        <encoder charset=\"UTF-8\" class=\"net.logstash.logback.encoder.LogstashEncoder\"/>\n    </appender>\n\n    <root level=\"INFO\">\n        <appender-ref ref=\"CONSOLE\"/>\n        <appender-ref ref=\"LOGSTASH\"/>\n    </root>\n</configuration>\n\n"
  },
  {
    "path": "newbee-mall-cloud-goods-service/newbee-mall-cloud-goods-web/src/main/resources/mapper/GoodsCategoryMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n严肃声明：\n开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\nCopyright (c) 2022 程序员十三 all rights reserved.\n版权所有，侵权必究！\n-->\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"ltd.goods.cloud.newbee.dao.GoodsCategoryMapper\">\n    <resultMap id=\"BaseResultMap\" type=\"ltd.goods.cloud.newbee.entity.GoodsCategory\">\n        <id column=\"category_id\" jdbcType=\"BIGINT\" property=\"categoryId\"/>\n        <result column=\"category_level\" jdbcType=\"TINYINT\" property=\"categoryLevel\"/>\n        <result column=\"parent_id\" jdbcType=\"BIGINT\" property=\"parentId\"/>\n        <result column=\"category_name\" jdbcType=\"VARCHAR\" property=\"categoryName\"/>\n        <result column=\"category_rank\" jdbcType=\"INTEGER\" property=\"categoryRank\"/>\n        <result column=\"is_deleted\" jdbcType=\"TINYINT\" property=\"isDeleted\"/>\n        <result column=\"create_time\" jdbcType=\"TIMESTAMP\" property=\"createTime\"/>\n        <result column=\"create_user\" jdbcType=\"INTEGER\" property=\"createUser\"/>\n        <result column=\"update_time\" jdbcType=\"TIMESTAMP\" property=\"updateTime\"/>\n        <result column=\"update_user\" jdbcType=\"INTEGER\" property=\"updateUser\"/>\n    </resultMap>\n    <sql id=\"Base_Column_List\">\n    category_id, category_level, parent_id, category_name, category_rank, is_deleted, \n    create_time, create_user, update_time, update_user\n  </sql>\n    <select id=\"findGoodsCategoryList\" parameterType=\"Map\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"Base_Column_List\"/>\n        from tb_newbee_mall_goods_category\n        <where>\n            <if test=\"categoryLevel!=null and categoryLevel!=''\">\n                and category_level = #{categoryLevel}\n            </if>\n            <if test=\"parentId!=null and parentId!=''\">\n                and parent_id = #{parentId}\n            </if>\n            and is_deleted = 0\n        </where>\n        order by category_rank desc\n        <if test=\"start!=null and limit!=null\">\n            limit #{start},#{limit}\n        </if>\n    </select>\n    <select id=\"getTotalGoodsCategories\" parameterType=\"Map\" resultType=\"int\">\n        select count(*) from tb_newbee_mall_goods_category\n        <where>\n            <if test=\"categoryLevel!=null and categoryLevel!=''\">\n                and category_level = #{categoryLevel}\n            </if>\n            <if test=\"parentId!=null and parentId!=''\">\n                and parent_id = #{parentId}\n            </if>\n            and is_deleted = 0\n        </where>\n    </select>\n    <select id=\"selectByPrimaryKey\" parameterType=\"java.lang.Long\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"Base_Column_List\"/>\n        from tb_newbee_mall_goods_category\n        where category_id = #{categoryId,jdbcType=BIGINT} and is_deleted=0\n    </select>\n    <select id=\"selectByLevelAndName\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"Base_Column_List\"/>\n        from tb_newbee_mall_goods_category\n        where category_name = #{categoryName,jdbcType=VARCHAR} and category_level = #{categoryLevel,jdbcType=TINYINT}\n        and is_deleted = 0 limit 1\n    </select>\n    <select id=\"selectByLevelAndParentIdsAndNumber\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"Base_Column_List\"/>\n        from tb_newbee_mall_goods_category\n        where parent_id in\n        <foreach item=\"parentId\" collection=\"parentIds\" open=\"(\" separator=\",\" close=\")\">\n            #{parentId,jdbcType=BIGINT}\n        </foreach>\n        and category_level = #{categoryLevel,jdbcType=TINYINT}\n        and is_deleted = 0\n        order by category_rank desc\n        <if test=\"number>0\">\n            limit #{number}\n        </if>\n    </select>\n    <update id=\"deleteByPrimaryKey\" parameterType=\"java.lang.Long\">\n    update tb_newbee_mall_goods_category set is_deleted=1\n    where category_id = #{categoryId,jdbcType=BIGINT} and is_deleted=0\n  </update>\n    <update id=\"deleteBatch\">\n        update tb_newbee_mall_goods_category\n        set is_deleted=1 where category_id in\n        <foreach item=\"id\" collection=\"array\" open=\"(\" separator=\",\" close=\")\">\n            #{id}\n        </foreach>\n    </update>\n    <insert id=\"insert\" parameterType=\"ltd.goods.cloud.newbee.entity.GoodsCategory\">\n    insert into tb_newbee_mall_goods_category (category_id, category_level, parent_id, \n      category_name, category_rank, is_deleted, \n      create_time, create_user, update_time, \n      update_user)\n    values (#{categoryId,jdbcType=BIGINT}, #{categoryLevel,jdbcType=TINYINT}, #{parentId,jdbcType=BIGINT}, \n      #{categoryName,jdbcType=VARCHAR}, #{categoryRank,jdbcType=INTEGER}, #{isDeleted,jdbcType=TINYINT}, \n      #{createTime,jdbcType=TIMESTAMP}, #{createUser,jdbcType=INTEGER}, #{updateTime,jdbcType=TIMESTAMP}, \n      #{updateUser,jdbcType=INTEGER})\n  </insert>\n    <insert id=\"insertSelective\" parameterType=\"ltd.goods.cloud.newbee.entity.GoodsCategory\">\n        insert into tb_newbee_mall_goods_category\n        <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\n            <if test=\"categoryId != null\">\n                category_id,\n            </if>\n            <if test=\"categoryLevel != null\">\n                category_level,\n            </if>\n            <if test=\"parentId != null\">\n                parent_id,\n            </if>\n            <if test=\"categoryName != null\">\n                category_name,\n            </if>\n            <if test=\"categoryRank != null\">\n                category_rank,\n            </if>\n            <if test=\"isDeleted != null\">\n                is_deleted,\n            </if>\n            <if test=\"createTime != null\">\n                create_time,\n            </if>\n            <if test=\"createUser != null\">\n                create_user,\n            </if>\n            <if test=\"updateTime != null\">\n                update_time,\n            </if>\n            <if test=\"updateUser != null\">\n                update_user,\n            </if>\n        </trim>\n        <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n            <if test=\"categoryId != null\">\n                #{categoryId,jdbcType=BIGINT},\n            </if>\n            <if test=\"categoryLevel != null\">\n                #{categoryLevel,jdbcType=TINYINT},\n            </if>\n            <if test=\"parentId != null\">\n                #{parentId,jdbcType=BIGINT},\n            </if>\n            <if test=\"categoryName != null\">\n                #{categoryName,jdbcType=VARCHAR},\n            </if>\n            <if test=\"categoryRank != null\">\n                #{categoryRank,jdbcType=INTEGER},\n            </if>\n            <if test=\"isDeleted != null\">\n                #{isDeleted,jdbcType=TINYINT},\n            </if>\n            <if test=\"createTime != null\">\n                #{createTime,jdbcType=TIMESTAMP},\n            </if>\n            <if test=\"createUser != null\">\n                #{createUser,jdbcType=INTEGER},\n            </if>\n            <if test=\"updateTime != null\">\n                #{updateTime,jdbcType=TIMESTAMP},\n            </if>\n            <if test=\"updateUser != null\">\n                #{updateUser,jdbcType=INTEGER},\n            </if>\n        </trim>\n    </insert>\n    <update id=\"updateByPrimaryKeySelective\" parameterType=\"ltd.goods.cloud.newbee.entity.GoodsCategory\">\n        update tb_newbee_mall_goods_category\n        <set>\n            <if test=\"categoryLevel != null\">\n                category_level = #{categoryLevel,jdbcType=TINYINT},\n            </if>\n            <if test=\"parentId != null\">\n                parent_id = #{parentId,jdbcType=BIGINT},\n            </if>\n            <if test=\"categoryName != null\">\n                category_name = #{categoryName,jdbcType=VARCHAR},\n            </if>\n            <if test=\"categoryRank != null\">\n                category_rank = #{categoryRank,jdbcType=INTEGER},\n            </if>\n            <if test=\"isDeleted != null\">\n                is_deleted = #{isDeleted,jdbcType=TINYINT},\n            </if>\n            <if test=\"createTime != null\">\n                create_time = #{createTime,jdbcType=TIMESTAMP},\n            </if>\n            <if test=\"createUser != null\">\n                create_user = #{createUser,jdbcType=INTEGER},\n            </if>\n            <if test=\"updateTime != null\">\n                update_time = #{updateTime,jdbcType=TIMESTAMP},\n            </if>\n            <if test=\"updateUser != null\">\n                update_user = #{updateUser,jdbcType=INTEGER},\n            </if>\n        </set>\n        where category_id = #{categoryId,jdbcType=BIGINT}\n    </update>\n    <update id=\"updateByPrimaryKey\" parameterType=\"ltd.goods.cloud.newbee.entity.GoodsCategory\">\n    update tb_newbee_mall_goods_category\n    set category_level = #{categoryLevel,jdbcType=TINYINT},\n      parent_id = #{parentId,jdbcType=BIGINT},\n      category_name = #{categoryName,jdbcType=VARCHAR},\n      category_rank = #{categoryRank,jdbcType=INTEGER},\n      is_deleted = #{isDeleted,jdbcType=TINYINT},\n      create_time = #{createTime,jdbcType=TIMESTAMP},\n      create_user = #{createUser,jdbcType=INTEGER},\n      update_time = #{updateTime,jdbcType=TIMESTAMP},\n      update_user = #{updateUser,jdbcType=INTEGER}\n    where category_id = #{categoryId,jdbcType=BIGINT}\n  </update>\n</mapper>"
  },
  {
    "path": "newbee-mall-cloud-goods-service/newbee-mall-cloud-goods-web/src/main/resources/mapper/NewBeeMallGoodsMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n严肃声明：\n开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\nCopyright (c) 2022 程序员十三 all rights reserved.\n版权所有，侵权必究！\n-->\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"ltd.goods.cloud.newbee.dao.NewBeeMallGoodsMapper\">\n    <resultMap id=\"BaseResultMap\" type=\"ltd.goods.cloud.newbee.entity.NewBeeMallGoods\">\n        <id column=\"goods_id\" jdbcType=\"BIGINT\" property=\"goodsId\"/>\n        <result column=\"goods_name\" jdbcType=\"VARCHAR\" property=\"goodsName\"/>\n        <result column=\"goods_intro\" jdbcType=\"VARCHAR\" property=\"goodsIntro\"/>\n        <result column=\"goods_category_id\" jdbcType=\"BIGINT\" property=\"goodsCategoryId\"/>\n        <result column=\"goods_cover_img\" jdbcType=\"VARCHAR\" property=\"goodsCoverImg\"/>\n        <result column=\"goods_carousel\" jdbcType=\"VARCHAR\" property=\"goodsCarousel\"/>\n        <result column=\"original_price\" jdbcType=\"INTEGER\" property=\"originalPrice\"/>\n        <result column=\"selling_price\" jdbcType=\"INTEGER\" property=\"sellingPrice\"/>\n        <result column=\"stock_num\" jdbcType=\"INTEGER\" property=\"stockNum\"/>\n        <result column=\"tag\" jdbcType=\"VARCHAR\" property=\"tag\"/>\n        <result column=\"goods_sell_status\" jdbcType=\"TINYINT\" property=\"goodsSellStatus\"/>\n        <result column=\"create_user\" jdbcType=\"INTEGER\" property=\"createUser\"/>\n        <result column=\"create_time\" jdbcType=\"TIMESTAMP\" property=\"createTime\"/>\n        <result column=\"update_user\" jdbcType=\"INTEGER\" property=\"updateUser\"/>\n        <result column=\"update_time\" jdbcType=\"TIMESTAMP\" property=\"updateTime\"/>\n    </resultMap>\n    <resultMap extends=\"BaseResultMap\" id=\"ResultMapWithBLOBs\" type=\"ltd.goods.cloud.newbee.entity.NewBeeMallGoods\">\n        <result column=\"goods_detail_content\" jdbcType=\"LONGVARCHAR\" property=\"goodsDetailContent\"/>\n    </resultMap>\n    <sql id=\"Base_Column_List\">\n    goods_id, goods_name, goods_intro,goods_category_id, goods_cover_img, goods_carousel, original_price,\n    selling_price, stock_num, tag, goods_sell_status, create_user, create_time, update_user, \n    update_time\n  </sql>\n    <sql id=\"Blob_Column_List\">\n    goods_detail_content\n  </sql>\n\n    <insert id=\"batchInsert\">\n        INSERT INTO tb_newbee_mall_goods_info(goods_name, goods_intro, goods_category_id,goods_cover_img,\n        goods_carousel,\n        goods_detail_content,original_price,\n        selling_price, stock_num)\n        VALUES\n        <foreach collection=\"newBeeMallGoodsList\" item=\"goods\" separator=\",\">\n            (#{goods.goodsName},#{goods.goodsIntro},#{goods.goodsCategoryId},#{goods.goodsCoverImg},#{goods.goodsCarousel},#{goods.goodsDetailContent},#{goods.originalPrice},#{goods.sellingPrice},#{goods.stockNum})\n        </foreach>\n    </insert>\n    <select id=\"selectByPrimaryKey\" parameterType=\"java.lang.Long\" resultMap=\"ResultMapWithBLOBs\">\n        select\n        <include refid=\"Base_Column_List\"/>\n        ,\n        <include refid=\"Blob_Column_List\"/>\n        from tb_newbee_mall_goods_info\n        where goods_id = #{goodsId,jdbcType=BIGINT}\n    </select>\n    <select id=\"selectByCategoryIdAndName\" resultMap=\"ResultMapWithBLOBs\">\n        select\n        <include refid=\"Base_Column_List\"/>\n        ,\n        <include refid=\"Blob_Column_List\"/>\n        from tb_newbee_mall_goods_info\n        where goods_name = #{goodsName,jdbcType=VARCHAR} and goods_category_id = #{goodsCategoryId,jdbcType=BIGINT}\n    </select>\n    <update id=\"updateStockNum\">\n        <foreach collection=\"stockNumDTOS\" item=\"stockNumDTO\">\n            update tb_newbee_mall_goods_info set stock_num = stock_num-#{stockNumDTO.goodsCount}\n            where goods_id = #{stockNumDTO.goodsId} and stock_num>=#{stockNumDTO.goodsCount} and goods_sell_status = 0;\n        </foreach>\n    </update>\n    <update id=\"batchUpdateSellStatus\">\n        update tb_newbee_mall_goods_info\n        set goods_sell_status=#{sellStatus},update_time=now() where goods_id in\n        <foreach item=\"id\" collection=\"orderIds\" open=\"(\" separator=\",\" close=\")\">\n            #{id}\n        </foreach>\n    </update>\n    <select id=\"findNewBeeMallGoodsList\" parameterType=\"Map\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"Base_Column_List\"/>\n        from tb_newbee_mall_goods_info\n        <where>\n            <if test=\"goodsName!=null and goodsName!=''\">\n                and goods_name like CONCAT('%','#{goodsName}','%')\n            </if>\n            <if test=\"goodsSellStatus!=null and goodsSellStatus!=''\">\n                and goods_sell_status = #{goodsSellStatus}\n            </if>\n            <if test=\"startTime != null and startTime.trim() != ''\">\n                and create_time &gt; #{startTime}\n            </if>\n            <if test=\"endTime != null and endTime.trim() != ''\">\n                and create_time &lt; #{endTime}\n            </if>\n        </where>\n        order by goods_id desc\n        <if test=\"start!=null and limit!=null\">\n            limit #{start},#{limit}\n        </if>\n    </select>\n\n    <select id=\"findNewBeeMallGoodsListBySearch\" parameterType=\"Map\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"Base_Column_List\"/>\n        from tb_newbee_mall_goods_info\n        <where>\n            <if test=\"keyword!=null and keyword!=''\">\n                and (goods_name like CONCAT('%',#{keyword},'%') or goods_intro like CONCAT('%',#{keyword},'%'))\n            </if>\n            <if test=\"goodsCategoryId!=null and goodsCategoryId!=''\">\n                and goods_category_id = #{goodsCategoryId}\n            </if>\n            <if test=\"goodsSellStatus!=null\">\n                and goods_sell_status = #{goodsSellStatus}\n            </if>\n        </where>\n        <if test=\"orderBy!=null and orderBy!=''\">\n            <choose>\n                <when test=\"orderBy == 'new'\">\n                    <!-- 按照发布时间倒序排列 -->\n                    order by goods_id desc\n                </when>\n                <when test=\"orderBy == 'price'\">\n                    <!-- 按照售价从小到大排列 -->\n                    order by selling_price asc\n                </when>\n                <otherwise>\n                    <!-- 默认按照库存数量从大到小排列 -->\n                    order by stock_num desc\n                </otherwise>\n            </choose>\n        </if>\n        <if test=\"start!=null and limit!=null\">\n            limit #{start},#{limit}\n        </if>\n    </select>\n\n    <select id=\"getTotalNewBeeMallGoodsBySearch\" parameterType=\"Map\" resultType=\"int\">\n        select count(*) from tb_newbee_mall_goods_info\n        <where>\n            <if test=\"keyword!=null and keyword!=''\">\n                and (goods_name like CONCAT('%',#{keyword},'%') or goods_intro like CONCAT('%',#{keyword},'%'))\n            </if>\n            <if test=\"goodsCategoryId!=null and goodsCategoryId!=''\">\n                and goods_category_id = #{goodsCategoryId}\n            </if>\n            <if test=\"goodsSellStatus!=null\">\n                and goods_sell_status = #{goodsSellStatus}\n            </if>\n        </where>\n    </select>\n\n    <select id=\"selectByPrimaryKeys\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"Base_Column_List\"/>\n        from tb_newbee_mall_goods_info\n        where goods_id in\n        <foreach item=\"id\" collection=\"list\" open=\"(\" separator=\",\" close=\")\">\n            #{id}\n        </foreach>\n        order by field(goods_id,\n        <foreach item=\"id\" collection=\"list\" separator=\",\">\n            #{id}\n        </foreach>\n        );\n    </select>\n    <select id=\"getTotalNewBeeMallGoods\" parameterType=\"Map\" resultType=\"int\">\n        select count(*) from tb_newbee_mall_goods_info\n        <where>\n            <if test=\"goodsName!=null and goodsName!=''\">\n                and goods_name like CONCAT('%','#{goodsName}','%')\n            </if>\n            <if test=\"goodsSellStatus!=null and goodsSellStatus!=''\">\n                and goods_sell_status = #{goodsSellStatus}\n            </if>\n            <if test=\"startTime != null and startTime.trim() != ''\">\n                and create_time &gt; #{startTime}\n            </if>\n            <if test=\"endTime != null and endTime.trim() != ''\">\n                and create_time &lt; #{endTime}\n            </if>\n        </where>\n    </select>\n    <delete id=\"deleteByPrimaryKey\" parameterType=\"java.lang.Long\">\n    delete from tb_newbee_mall_goods_info\n    where goods_id = #{goodsId,jdbcType=BIGINT}\n  </delete>\n    <insert id=\"insert\" parameterType=\"ltd.goods.cloud.newbee.entity.NewBeeMallGoods\">\n    insert into tb_newbee_mall_goods_info (goods_id, goods_name, goods_intro, \n      goods_cover_img, goods_carousel, original_price, \n      selling_price, stock_num, tag, \n      goods_sell_status, create_user, create_time, \n      update_user, update_time, goods_detail_content\n      )\n    values (#{goodsId,jdbcType=BIGINT}, #{goodsName,jdbcType=VARCHAR}, #{goodsIntro,jdbcType=VARCHAR}, \n      #{goodsCoverImg,jdbcType=VARCHAR}, #{goodsCarousel,jdbcType=VARCHAR}, #{originalPrice,jdbcType=INTEGER}, \n      #{sellingPrice,jdbcType=INTEGER}, #{stockNum,jdbcType=INTEGER}, #{tag,jdbcType=VARCHAR}, \n      #{goodsSellStatus,jdbcType=TINYINT}, #{createUser,jdbcType=INTEGER}, #{createTime,jdbcType=TIMESTAMP}, \n      #{updateUser,jdbcType=INTEGER}, #{updateTime,jdbcType=TIMESTAMP}, #{goodsDetailContent,jdbcType=LONGVARCHAR}\n      )\n  </insert>\n    <insert id=\"insertSelective\" parameterType=\"ltd.goods.cloud.newbee.entity.NewBeeMallGoods\">\n        insert into tb_newbee_mall_goods_info\n        <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\n            <if test=\"goodsId != null\">\n                goods_id,\n            </if>\n            <if test=\"goodsName != null\">\n                goods_name,\n            </if>\n            <if test=\"goodsIntro != null\">\n                goods_intro,\n            </if>\n            <if test=\"goodsCategoryId != null\">\n                goods_category_id,\n            </if>\n            <if test=\"goodsCoverImg != null\">\n                goods_cover_img,\n            </if>\n            <if test=\"goodsCarousel != null\">\n                goods_carousel,\n            </if>\n            <if test=\"originalPrice != null\">\n                original_price,\n            </if>\n            <if test=\"sellingPrice != null\">\n                selling_price,\n            </if>\n            <if test=\"stockNum != null\">\n                stock_num,\n            </if>\n            <if test=\"tag != null\">\n                tag,\n            </if>\n            <if test=\"goodsSellStatus != null\">\n                goods_sell_status,\n            </if>\n            <if test=\"createUser != null\">\n                create_user,\n            </if>\n            <if test=\"createTime != null\">\n                create_time,\n            </if>\n            <if test=\"updateUser != null\">\n                update_user,\n            </if>\n            <if test=\"updateTime != null\">\n                update_time,\n            </if>\n            <if test=\"goodsDetailContent != null\">\n                goods_detail_content,\n            </if>\n        </trim>\n        <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n            <if test=\"goodsId != null\">\n                #{goodsId,jdbcType=BIGINT},\n            </if>\n            <if test=\"goodsName != null\">\n                #{goodsName,jdbcType=VARCHAR},\n            </if>\n            <if test=\"goodsIntro != null\">\n                #{goodsIntro,jdbcType=VARCHAR},\n            </if>\n            <if test=\"goodsIntro != null\">\n                #{goodsCategoryId,jdbcType=BIGINT},\n            </if>\n            <if test=\"goodsCoverImg != null\">\n                #{goodsCoverImg,jdbcType=VARCHAR},\n            </if>\n            <if test=\"goodsCarousel != null\">\n                #{goodsCarousel,jdbcType=VARCHAR},\n            </if>\n            <if test=\"originalPrice != null\">\n                #{originalPrice,jdbcType=INTEGER},\n            </if>\n            <if test=\"sellingPrice != null\">\n                #{sellingPrice,jdbcType=INTEGER},\n            </if>\n            <if test=\"stockNum != null\">\n                #{stockNum,jdbcType=INTEGER},\n            </if>\n            <if test=\"tag != null\">\n                #{tag,jdbcType=VARCHAR},\n            </if>\n            <if test=\"goodsSellStatus != null\">\n                #{goodsSellStatus,jdbcType=TINYINT},\n            </if>\n            <if test=\"createUser != null\">\n                #{createUser,jdbcType=INTEGER},\n            </if>\n            <if test=\"createTime != null\">\n                #{createTime,jdbcType=TIMESTAMP},\n            </if>\n            <if test=\"updateUser != null\">\n                #{updateUser,jdbcType=INTEGER},\n            </if>\n            <if test=\"updateTime != null\">\n                #{updateTime,jdbcType=TIMESTAMP},\n            </if>\n            <if test=\"goodsDetailContent != null\">\n                #{goodsDetailContent,jdbcType=LONGVARCHAR},\n            </if>\n        </trim>\n    </insert>\n    <update id=\"updateByPrimaryKeySelective\" parameterType=\"ltd.goods.cloud.newbee.entity.NewBeeMallGoods\">\n        update tb_newbee_mall_goods_info\n        <set>\n            <if test=\"goodsName != null\">\n                goods_name = #{goodsName,jdbcType=VARCHAR},\n            </if>\n            <if test=\"goodsIntro != null\">\n                goods_intro = #{goodsIntro,jdbcType=VARCHAR},\n            </if>\n            <if test=\"goodsCategoryId != null\">\n                goods_category_id = #{goodsCategoryId,jdbcType=BIGINT},\n            </if>\n            <if test=\"goodsCoverImg != null\">\n                goods_cover_img = #{goodsCoverImg,jdbcType=VARCHAR},\n            </if>\n            <if test=\"goodsCarousel != null\">\n                goods_carousel = #{goodsCarousel,jdbcType=VARCHAR},\n            </if>\n            <if test=\"originalPrice != null\">\n                original_price = #{originalPrice,jdbcType=INTEGER},\n            </if>\n            <if test=\"sellingPrice != null\">\n                selling_price = #{sellingPrice,jdbcType=INTEGER},\n            </if>\n            <if test=\"stockNum != null\">\n                stock_num = #{stockNum,jdbcType=INTEGER},\n            </if>\n            <if test=\"tag != null\">\n                tag = #{tag,jdbcType=VARCHAR},\n            </if>\n            <if test=\"goodsSellStatus != null\">\n                goods_sell_status = #{goodsSellStatus,jdbcType=TINYINT},\n            </if>\n            <if test=\"createUser != null\">\n                create_user = #{createUser,jdbcType=INTEGER},\n            </if>\n            <if test=\"createTime != null\">\n                create_time = #{createTime,jdbcType=TIMESTAMP},\n            </if>\n            <if test=\"updateUser != null\">\n                update_user = #{updateUser,jdbcType=INTEGER},\n            </if>\n            <if test=\"updateTime != null\">\n                update_time = #{updateTime,jdbcType=TIMESTAMP},\n            </if>\n            <if test=\"goodsDetailContent != null\">\n                goods_detail_content = #{goodsDetailContent,jdbcType=LONGVARCHAR},\n            </if>\n        </set>\n        where goods_id = #{goodsId,jdbcType=BIGINT}\n    </update>\n    <update id=\"updateByPrimaryKeyWithBLOBs\" parameterType=\"ltd.goods.cloud.newbee.entity.NewBeeMallGoods\">\n    update tb_newbee_mall_goods_info\n    set goods_name = #{goodsName,jdbcType=VARCHAR},\n      goods_intro = #{goodsIntro,jdbcType=VARCHAR},\n      goods_cover_img = #{goodsCoverImg,jdbcType=VARCHAR},\n      goods_carousel = #{goodsCarousel,jdbcType=VARCHAR},\n      original_price = #{originalPrice,jdbcType=INTEGER},\n      selling_price = #{sellingPrice,jdbcType=INTEGER},\n      stock_num = #{stockNum,jdbcType=INTEGER},\n      tag = #{tag,jdbcType=VARCHAR},\n      goods_sell_status = #{goodsSellStatus,jdbcType=TINYINT},\n      create_user = #{createUser,jdbcType=INTEGER},\n      create_time = #{createTime,jdbcType=TIMESTAMP},\n      update_user = #{updateUser,jdbcType=INTEGER},\n      update_time = #{updateTime,jdbcType=TIMESTAMP},\n      goods_detail_content = #{goodsDetailContent,jdbcType=LONGVARCHAR}\n    where goods_id = #{goodsId,jdbcType=BIGINT}\n  </update>\n    <update id=\"updateByPrimaryKey\" parameterType=\"ltd.goods.cloud.newbee.entity.NewBeeMallGoods\">\n    update tb_newbee_mall_goods_info\n    set goods_name = #{goodsName,jdbcType=VARCHAR},\n      goods_intro = #{goodsIntro,jdbcType=VARCHAR},\n      goods_cover_img = #{goodsCoverImg,jdbcType=VARCHAR},\n      goods_carousel = #{goodsCarousel,jdbcType=VARCHAR},\n      original_price = #{originalPrice,jdbcType=INTEGER},\n      selling_price = #{sellingPrice,jdbcType=INTEGER},\n      stock_num = #{stockNum,jdbcType=INTEGER},\n      tag = #{tag,jdbcType=VARCHAR},\n      goods_sell_status = #{goodsSellStatus,jdbcType=TINYINT},\n      create_user = #{createUser,jdbcType=INTEGER},\n      create_time = #{createTime,jdbcType=TIMESTAMP},\n      update_user = #{updateUser,jdbcType=INTEGER},\n      update_time = #{updateTime,jdbcType=TIMESTAMP}\n    where goods_id = #{goodsId,jdbcType=BIGINT}\n  </update>\n</mapper>"
  },
  {
    "path": "newbee-mall-cloud-goods-service/pom.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--  @author 程序员十三\n      @qq交流群 791509631\n      @email 2449207463@qq.com\n      @link https://github.com/newbee-ltd -->\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd\">\n    <modelVersion>4.0.0</modelVersion>\n    <groupId>ltd.newbee.cloud</groupId>\n    <artifactId>newbee-mall-cloud-goods-service</artifactId>\n    <version>0.0.1-SNAPSHOT</version>\n    <packaging>pom</packaging>\n    <name>newbee-mall-cloud-goods-service</name>\n    <description>商品模块</description>\n\n    <parent>\n        <groupId>ltd.newbee.cloud</groupId>\n        <artifactId>newbee-mall-cloud</artifactId>\n        <version>0.0.1-SNAPSHOT</version>\n    </parent>\n\n    <properties>\n        <java.version>1.8</java.version>\n    </properties>\n\n    <modules>\n        <module>newbee-mall-cloud-goods-web</module>\n        <module>newbee-mall-cloud-goods-api</module>\n    </modules>\n\n    <dependencies>\n\n    </dependencies>\n    <!--  @author 程序员十三\n      @qq交流群 791509631\n      @email 2449207463@qq.com\n      @link https://github.com/newbee-ltd -->\n</project>\n"
  },
  {
    "path": "newbee-mall-cloud-order-service/newbee-mall-cloud-order-api/pom.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--  @author 程序员十三\n      @qq交流群 791509631\n      @email 2449207463@qq.com\n      @link https://github.com/newbee-ltd -->\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd\">\n    <modelVersion>4.0.0</modelVersion>\n    <groupId>ltd.order.newbee.cloud</groupId>\n    <artifactId>newbee-mall-cloud-order-api</artifactId>\n    <packaging>jar</packaging>\n    <version>0.0.1-SNAPSHOT</version>\n    <name>newbee-mall-cloud-order-api</name>\n    <description>订单服务openfeign</description>\n\n    <parent>\n        <groupId>ltd.newbee.cloud</groupId>\n        <artifactId>newbee-mall-cloud-order-service</artifactId>\n        <version>0.0.1-SNAPSHOT</version>\n    </parent>\n\n    <properties>\n        <java.version>1.8</java.version>\n    </properties>\n\n    <dependencies>\n\n        <dependency>\n            <groupId>org.springframework.cloud</groupId>\n            <artifactId>spring-cloud-starter-openfeign</artifactId>\n        </dependency>\n\n        <dependency>\n            <groupId>ltd.newbee.cloud</groupId>\n            <artifactId>newbee-mall-cloud-common</artifactId>\n            <version>0.0.1-SNAPSHOT</version>\n        </dependency>\n\n    </dependencies>\n    <!--  @author 程序员十三\n      @qq交流群 791509631\n      @email 2449207463@qq.com\n      @link https://github.com/newbee-ltd -->\n</project>\n"
  },
  {
    "path": "newbee-mall-cloud-order-service/newbee-mall-cloud-order-web/pom.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--  @author 程序员十三\n      @qq交流群 791509631\n      @email 2449207463@qq.com\n      @link https://github.com/newbee-ltd -->\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd\">\n    <modelVersion>4.0.0</modelVersion>\n    <groupId>ltd.order.newbee.cloud</groupId>\n    <artifactId>newbee-mall-cloud-order-web</artifactId>\n    <version>0.0.1-SNAPSHOT</version>\n    <name>newbee-mall-cloud-order-web</name>\n    <description>订单服务</description>\n\n    <parent>\n        <groupId>ltd.newbee.cloud</groupId>\n        <artifactId>newbee-mall-cloud-order-service</artifactId>\n        <version>0.0.1-SNAPSHOT</version>\n    </parent>\n\n    <properties>\n        <java.version>1.8</java.version>\n    </properties>\n\n    <dependencies>\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter-web</artifactId>\n        </dependency>\n\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter-test</artifactId>\n            <scope>test</scope>\n        </dependency>\n\n        <dependency>\n            <groupId>com.alibaba.cloud</groupId>\n            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>\n        </dependency>\n\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter-validation</artifactId>\n        </dependency>\n\n        <dependency>\n            <groupId>org.mybatis.spring.boot</groupId>\n            <artifactId>mybatis-spring-boot-starter</artifactId>\n        </dependency>\n\n        <!-- Seata 依赖包 -->\n        <dependency>\n            <groupId>com.alibaba.cloud</groupId>\n            <artifactId>spring-cloud-starter-alibaba-seata</artifactId>\n        </dependency>\n\n        <dependency>\n            <groupId>org.projectlombok</groupId>\n            <artifactId>lombok</artifactId>\n            <version>${lombok.version}</version>\n            <scope>provided</scope>\n        </dependency>\n\n        <dependency>\n            <groupId>io.springfox</groupId>\n            <artifactId>springfox-boot-starter</artifactId>\n        </dependency>\n\n        <dependency>\n            <groupId>mysql</groupId>\n            <artifactId>mysql-connector-java</artifactId>\n            <scope>runtime</scope>\n        </dependency>\n\n        <dependency>\n            <groupId>com.alibaba.cloud</groupId>\n            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>\n        </dependency>\n\n        <!-- Sleuth依赖项 -->\n        <dependency>\n            <groupId>org.springframework.cloud</groupId>\n            <artifactId>spring-cloud-starter-sleuth</artifactId>\n        </dependency>\n        <!--Zipkin 依赖-->\n        <dependency>\n            <groupId>org.springframework.cloud</groupId>\n            <artifactId>spring-cloud-sleuth-zipkin</artifactId>\n        </dependency>\n\n        <dependency>\n            <groupId>ltd.newbee.cloud</groupId>\n            <artifactId>newbee-mall-cloud-common</artifactId>\n            <version>0.0.1-SNAPSHOT</version>\n        </dependency>\n\n        <dependency>\n            <groupId>org.springframework.cloud</groupId>\n            <artifactId>spring-cloud-starter-openfeign</artifactId>\n        </dependency>\n\n        <dependency>\n            <groupId>org.springframework.cloud</groupId>\n            <artifactId>spring-cloud-starter-loadbalancer</artifactId>\n        </dependency>\n\n        <dependency>\n            <groupId>net.logstash.logback</groupId>\n            <artifactId>logstash-logback-encoder</artifactId>\n            <version>${logstash-logback-encoder.version}</version>\n        </dependency>\n\n        <dependency>\n            <groupId>ltd.user.newbee.cloud</groupId>\n            <artifactId>newbee-mall-cloud-user-api</artifactId>\n            <version>0.0.1-SNAPSHOT</version>\n        </dependency>\n\n        <dependency>\n            <groupId>ltd.goods.newbee.cloud</groupId>\n            <artifactId>newbee-mall-cloud-goods-api</artifactId>\n            <version>0.0.1-SNAPSHOT</version>\n        </dependency>\n\n        <dependency>\n            <groupId>ltd.shopcart.newbee.cloud</groupId>\n            <artifactId>newbee-mall-cloud-shop-cart-api</artifactId>\n            <version>0.0.1-SNAPSHOT</version>\n        </dependency>\n\n    </dependencies>\n    <!--  @author 程序员十三\n      @qq交流群 791509631\n      @email 2449207463@qq.com\n      @link https://github.com/newbee-ltd -->\n</project>\n"
  },
  {
    "path": "newbee-mall-cloud-order-service/newbee-mall-cloud-order-web/src/main/java/ltd/order/cloud/newbee/NewBeeMallCloudOrderServiceApplication.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本系统已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.order.cloud.newbee;\n\nimport ltd.goods.cloud.newbee.openfeign.NewBeeCloudGoodsServiceFeign;\nimport ltd.shopcart.cloud.newbee.openfeign.NewBeeCloudShopCartServiceFeign;\nimport ltd.user.cloud.newbee.openfeign.NewBeeCloudUserServiceFeign;\nimport org.mybatis.spring.annotation.MapperScan;\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigure.SpringBootApplication;\nimport org.springframework.cloud.client.discovery.EnableDiscoveryClient;\nimport org.springframework.cloud.openfeign.EnableFeignClients;\n\n/**\n * @author 程序员十三\n * @qq交流群 791509631\n * @email 2449207463@qq.com\n * @link https://github.com/newbee-ltd\n */\n@SpringBootApplication\n@EnableDiscoveryClient\n@MapperScan(\"ltd.order.cloud.newbee.dao\")\n@EnableFeignClients(basePackageClasses ={NewBeeCloudUserServiceFeign.class, NewBeeCloudGoodsServiceFeign.class, NewBeeCloudShopCartServiceFeign.class})\npublic class NewBeeMallCloudOrderServiceApplication {\n\n    public static void main(String[] args) {\n        System.setProperty(\"nacos.logging.default.config.enabled\",\"false\");\n        SpringApplication.run(NewBeeMallCloudOrderServiceApplication.class, args);\n    }\n\n}\n"
  },
  {
    "path": "newbee-mall-cloud-order-service/newbee-mall-cloud-order-web/src/main/java/ltd/order/cloud/newbee/config/OpenFeignConfiguration.java",
    "content": "package ltd.order.cloud.newbee.config;\n\nimport feign.Logger;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\n\n@Configuration\npublic class OpenFeignConfiguration {\n    @Bean\n    public Logger.Level openFeignLogLevel() {\n        // 设置OpenFeign日志级别\n        return Logger.Level.FULL;\n    }\n}\n"
  },
  {
    "path": "newbee-mall-cloud-order-service/newbee-mall-cloud-order-web/src/main/java/ltd/order/cloud/newbee/config/OrderServiceExceptionHandler.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.order.cloud.newbee.config;\n\nimport ltd.common.cloud.newbee.enums.ServiceResultEnum;\nimport ltd.common.cloud.newbee.dto.Result;\nimport ltd.common.cloud.newbee.exception.NewBeeMallException;\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport org.springframework.validation.BindException;\nimport org.springframework.validation.BindingResult;\nimport org.springframework.web.bind.MethodArgumentNotValidException;\nimport org.springframework.web.bind.annotation.ExceptionHandler;\nimport org.springframework.web.bind.annotation.RestControllerAdvice;\n\nimport javax.servlet.http.HttpServletRequest;\nimport java.util.Objects;\n\n/**\n * 全局异常处理\n */\n@RestControllerAdvice\npublic class OrderServiceExceptionHandler {\n\n    private static final Logger log = LoggerFactory.getLogger(OrderServiceExceptionHandler.class);\n\n    @ExceptionHandler(BindException.class)\n    public Object bindException(BindException e) {\n        log.error(\"OrderServiceExceptionHandler:\",e);\n        Result result = new Result();\n        result.setResultCode(510);\n        BindingResult bindingResult = e.getBindingResult();\n        result.setMessage(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());\n        return result;\n    }\n\n    @ExceptionHandler(MethodArgumentNotValidException.class)\n    public Object bindException(MethodArgumentNotValidException e) {\n        log.error(\"OrderServiceExceptionHandler:\",e);\n        Result result = new Result();\n        result.setResultCode(510);\n        BindingResult bindingResult = e.getBindingResult();\n        result.setMessage(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());\n        return result;\n    }\n\n    @ExceptionHandler(Exception.class)\n    public Object handleException(Exception e, HttpServletRequest req) {\n        log.error(\"OrderServiceExceptionHandler:\",e);\n        Result result = new Result();\n        result.setResultCode(500);\n        //区分是否为自定义异常\n        if (e instanceof NewBeeMallException) {\n            result.setMessage(e.getMessage());\n            if (e.getMessage().equals(ServiceResultEnum.ADMIN_NOT_LOGIN_ERROR.getResult()) || e.getMessage().equals(ServiceResultEnum.ADMIN_TOKEN_EXPIRE_ERROR.getResult())) {\n                result.setResultCode(419);\n            }\n            if (e.getMessage().equals(ServiceResultEnum.NOT_LOGIN_ERROR.getResult()) || e.getMessage().equals(ServiceResultEnum.TOKEN_EXPIRE_ERROR.getResult())) {\n                result.setResultCode(416);\n            }\n        } else {\n            e.printStackTrace();\n            result.setMessage(\"未知异常，请查看控制台日志并检查配置文件。\");\n        }\n        return result;\n\n    }\n}\n"
  },
  {
    "path": "newbee-mall-cloud-order-service/newbee-mall-cloud-order-web/src/main/java/ltd/order/cloud/newbee/config/OrderServiceSwagger3Config.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.order.cloud.newbee.config;\n\nimport ltd.common.cloud.newbee.pojo.MallUserToken;\nimport ltd.order.cloud.newbee.entity.LoginAdminUser;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\nimport springfox.documentation.builders.ApiInfoBuilder;\nimport springfox.documentation.builders.PathSelectors;\nimport springfox.documentation.builders.RequestHandlerSelectors;\nimport springfox.documentation.builders.RequestParameterBuilder;\nimport springfox.documentation.oas.annotations.EnableOpenApi;\nimport springfox.documentation.schema.ScalarType;\nimport springfox.documentation.service.ApiInfo;\nimport springfox.documentation.service.ParameterType;\nimport springfox.documentation.service.RequestParameter;\nimport springfox.documentation.spi.DocumentationType;\nimport springfox.documentation.spring.web.plugins.Docket;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\n@Configuration\n@EnableOpenApi\npublic class OrderServiceSwagger3Config {\n\n    @Bean\n    public Docket api() {\n        return new Docket(DocumentationType.OAS_30)\n                .apiInfo(apiInfo())\n                .ignoredParameterTypes(LoginAdminUser.class, MallUserToken.class)\n                .select()\n                .apis(RequestHandlerSelectors.basePackage(\"ltd.order.cloud.newbee.controller\"))\n                .paths(PathSelectors.any())\n                .build()\n                .globalRequestParameters(getGlobalRequestParameters());\n    }\n\n    //生成全局通用参数\n    private List<RequestParameter> getGlobalRequestParameters() {\n        List<RequestParameter> parameters = new ArrayList<>();\n        parameters.add(new RequestParameterBuilder()\n                .name(\"token\")\n                .description(\"登录认证token\")\n                .required(false) // 非必传\n                .in(ParameterType.HEADER) //请求头中的参数，其它类型可以点进ParameterType类中查看\n                .query(q -> q.model(m -> m.scalarModel(ScalarType.STRING)))\n                .build());\n        return parameters;\n    }\n\n    private ApiInfo apiInfo() {\n        return new ApiInfoBuilder()\n                .title(\"newbee-mall-cloud-order-service接口文档\")\n                .description(\"swagger接口文档\")\n                .version(\"2.0\")\n                .build();\n    }\n}"
  },
  {
    "path": "newbee-mall-cloud-order-service/newbee-mall-cloud-order-web/src/main/java/ltd/order/cloud/newbee/config/OrderServiceWebMvcConfigurer.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.order.cloud.newbee.config;\n\nimport com.alibaba.cloud.sentinel.SentinelProperties;\nimport com.alibaba.csp.sentinel.adapter.spring.webmvc.SentinelWebInterceptor;\nimport ltd.order.cloud.newbee.config.handler.TokenToAdminUserMethodArgumentResolver;\nimport ltd.order.cloud.newbee.config.handler.TokenToMallUserMethodArgumentResolver;\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.context.annotation.Configuration;\nimport org.springframework.context.annotation.Lazy;\nimport org.springframework.web.method.support.HandlerMethodArgumentResolver;\nimport org.springframework.web.servlet.HandlerInterceptor;\nimport org.springframework.web.servlet.config.annotation.InterceptorRegistry;\nimport org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;\nimport org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;\n\nimport java.util.List;\nimport java.util.Optional;\n\n@Configuration\npublic class OrderServiceWebMvcConfigurer extends WebMvcConfigurationSupport {\n\n    private static final Logger log = LoggerFactory.getLogger(OrderServiceWebMvcConfigurer.class);\n\n    @Autowired\n    private SentinelProperties sentinelProperties;\n    @Autowired\n    private Optional<SentinelWebInterceptor> sentinelWebInterceptorOptional;\n\n    @Autowired\n    @Lazy\n    private TokenToAdminUserMethodArgumentResolver tokenToAdminUserMethodArgumentResolver;\n\n    @Autowired\n    @Lazy\n    private TokenToMallUserMethodArgumentResolver tokenToMallUserMethodArgumentResolver;\n\n    /**\n     * @param argumentResolvers\n     * @tip @TokenToAdminUser 注解处理方法\n     */\n    public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {\n        argumentResolvers.add(tokenToAdminUserMethodArgumentResolver);\n        argumentResolvers.add(tokenToMallUserMethodArgumentResolver);\n    }\n\n    @Override\n    public void addResourceHandlers(ResourceHandlerRegistry registry) {\n        registry.\n                addResourceHandler(\"/swagger-ui/**\")\n                .addResourceLocations(\"classpath:/META-INF/resources/webjars/springfox-swagger-ui/\")\n                .resourceChain(false);\n    }\n\n    public void addInterceptors(InterceptorRegistry registry) {\n        if (this.sentinelWebInterceptorOptional.isPresent()) {\n            SentinelProperties.Filter filterConfig = this.sentinelProperties.getFilter();\n            registry.addInterceptor((HandlerInterceptor) this.sentinelWebInterceptorOptional.get()).order(filterConfig.getOrder()).addPathPatterns(filterConfig.getUrlPatterns());\n            log.info(\"[Sentinel Starter] register SentinelWebInterceptor with urlPatterns: {}.\", filterConfig.getUrlPatterns());\n        }\n    }\n}\n"
  },
  {
    "path": "newbee-mall-cloud-order-service/newbee-mall-cloud-order-web/src/main/java/ltd/order/cloud/newbee/config/SeataProxyConfiguration.java",
    "content": "package ltd.order.cloud.newbee.config;\n\nimport com.alibaba.druid.pool.DruidDataSource;\nimport io.seata.rm.datasource.DataSourceProxy;\nimport org.springframework.boot.context.properties.ConfigurationProperties;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\nimport org.springframework.context.annotation.Primary;\n\nimport javax.annotation.PostConstruct;\nimport javax.sql.DataSource;\n\n@Configuration\npublic class SeataProxyConfiguration {\n\n    //创建Druid数据源\n    @Bean\n    @ConfigurationProperties(prefix = \"spring.datasource\")\n    public DruidDataSource druidDataSource() {\n        return new DruidDataSource();\n    }\n\n    //创建DataSource数据源代理\n    @Bean(\"dataSource\")\n    @Primary\n    public DataSource dataSourceDelegation(DruidDataSource druidDataSource) {\n        return new DataSourceProxy(druidDataSource);\n    }\n\n    /*\n     * 解决druid 日志报错：discard long time none received connection:xxx\n     * */\n    @PostConstruct\n    public void setProperties(){\n        System.setProperty(\"druid.mysql.usePingMethod\",\"false\");\n    }\n\n}\n\n"
  },
  {
    "path": "newbee-mall-cloud-order-service/newbee-mall-cloud-order-web/src/main/java/ltd/order/cloud/newbee/config/annotation/TokenToAdminUser.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.order.cloud.newbee.config.annotation;\n\nimport java.lang.annotation.*;\n\n@Target({ElementType.PARAMETER})\n@Retention(RetentionPolicy.RUNTIME)\n@Documented\npublic @interface TokenToAdminUser {\n\n    /**\n     * 当前用户在request中的名字\n     *\n     * @return\n     */\n    String value() default \"adminUser\";\n\n}\n"
  },
  {
    "path": "newbee-mall-cloud-order-service/newbee-mall-cloud-order-web/src/main/java/ltd/order/cloud/newbee/config/annotation/TokenToMallUser.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.order.cloud.newbee.config.annotation;\n\nimport java.lang.annotation.*;\n\n@Target({ElementType.PARAMETER})\n@Retention(RetentionPolicy.RUNTIME)\n@Documented\npublic @interface TokenToMallUser {\n\n    /**\n     * 当前用户在request中的名字\n     *\n     * @return\n     */\n    String value() default \"user\";\n\n}\n"
  },
  {
    "path": "newbee-mall-cloud-order-service/newbee-mall-cloud-order-web/src/main/java/ltd/order/cloud/newbee/config/handler/TokenToAdminUserMethodArgumentResolver.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.order.cloud.newbee.config.handler;\n\nimport ltd.common.cloud.newbee.enums.ServiceResultEnum;\nimport ltd.common.cloud.newbee.dto.Result;\nimport ltd.common.cloud.newbee.exception.NewBeeMallException;\n\nimport ltd.order.cloud.newbee.config.annotation.TokenToAdminUser;\nimport ltd.order.cloud.newbee.entity.LoginAdminUser;\nimport ltd.user.cloud.newbee.openfeign.NewBeeCloudUserServiceFeign;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.core.MethodParameter;\nimport org.springframework.stereotype.Component;\nimport org.springframework.web.bind.support.WebDataBinderFactory;\nimport org.springframework.web.context.request.NativeWebRequest;\nimport org.springframework.web.method.support.HandlerMethodArgumentResolver;\nimport org.springframework.web.method.support.ModelAndViewContainer;\n\nimport java.util.LinkedHashMap;\n\n@Component\npublic class TokenToAdminUserMethodArgumentResolver implements HandlerMethodArgumentResolver {\n\n    @Autowired\n    private NewBeeCloudUserServiceFeign newBeeCloudUserService;\n\n    public TokenToAdminUserMethodArgumentResolver() {\n    }\n\n    public boolean supportsParameter(MethodParameter parameter) {\n        if (parameter.hasParameterAnnotation(TokenToAdminUser.class)) {\n            return true;\n        }\n        return false;\n    }\n\n    public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) {\n        if (parameter.getParameterAnnotation(TokenToAdminUser.class) instanceof TokenToAdminUser) {\n            String token = webRequest.getHeader(\"token\");\n            if (null != token && !\"\".equals(token) && token.length() == 32) {\n                // 通过用户中心获取用户信息\n                Result result = newBeeCloudUserService.getAdminUserByToken(token);\n\n                if (result == null || result.getResultCode() != 200 || result.getData() == null) {\n                    NewBeeMallException.fail(ServiceResultEnum.ADMIN_NOT_LOGIN_ERROR.getResult());\n                }\n\n                LinkedHashMap resultData = (LinkedHashMap) result.getData();\n\n                // 将返回的字段封装到LoginAdminUser对象中\n                LoginAdminUser loginAdminUser = new LoginAdminUser();\n                loginAdminUser.setAdminUserId(Long.valueOf(resultData.get(\"adminUserId\").toString()));\n                loginAdminUser.setLoginUserName((String) resultData.get(\"loginUserName\"));\n                loginAdminUser.setNickName((String) resultData.get(\"nickName\"));\n                loginAdminUser.setLocked(Byte.valueOf(resultData.get(\"locked\").toString()));\n                return loginAdminUser;\n            } else {\n                NewBeeMallException.fail(ServiceResultEnum.ADMIN_NOT_LOGIN_ERROR.getResult());\n            }\n        }\n        return null;\n    }\n\n}\n"
  },
  {
    "path": "newbee-mall-cloud-order-service/newbee-mall-cloud-order-web/src/main/java/ltd/order/cloud/newbee/config/handler/TokenToMallUserMethodArgumentResolver.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.order.cloud.newbee.config.handler;\n\nimport ltd.common.cloud.newbee.enums.ServiceResultEnum;\nimport ltd.common.cloud.newbee.dto.Result;\nimport ltd.common.cloud.newbee.exception.NewBeeMallException;\nimport ltd.common.cloud.newbee.pojo.MallUserToken;\nimport ltd.order.cloud.newbee.config.annotation.TokenToMallUser;\nimport ltd.user.cloud.newbee.dto.MallUserDTO;\nimport ltd.user.cloud.newbee.openfeign.NewBeeCloudUserServiceFeign;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.core.MethodParameter;\nimport org.springframework.stereotype.Component;\nimport org.springframework.web.bind.support.WebDataBinderFactory;\nimport org.springframework.web.context.request.NativeWebRequest;\nimport org.springframework.web.method.support.HandlerMethodArgumentResolver;\nimport org.springframework.web.method.support.ModelAndViewContainer;\n\n@Component\npublic class TokenToMallUserMethodArgumentResolver implements HandlerMethodArgumentResolver {\n\n    @Autowired\n    private NewBeeCloudUserServiceFeign newBeeCloudUserService;\n\n    public TokenToMallUserMethodArgumentResolver() {\n    }\n\n    public boolean supportsParameter(MethodParameter parameter) {\n        if (parameter.hasParameterAnnotation(TokenToMallUser.class)) {\n            return true;\n        }\n        return false;\n    }\n\n    public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) {\n        if (parameter.getParameterAnnotation(TokenToMallUser.class) instanceof TokenToMallUser) {\n            String token = webRequest.getHeader(\"token\");\n            if (null != token && !\"\".equals(token) && token.length() == 32) {\n                Result<MallUserDTO> result = newBeeCloudUserService.getMallUserByToken(token);\n                if (result == null || result.getResultCode() != 200 || result.getData() == null) {\n                    NewBeeMallException.fail(ServiceResultEnum.TOKEN_EXPIRE_ERROR.getResult());\n                }\n                MallUserToken mallUserToken = new MallUserToken();\n                mallUserToken.setToken(token);\n                mallUserToken.setUserId(result.getData().getUserId());\n                return mallUserToken;\n            } else {\n                NewBeeMallException.fail(ServiceResultEnum.NOT_LOGIN_ERROR.getResult());\n            }\n        }\n        return null;\n    }\n\n}\n"
  },
  {
    "path": "newbee-mall-cloud-order-service/newbee-mall-cloud-order-web/src/main/java/ltd/order/cloud/newbee/controller/NewBeeAdminOrderController.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本系统已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.order.cloud.newbee.controller;\n\nimport io.swagger.annotations.Api;\nimport io.swagger.annotations.ApiOperation;\nimport io.swagger.annotations.ApiParam;\nimport ltd.common.cloud.newbee.dto.PageQueryUtil;\nimport ltd.common.cloud.newbee.dto.Result;\nimport ltd.common.cloud.newbee.dto.ResultGenerator;\nimport ltd.common.cloud.newbee.enums.ServiceResultEnum;\nimport ltd.order.cloud.newbee.config.annotation.TokenToAdminUser;\nimport ltd.order.cloud.newbee.controller.param.BatchIdParam;\nimport ltd.order.cloud.newbee.controller.vo.NewBeeMallOrderDetailVO;\nimport ltd.order.cloud.newbee.entity.LoginAdminUser;\nimport ltd.order.cloud.newbee.service.NewBeeMallOrderService;\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport org.springframework.util.StringUtils;\nimport org.springframework.web.bind.annotation.*;\n\nimport javax.annotation.Resource;\nimport java.util.HashMap;\nimport java.util.Map;\n\n/**\n * @author 13\n * @qq交流群 796794009\n * @email 2449207463@qq.com\n * @link https://github.com/newbee-ltd\n */\n@RestController\n@Api(value = \"v1\", tags = \"后台管理系统订单模块接口\")\n@RequestMapping(\"/orders/admin\")\npublic class NewBeeAdminOrderController {\n\n    private static final Logger logger = LoggerFactory.getLogger(NewBeeAdminOrderController.class);\n\n    @Resource\n    private NewBeeMallOrderService newBeeMallOrderService;\n\n    /**\n     * 列表\n     */\n    @RequestMapping(value = \"/list\", method = RequestMethod.GET)\n    @ApiOperation(value = \"订单列表\", notes = \"可根据订单号和订单状态筛选\")\n    public Result list(@RequestParam(required = false) @ApiParam(value = \"页码\") Integer pageNumber,\n                       @RequestParam(required = false) @ApiParam(value = \"每页条数\") Integer pageSize,\n                       @RequestParam(required = false) @ApiParam(value = \"订单号\") String orderNo,\n                       @RequestParam(required = false) @ApiParam(value = \"订单状态\") Integer orderStatus, @TokenToAdminUser LoginAdminUser adminUser) {\n        logger.info(\"adminUser:{}\", adminUser.toString());\n        if (pageNumber == null || pageNumber < 1 || pageSize == null || pageSize < 10) {\n            return ResultGenerator.genFailResult(\"分页参数异常！\");\n        }\n        Map params = new HashMap(8);\n        params.put(\"page\", pageNumber);\n        params.put(\"limit\", pageSize);\n        if (StringUtils.hasText(orderNo)) {\n            params.put(\"orderNo\", orderNo);\n        }\n        if (orderStatus != null) {\n            params.put(\"orderStatus\", orderStatus);\n        }\n        PageQueryUtil pageUtil = new PageQueryUtil(params);\n        return ResultGenerator.genSuccessResult(newBeeMallOrderService.getNewBeeMallOrdersPage(pageUtil));\n    }\n\n    @GetMapping(\"/detail/{orderId}\")\n    @ApiOperation(value = \"订单详情接口\", notes = \"传参为订单号\")\n    public Result<NewBeeMallOrderDetailVO> orderDetailPage(@ApiParam(value = \"订单号\") @PathVariable(\"orderId\") Long orderId, @TokenToAdminUser LoginAdminUser adminUser) {\n        logger.info(\"adminUser:{}\", adminUser.toString());\n        return ResultGenerator.genSuccessResult(newBeeMallOrderService.getOrderDetailByOrderId(orderId));\n    }\n\n    /**\n     * 配货\n     */\n    @RequestMapping(value = \"/checkDone\", method = RequestMethod.PUT)\n    @ApiOperation(value = \"修改订单状态为配货成功\", notes = \"批量修改\")\n    public Result checkDone(@RequestBody BatchIdParam batchIdParam, @TokenToAdminUser LoginAdminUser adminUser) {\n        logger.info(\"adminUser:{}\", adminUser.toString());\n        if (batchIdParam==null||batchIdParam.getIds().length < 1) {\n            return ResultGenerator.genFailResult(\"参数异常！\");\n        }\n        String result = newBeeMallOrderService.checkDone(batchIdParam.getIds());\n        if (ServiceResultEnum.SUCCESS.getResult().equals(result)) {\n            return ResultGenerator.genSuccessResult();\n        } else {\n            return ResultGenerator.genFailResult(result);\n        }\n    }\n\n    /**\n     * 出库\n     */\n    @RequestMapping(value = \"/checkOut\", method = RequestMethod.PUT)\n    @ApiOperation(value = \"修改订单状态为已出库\", notes = \"批量修改\")\n    public Result checkOut(@RequestBody BatchIdParam batchIdParam, @TokenToAdminUser LoginAdminUser adminUser) {\n        logger.info(\"adminUser:{}\", adminUser.toString());\n        if (batchIdParam==null||batchIdParam.getIds().length < 1) {\n            return ResultGenerator.genFailResult(\"参数异常！\");\n        }\n        String result = newBeeMallOrderService.checkOut(batchIdParam.getIds());\n        if (ServiceResultEnum.SUCCESS.getResult().equals(result)) {\n            return ResultGenerator.genSuccessResult();\n        } else {\n            return ResultGenerator.genFailResult(result);\n        }\n    }\n\n    /**\n     * 关闭订单\n     */\n    @RequestMapping(value = \"/close\", method = RequestMethod.PUT)\n    @ApiOperation(value = \"修改订单状态为商家关闭\", notes = \"批量修改\")\n    public Result closeOrder(@RequestBody BatchIdParam batchIdParam, @TokenToAdminUser LoginAdminUser adminUser) {\n        logger.info(\"adminUser:{}\", adminUser.toString());\n        if (batchIdParam==null||batchIdParam.getIds().length < 1) {\n            return ResultGenerator.genFailResult(\"参数异常！\");\n        }\n        String result = newBeeMallOrderService.closeOrder(batchIdParam.getIds());\n        if (ServiceResultEnum.SUCCESS.getResult().equals(result)) {\n            return ResultGenerator.genSuccessResult();\n        } else {\n            return ResultGenerator.genFailResult(result);\n        }\n    }\n}"
  },
  {
    "path": "newbee-mall-cloud-order-service/newbee-mall-cloud-order-web/src/main/java/ltd/order/cloud/newbee/controller/NewBeeMallOrderController.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.order.cloud.newbee.controller;\n\nimport io.swagger.annotations.Api;\nimport io.swagger.annotations.ApiOperation;\nimport io.swagger.annotations.ApiParam;\nimport ltd.common.cloud.newbee.enums.ServiceResultEnum;\nimport ltd.common.cloud.newbee.dto.PageQueryUtil;\nimport ltd.common.cloud.newbee.dto.PageResult;\nimport ltd.common.cloud.newbee.dto.Result;\nimport ltd.common.cloud.newbee.dto.ResultGenerator;\nimport ltd.common.cloud.newbee.exception.NewBeeMallException;\nimport ltd.common.cloud.newbee.pojo.MallUserToken;\nimport ltd.order.cloud.newbee.config.annotation.TokenToMallUser;\nimport ltd.order.cloud.newbee.controller.param.SaveOrderParam;\nimport ltd.order.cloud.newbee.controller.vo.NewBeeMallOrderDetailVO;\nimport ltd.order.cloud.newbee.controller.vo.NewBeeMallOrderListVO;\nimport ltd.order.cloud.newbee.entity.MallUserAddress;\nimport ltd.order.cloud.newbee.service.NewBeeMallOrderService;\nimport ltd.order.cloud.newbee.service.NewBeeMallUserAddressService;\nimport org.springframework.web.bind.annotation.*;\n\nimport javax.annotation.Resource;\nimport java.util.Arrays;\nimport java.util.HashMap;\nimport java.util.List;\nimport java.util.Map;\n\n@RestController\n@Api(value = \"v1\", tags = \"新蜂商城订单操作相关接口\")\n@RequestMapping(\"/orders/mall\")\npublic class NewBeeMallOrderController {\n\n    @Resource\n    private NewBeeMallOrderService newBeeMallOrderService;\n    @Resource\n    private NewBeeMallUserAddressService newBeeMallUserAddressService;\n\n    @PostMapping(\"/saveOrder\")\n    @ApiOperation(value = \"生成订单接口\", notes = \"传参为地址id和待结算的购物项id数组\")\n    public Result<String> saveOrder(@ApiParam(value = \"订单参数\") @RequestBody SaveOrderParam saveOrderParam, @TokenToMallUser MallUserToken loginMallUserToken) {\n        if (saveOrderParam == null || saveOrderParam.getCartItemIds() == null || saveOrderParam.getAddressId() == null) {\n            NewBeeMallException.fail(ServiceResultEnum.PARAM_ERROR.getResult());\n        }\n        if (saveOrderParam.getCartItemIds().length < 1) {\n            NewBeeMallException.fail(ServiceResultEnum.PARAM_ERROR.getResult());\n        }\n        MallUserAddress address = newBeeMallUserAddressService.getMallUserAddressById(saveOrderParam.getAddressId());\n        if (!loginMallUserToken.getUserId().equals(address.getUserId())) {\n            return ResultGenerator.genFailResult(ServiceResultEnum.REQUEST_FORBIDEN_ERROR.getResult());\n        }\n        //保存订单并返回订单号\n        String saveOrderResult = newBeeMallOrderService.saveOrder(loginMallUserToken.getUserId(), address, Arrays.asList(saveOrderParam.getCartItemIds()));\n        Result result = ResultGenerator.genSuccessResult();\n        result.setData(saveOrderResult);\n        return result;\n    }\n\n    @GetMapping(\"/order/{orderNo}\")\n    @ApiOperation(value = \"订单详情接口\", notes = \"传参为订单号\")\n    public Result<NewBeeMallOrderDetailVO> orderDetailPage(@ApiParam(value = \"订单号\") @PathVariable(\"orderNo\") String orderNo, @TokenToMallUser MallUserToken loginMallUserToken) {\n        return ResultGenerator.genSuccessResult(newBeeMallOrderService.getOrderDetailByOrderNo(orderNo, loginMallUserToken.getUserId()));\n    }\n\n    @GetMapping(\"/order\")\n    @ApiOperation(value = \"订单列表接口\", notes = \"传参为页码\")\n    public Result<PageResult<List<NewBeeMallOrderListVO>>> orderList(@ApiParam(value = \"页码\") @RequestParam(required = false) Integer pageNumber,\n                                                                     @ApiParam(value = \"订单状态:0.待支付 1.待确认 2.待发货 3:已发货 4.交易成功\") @RequestParam(required = false) Integer status,\n                                                                     @TokenToMallUser MallUserToken loginMallUserToken) {\n        Map params = new HashMap(8);\n        if (pageNumber == null || pageNumber < 1) {\n            pageNumber = 1;\n        }\n        params.put(\"userId\", loginMallUserToken.getUserId());\n        params.put(\"orderStatus\", status);\n        params.put(\"page\", pageNumber);\n        params.put(\"limit\", 5);\n        //封装分页请求参数\n        PageQueryUtil pageUtil = new PageQueryUtil(params);\n        return ResultGenerator.genSuccessResult(newBeeMallOrderService.getMyOrders(pageUtil));\n    }\n\n    @PutMapping(\"/order/{orderNo}/cancel\")\n    @ApiOperation(value = \"订单取消接口\", notes = \"传参为订单号\")\n    public Result cancelOrder(@ApiParam(value = \"订单号\") @PathVariable(\"orderNo\") String orderNo, @TokenToMallUser MallUserToken loginMallUserToken) {\n        String cancelOrderResult = newBeeMallOrderService.cancelOrder(orderNo, loginMallUserToken.getUserId());\n        if (ServiceResultEnum.SUCCESS.getResult().equals(cancelOrderResult)) {\n            return ResultGenerator.genSuccessResult();\n        } else {\n            return ResultGenerator.genFailResult(cancelOrderResult);\n        }\n    }\n\n    @PutMapping(\"/order/{orderNo}/finish\")\n    @ApiOperation(value = \"确认收货接口\", notes = \"传参为订单号\")\n    public Result finishOrder(@ApiParam(value = \"订单号\") @PathVariable(\"orderNo\") String orderNo, @TokenToMallUser MallUserToken loginMallUserToken) {\n        String finishOrderResult = newBeeMallOrderService.finishOrder(orderNo, loginMallUserToken.getUserId());\n        if (ServiceResultEnum.SUCCESS.getResult().equals(finishOrderResult)) {\n            return ResultGenerator.genSuccessResult();\n        } else {\n            return ResultGenerator.genFailResult(finishOrderResult);\n        }\n    }\n\n    @GetMapping(\"/paySuccess\")\n    @ApiOperation(value = \"模拟支付成功回调的接口\", notes = \"传参为订单号和支付方式\")\n    public Result paySuccess(@ApiParam(value = \"订单号\") @RequestParam(\"orderNo\") String orderNo, @ApiParam(value = \"支付方式\") @RequestParam(\"payType\") int payType) {\n        String payResult = newBeeMallOrderService.paySuccess(orderNo, payType);\n        if (ServiceResultEnum.SUCCESS.getResult().equals(payResult)) {\n            return ResultGenerator.genSuccessResult();\n        } else {\n            return ResultGenerator.genFailResult(payResult);\n        }\n    }\n\n}\n"
  },
  {
    "path": "newbee-mall-cloud-order-service/newbee-mall-cloud-order-web/src/main/java/ltd/order/cloud/newbee/controller/NewBeeMallUserAddressController.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.order.cloud.newbee.controller;\n\nimport io.swagger.annotations.Api;\nimport io.swagger.annotations.ApiOperation;\nimport ltd.common.cloud.newbee.enums.ServiceResultEnum;\nimport ltd.common.cloud.newbee.dto.Result;\nimport ltd.common.cloud.newbee.dto.ResultGenerator;\nimport ltd.common.cloud.newbee.pojo.MallUserToken;\nimport ltd.common.cloud.newbee.util.BeanUtil;\nimport ltd.order.cloud.newbee.config.annotation.TokenToMallUser;\nimport ltd.order.cloud.newbee.controller.param.SaveMallUserAddressParam;\nimport ltd.order.cloud.newbee.controller.param.UpdateMallUserAddressParam;\nimport ltd.order.cloud.newbee.controller.vo.NewBeeMallUserAddressVO;\nimport ltd.order.cloud.newbee.entity.MallUserAddress;\nimport ltd.order.cloud.newbee.service.NewBeeMallUserAddressService;\nimport org.springframework.web.bind.annotation.*;\n\nimport javax.annotation.Resource;\nimport java.util.List;\n\n@RestController\n@Api(value = \"v1\", tags = \"新蜂商城个人地址相关接口\")\n@RequestMapping(\"/mall\")\npublic class NewBeeMallUserAddressController {\n\n    @Resource\n    private NewBeeMallUserAddressService mallUserAddressService;\n\n    @GetMapping(\"/address\")\n    @ApiOperation(value = \"我的收货地址列表\", notes = \"\")\n    public Result<List<NewBeeMallUserAddressVO>> addressList(@TokenToMallUser MallUserToken loginMallUserToken) {\n        return ResultGenerator.genSuccessResult(mallUserAddressService.getMyAddresses(loginMallUserToken.getUserId()));\n    }\n\n    @PostMapping(\"/address\")\n    @ApiOperation(value = \"添加地址\", notes = \"\")\n    public Result<Boolean> saveUserAddress(@RequestBody SaveMallUserAddressParam saveMallUserAddressParam,\n                                           @TokenToMallUser MallUserToken loginMallUserToken) {\n        MallUserAddress userAddress = new MallUserAddress();\n        BeanUtil.copyProperties(saveMallUserAddressParam, userAddress);\n        userAddress.setUserId(loginMallUserToken.getUserId());\n        Boolean saveResult = mallUserAddressService.saveUserAddress(userAddress);\n        //添加成功\n        if (saveResult) {\n            return ResultGenerator.genSuccessResult();\n        }\n        //添加失败\n        return ResultGenerator.genFailResult(\"添加失败\");\n    }\n\n    @PutMapping(\"/address\")\n    @ApiOperation(value = \"修改地址\", notes = \"\")\n    public Result<Boolean> updateMallUserAddress(@RequestBody UpdateMallUserAddressParam updateMallUserAddressParam,\n                                                 @TokenToMallUser MallUserToken loginMallUserToken) {\n        MallUserAddress mallUserAddressById = mallUserAddressService.getMallUserAddressById(updateMallUserAddressParam.getAddressId());\n        if (!loginMallUserToken.getUserId().equals(mallUserAddressById.getUserId())) {\n            return ResultGenerator.genFailResult(ServiceResultEnum.REQUEST_FORBIDEN_ERROR.getResult());\n        }\n        MallUserAddress userAddress = new MallUserAddress();\n        BeanUtil.copyProperties(updateMallUserAddressParam, userAddress);\n        userAddress.setUserId(loginMallUserToken.getUserId());\n        Boolean updateResult = mallUserAddressService.updateMallUserAddress(userAddress);\n        //修改成功\n        if (updateResult) {\n            return ResultGenerator.genSuccessResult();\n        }\n        //修改失败\n        return ResultGenerator.genFailResult(\"修改失败\");\n    }\n\n    @GetMapping(\"/address/{addressId}\")\n    @ApiOperation(value = \"获取收货地址详情\", notes = \"传参为地址id\")\n    public Result<NewBeeMallUserAddressVO> getMallUserAddress(@PathVariable(\"addressId\") Long addressId,\n                                                              @TokenToMallUser MallUserToken loginMallUserToken) {\n        MallUserAddress mallUserAddressById = mallUserAddressService.getMallUserAddressById(addressId);\n        NewBeeMallUserAddressVO newBeeMallUserAddressVO = new NewBeeMallUserAddressVO();\n        BeanUtil.copyProperties(mallUserAddressById, newBeeMallUserAddressVO);\n        if (!loginMallUserToken.getUserId().equals(mallUserAddressById.getUserId())) {\n            return ResultGenerator.genFailResult(ServiceResultEnum.REQUEST_FORBIDEN_ERROR.getResult());\n        }\n        return ResultGenerator.genSuccessResult(newBeeMallUserAddressVO);\n    }\n\n    @GetMapping(\"/address/default\")\n    @ApiOperation(value = \"获取默认收货地址\", notes = \"无传参\")\n    public Result getDefaultMallUserAddress(@TokenToMallUser MallUserToken loginMallUserToken) {\n        MallUserAddress mallUserAddressById = mallUserAddressService.getMyDefaultAddressByUserId(loginMallUserToken.getUserId());\n        return ResultGenerator.genSuccessResult(mallUserAddressById);\n    }\n\n    @DeleteMapping(\"/address/{addressId}\")\n    @ApiOperation(value = \"删除收货地址\", notes = \"传参为地址id\")\n    public Result deleteAddress(@PathVariable(\"addressId\") Long addressId,\n                                @TokenToMallUser MallUserToken loginMallUserToken) {\n        MallUserAddress mallUserAddressById = mallUserAddressService.getMallUserAddressById(addressId);\n        if (!loginMallUserToken.getUserId().equals(mallUserAddressById.getUserId())) {\n            return ResultGenerator.genFailResult(ServiceResultEnum.REQUEST_FORBIDEN_ERROR.getResult());\n        }\n        Boolean deleteResult = mallUserAddressService.deleteById(addressId);\n        //删除成功\n        if (deleteResult) {\n            return ResultGenerator.genSuccessResult();\n        }\n        //删除失败\n        return ResultGenerator.genFailResult(ServiceResultEnum.OPERATE_ERROR.getResult());\n    }\n}\n"
  },
  {
    "path": "newbee-mall-cloud-order-service/newbee-mall-cloud-order-web/src/main/java/ltd/order/cloud/newbee/controller/param/BatchIdParam.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.order.cloud.newbee.controller.param;\n\nimport lombok.Data;\n\nimport java.io.Serializable;\n\n@Data\npublic class BatchIdParam implements Serializable {\n    //id数组\n    Long[] ids;\n}\n"
  },
  {
    "path": "newbee-mall-cloud-order-service/newbee-mall-cloud-order-web/src/main/java/ltd/order/cloud/newbee/controller/param/SaveMallUserAddressParam.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.order.cloud.newbee.controller.param;\n\nimport io.swagger.annotations.ApiModelProperty;\nimport lombok.Data;\n\n/**\n * 添加收货地址param\n */\n@Data\npublic class SaveMallUserAddressParam {\n\n    @ApiModelProperty(\"收件人名称\")\n    private String userName;\n\n    @ApiModelProperty(\"收件人联系方式\")\n    private String userPhone;\n\n    @ApiModelProperty(\"是否默认地址 0-不是 1-是\")\n    private Byte defaultFlag;\n\n    @ApiModelProperty(\"省\")\n    private String provinceName;\n\n    @ApiModelProperty(\"市\")\n    private String cityName;\n\n    @ApiModelProperty(\"区/县\")\n    private String regionName;\n\n    @ApiModelProperty(\"详细地址\")\n    private String detailAddress;\n}\n"
  },
  {
    "path": "newbee-mall-cloud-order-service/newbee-mall-cloud-order-web/src/main/java/ltd/order/cloud/newbee/controller/param/SaveOrderParam.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.order.cloud.newbee.controller.param;\n\nimport io.swagger.annotations.ApiModelProperty;\nimport lombok.Data;\n\nimport java.io.Serializable;\n\n/**\n * 保存订单param\n */\n@Data\npublic class SaveOrderParam implements Serializable {\n\n    @ApiModelProperty(\"订单项id数组\")\n    private Long[] cartItemIds;\n\n    @ApiModelProperty(\"地址id\")\n    private Long addressId;\n}\n"
  },
  {
    "path": "newbee-mall-cloud-order-service/newbee-mall-cloud-order-web/src/main/java/ltd/order/cloud/newbee/controller/param/UpdateMallUserAddressParam.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.order.cloud.newbee.controller.param;\n\nimport io.swagger.annotations.ApiModelProperty;\nimport lombok.Data;\n\n/**\n * 修改收货地址param\n */\n@Data\npublic class UpdateMallUserAddressParam {\n\n    @ApiModelProperty(\"地址id\")\n    private Long addressId;\n\n    @ApiModelProperty(\"用户id\")\n    private Long userId;\n\n    @ApiModelProperty(\"收件人名称\")\n    private String userName;\n\n    @ApiModelProperty(\"收件人联系方式\")\n    private String userPhone;\n\n    @ApiModelProperty(\"是否默认地址 0-不是 1-是\")\n    private Byte defaultFlag;\n\n    @ApiModelProperty(\"省\")\n    private String provinceName;\n\n    @ApiModelProperty(\"市\")\n    private String cityName;\n\n    @ApiModelProperty(\"区/县\")\n    private String regionName;\n\n    @ApiModelProperty(\"详细地址\")\n    private String detailAddress;\n}\n"
  },
  {
    "path": "newbee-mall-cloud-order-service/newbee-mall-cloud-order-web/src/main/java/ltd/order/cloud/newbee/controller/vo/NewBeeMallOrderDetailVO.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.order.cloud.newbee.controller.vo;\n\nimport com.fasterxml.jackson.annotation.JsonFormat;\nimport io.swagger.annotations.ApiModelProperty;\nimport lombok.Data;\n\nimport java.io.Serializable;\nimport java.util.Date;\nimport java.util.List;\n\n/**\n * 订单详情页页面VO\n */\n@Data\npublic class NewBeeMallOrderDetailVO implements Serializable {\n\n    @ApiModelProperty(\"订单号\")\n    private String orderNo;\n\n    @ApiModelProperty(\"订单价格\")\n    private Integer totalPrice;\n\n    @ApiModelProperty(\"订单支付状态码\")\n    private Byte payStatus;\n\n    @ApiModelProperty(\"订单支付方式\")\n    private Byte payType;\n\n    @ApiModelProperty(\"订单支付方式\")\n    private String payTypeString;\n\n    @ApiModelProperty(\"订单支付时间\")\n    @JsonFormat(pattern = \"yyyy-MM-dd HH:mm:ss\", timezone = \"GMT+8\")\n    private Date payTime;\n\n    @ApiModelProperty(\"订单状态码\")\n    private Byte orderStatus;\n\n    @ApiModelProperty(\"订单状态\")\n    private String orderStatusString;\n\n    @ApiModelProperty(\"创建时间\")\n    @JsonFormat(pattern = \"yyyy-MM-dd HH:mm:ss\", timezone = \"GMT+8\")\n    private Date createTime;\n\n    @ApiModelProperty(\"订单项列表\")\n    private List<NewBeeMallOrderItemVO> newBeeMallOrderItemVOS;\n}\n"
  },
  {
    "path": "newbee-mall-cloud-order-service/newbee-mall-cloud-order-web/src/main/java/ltd/order/cloud/newbee/controller/vo/NewBeeMallOrderItemVO.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.order.cloud.newbee.controller.vo;\n\nimport io.swagger.annotations.ApiModelProperty;\nimport lombok.Data;\n\nimport java.io.Serializable;\n\n/**\n * 订单详情页页面订单项VO\n */\n@Data\npublic class NewBeeMallOrderItemVO implements Serializable {\n\n    @ApiModelProperty(\"商品id\")\n    private Long goodsId;\n\n    @ApiModelProperty(\"商品数量\")\n    private Integer goodsCount;\n\n    @ApiModelProperty(\"商品名称\")\n    private String goodsName;\n\n    @ApiModelProperty(\"商品图片\")\n    private String goodsCoverImg;\n\n    @ApiModelProperty(\"商品价格\")\n    private Integer sellingPrice;\n}\n"
  },
  {
    "path": "newbee-mall-cloud-order-service/newbee-mall-cloud-order-web/src/main/java/ltd/order/cloud/newbee/controller/vo/NewBeeMallOrderListVO.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.order.cloud.newbee.controller.vo;\n\nimport com.fasterxml.jackson.annotation.JsonFormat;\nimport io.swagger.annotations.ApiModelProperty;\nimport lombok.Data;\n\nimport java.io.Serializable;\nimport java.util.Date;\nimport java.util.List;\n\n/**\n * 订单列表页面VO\n */\n@Data\npublic class NewBeeMallOrderListVO implements Serializable {\n\n    private Long orderId;\n\n    @ApiModelProperty(\"订单号\")\n    private String orderNo;\n\n    @ApiModelProperty(\"订单价格\")\n    private Integer totalPrice;\n\n    @ApiModelProperty(\"订单支付方式\")\n    private Byte payType;\n\n    @ApiModelProperty(\"订单状态码\")\n    private Byte orderStatus;\n\n    @ApiModelProperty(\"订单状态\")\n    private String orderStatusString;\n\n    @ApiModelProperty(\"创建时间\")\n    @JsonFormat(pattern = \"yyyy-MM-dd HH:mm:ss\", timezone = \"GMT+8\")\n    private Date createTime;\n\n    @ApiModelProperty(\"订单项列表\")\n    private List<NewBeeMallOrderItemVO> newBeeMallOrderItemVOS;\n}\n"
  },
  {
    "path": "newbee-mall-cloud-order-service/newbee-mall-cloud-order-web/src/main/java/ltd/order/cloud/newbee/controller/vo/NewBeeMallUserAddressVO.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.order.cloud.newbee.controller.vo;\n\nimport io.swagger.annotations.ApiModelProperty;\nimport lombok.Data;\n\n/**\n * 收货地址VO\n */\n@Data\npublic class NewBeeMallUserAddressVO {\n\n    @ApiModelProperty(\"地址id\")\n    private Long addressId;\n\n    @ApiModelProperty(\"用户id\")\n    private Long userId;\n\n    @ApiModelProperty(\"收件人名称\")\n    private String userName;\n\n    @ApiModelProperty(\"收件人联系方式\")\n    private String userPhone;\n\n    @ApiModelProperty(\"是否默认地址 0-不是 1-是\")\n    private Byte defaultFlag;\n\n    @ApiModelProperty(\"省\")\n    private String provinceName;\n\n    @ApiModelProperty(\"市\")\n    private String cityName;\n\n    @ApiModelProperty(\"区/县\")\n    private String regionName;\n\n    @ApiModelProperty(\"详细地址\")\n    private String detailAddress;\n}\n"
  },
  {
    "path": "newbee-mall-cloud-order-service/newbee-mall-cloud-order-web/src/main/java/ltd/order/cloud/newbee/dao/MallUserAddressMapper.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.order.cloud.newbee.dao;\n\nimport ltd.order.cloud.newbee.entity.MallUserAddress;\n\nimport java.util.List;\n\npublic interface MallUserAddressMapper {\n    int deleteByPrimaryKey(Long addressId);\n\n    int insert(MallUserAddress record);\n\n    int insertSelective(MallUserAddress record);\n\n    MallUserAddress selectByPrimaryKey(Long addressId);\n\n    MallUserAddress getMyDefaultAddress(Long userId);\n\n    List<MallUserAddress> findMyAddressList(Long userId);\n\n    int updateByPrimaryKeySelective(MallUserAddress record);\n\n    int updateByPrimaryKey(MallUserAddress record);\n}"
  },
  {
    "path": "newbee-mall-cloud-order-service/newbee-mall-cloud-order-web/src/main/java/ltd/order/cloud/newbee/dao/NewBeeMallOrderAddressMapper.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.order.cloud.newbee.dao;\n\n\nimport ltd.order.cloud.newbee.entity.NewBeeMallOrderAddress;\n\npublic interface NewBeeMallOrderAddressMapper {\n    int deleteByPrimaryKey(Long orderId);\n\n    int insert(NewBeeMallOrderAddress record);\n\n    int insertSelective(NewBeeMallOrderAddress record);\n\n    NewBeeMallOrderAddress selectByPrimaryKey(Long orderId);\n\n    int updateByPrimaryKeySelective(NewBeeMallOrderAddress record);\n\n    int updateByPrimaryKey(NewBeeMallOrderAddress record);\n}"
  },
  {
    "path": "newbee-mall-cloud-order-service/newbee-mall-cloud-order-web/src/main/java/ltd/order/cloud/newbee/dao/NewBeeMallOrderItemMapper.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.order.cloud.newbee.dao;\n\nimport ltd.order.cloud.newbee.entity.NewBeeMallOrderItem;\nimport org.apache.ibatis.annotations.Param;\n\nimport java.util.List;\n\npublic interface NewBeeMallOrderItemMapper {\n    int deleteByPrimaryKey(Long orderItemId);\n\n    int insert(NewBeeMallOrderItem record);\n\n    int insertSelective(NewBeeMallOrderItem record);\n\n    NewBeeMallOrderItem selectByPrimaryKey(Long orderItemId);\n\n    /**\n     * 根据订单id获取订单项列表\n     *\n     * @param orderId\n     * @return\n     */\n    List<NewBeeMallOrderItem> selectByOrderId(Long orderId);\n\n    /**\n     * 根据订单ids获取订单项列表\n     *\n     * @param orderIds\n     * @return\n     */\n    List<NewBeeMallOrderItem> selectByOrderIds(@Param(\"orderIds\") List<Long> orderIds);\n\n    /**\n     * 批量insert订单项数据\n     *\n     * @param orderItems\n     * @return\n     */\n    int insertBatch(@Param(\"orderItems\") List<NewBeeMallOrderItem> orderItems);\n\n    int updateByPrimaryKeySelective(NewBeeMallOrderItem record);\n\n    int updateByPrimaryKey(NewBeeMallOrderItem record);\n}"
  },
  {
    "path": "newbee-mall-cloud-order-service/newbee-mall-cloud-order-web/src/main/java/ltd/order/cloud/newbee/dao/NewBeeMallOrderMapper.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.order.cloud.newbee.dao;\n\nimport ltd.common.cloud.newbee.dto.PageQueryUtil;\nimport ltd.order.cloud.newbee.entity.NewBeeMallOrder;\nimport org.apache.ibatis.annotations.Param;\n\nimport java.util.List;\n\npublic interface NewBeeMallOrderMapper {\n    int deleteByPrimaryKey(Long orderId);\n\n    int insert(NewBeeMallOrder record);\n\n    int insertSelective(NewBeeMallOrder record);\n\n    NewBeeMallOrder selectByPrimaryKey(Long orderId);\n\n    NewBeeMallOrder selectByOrderNo(String orderNo);\n\n    int updateByPrimaryKeySelective(NewBeeMallOrder record);\n\n    int updateByPrimaryKey(NewBeeMallOrder record);\n\n    List<NewBeeMallOrder> findNewBeeMallOrderList(PageQueryUtil pageUtil);\n\n    int getTotalNewBeeMallOrders(PageQueryUtil pageUtil);\n\n    List<NewBeeMallOrder> selectByPrimaryKeys(@Param(\"orderIds\") List<Long> orderIds);\n\n    int checkOut(@Param(\"orderIds\") List<Long> orderIds);\n\n    int closeOrder(@Param(\"orderIds\") List<Long> orderIds, @Param(\"orderStatus\") int orderStatus);\n\n    int checkDone(@Param(\"orderIds\") List<Long> asList);\n}"
  },
  {
    "path": "newbee-mall-cloud-order-service/newbee-mall-cloud-order-web/src/main/java/ltd/order/cloud/newbee/entity/LoginAdminUser.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本系统已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.order.cloud.newbee.entity;\n\nimport lombok.Data;\n\n@Data\npublic class LoginAdminUser {\n    private Long adminUserId;\n\n    private String loginUserName;\n\n    private String loginPassword;\n\n    private String nickName;\n\n    private Byte locked;\n}"
  },
  {
    "path": "newbee-mall-cloud-order-service/newbee-mall-cloud-order-web/src/main/java/ltd/order/cloud/newbee/entity/MallUserAddress.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.order.cloud.newbee.entity;\n\nimport lombok.Data;\n\nimport java.util.Date;\n\n@Data\npublic class MallUserAddress {\n    private Long addressId;\n\n    private Long userId;\n\n    private String userName;\n\n    private String userPhone;\n\n    private Byte defaultFlag;\n\n    private String provinceName;\n\n    private String cityName;\n\n    private String regionName;\n\n    private String detailAddress;\n\n    private Byte isDeleted;\n\n    private Date createTime;\n\n    private Date updateTime;\n}"
  },
  {
    "path": "newbee-mall-cloud-order-service/newbee-mall-cloud-order-web/src/main/java/ltd/order/cloud/newbee/entity/NewBeeMallOrder.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.order.cloud.newbee.entity;\n\nimport com.fasterxml.jackson.annotation.JsonFormat;\nimport lombok.Data;\n\nimport java.util.Date;\n\n@Data\npublic class NewBeeMallOrder {\n    private Long orderId;\n\n    private String orderNo;\n\n    private Long userId;\n\n    private Integer totalPrice;\n\n    private Byte payStatus;\n\n    private Byte payType;\n\n    private Date payTime;\n\n    private Byte orderStatus;\n\n    private String extraInfo;\n\n    private Byte isDeleted;\n\n    @JsonFormat(pattern = \"yyyy-MM-dd HH:mm:ss\", timezone = \"GMT+8\")\n    private Date createTime;\n    @JsonFormat(pattern = \"yyyy-MM-dd HH:mm:ss\", timezone = \"GMT+8\")\n    private Date updateTime;\n}"
  },
  {
    "path": "newbee-mall-cloud-order-service/newbee-mall-cloud-order-web/src/main/java/ltd/order/cloud/newbee/entity/NewBeeMallOrderAddress.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.order.cloud.newbee.entity;\n\nimport lombok.Data;\n\n@Data\npublic class NewBeeMallOrderAddress {\n    private Long orderId;\n\n    private String userName;\n\n    private String userPhone;\n\n    private String provinceName;\n\n    private String cityName;\n\n    private String regionName;\n\n    private String detailAddress;\n}"
  },
  {
    "path": "newbee-mall-cloud-order-service/newbee-mall-cloud-order-web/src/main/java/ltd/order/cloud/newbee/entity/NewBeeMallOrderItem.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.order.cloud.newbee.entity;\n\nimport lombok.Data;\n\nimport java.util.Date;\n\n@Data\npublic class NewBeeMallOrderItem {\n    private Long orderItemId;\n\n    private Long orderId;\n\n    private Long goodsId;\n\n    private String goodsName;\n\n    private String goodsCoverImg;\n\n    private Integer sellingPrice;\n\n    private Integer goodsCount;\n\n    private Date createTime;\n}"
  },
  {
    "path": "newbee-mall-cloud-order-service/newbee-mall-cloud-order-web/src/main/java/ltd/order/cloud/newbee/service/NewBeeMallOrderService.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.order.cloud.newbee.service;\n\nimport ltd.common.cloud.newbee.dto.PageQueryUtil;\nimport ltd.common.cloud.newbee.dto.PageResult;\nimport ltd.order.cloud.newbee.controller.vo.NewBeeMallOrderDetailVO;\nimport ltd.order.cloud.newbee.controller.vo.NewBeeMallOrderItemVO;\nimport ltd.order.cloud.newbee.entity.MallUserAddress;\nimport ltd.order.cloud.newbee.entity.NewBeeMallOrder;\n\nimport java.util.List;\n\npublic interface NewBeeMallOrderService {\n    /**\n     * 获取订单详情\n     *\n     * @param orderId\n     * @return\n     */\n    NewBeeMallOrderDetailVO getOrderDetailByOrderId(Long orderId);\n\n    /**\n     * 获取订单详情\n     *\n     * @param orderNo\n     * @param userId\n     * @return\n     */\n    NewBeeMallOrderDetailVO getOrderDetailByOrderNo(String orderNo, Long userId);\n\n    /**\n     * 我的订单列表\n     *\n     * @param pageUtil\n     * @return\n     */\n    PageResult getMyOrders(PageQueryUtil pageUtil);\n\n    /**\n     * 手动取消订单\n     *\n     * @param orderNo\n     * @param userId\n     * @return\n     */\n    String cancelOrder(String orderNo, Long userId);\n\n    /**\n     * 确认收货\n     *\n     * @param orderNo\n     * @param userId\n     * @return\n     */\n    String finishOrder(String orderNo, Long userId);\n\n    String paySuccess(String orderNo, int payType);\n\n    /**\n     * 生成订单\n     * @param mallUserId\n     * @param address\n     * @param cartItemIds\n     * @return\n     */\n    String saveOrder(Long mallUserId, MallUserAddress address, List<Long> cartItemIds);\n\n    /**\n     * 后台分页\n     *\n     * @param pageUtil\n     * @return\n     */\n    PageResult getNewBeeMallOrdersPage(PageQueryUtil pageUtil);\n\n    /**\n     * 订单信息修改\n     *\n     * @param newBeeMallOrder\n     * @return\n     */\n    String updateOrderInfo(NewBeeMallOrder newBeeMallOrder);\n\n    /**\n     * 配货\n     *\n     * @param ids\n     * @return\n     */\n    String checkDone(Long[] ids);\n\n    /**\n     * 出库\n     *\n     * @param ids\n     * @return\n     */\n    String checkOut(Long[] ids);\n\n    /**\n     * 关闭订单\n     *\n     * @param ids\n     * @return\n     */\n    String closeOrder(Long[] ids);\n\n    List<NewBeeMallOrderItemVO> getOrderItems(Long orderId);\n}\n"
  },
  {
    "path": "newbee-mall-cloud-order-service/newbee-mall-cloud-order-web/src/main/java/ltd/order/cloud/newbee/service/NewBeeMallUserAddressService.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.order.cloud.newbee.service;\n\nimport ltd.order.cloud.newbee.controller.vo.NewBeeMallUserAddressVO;\nimport ltd.order.cloud.newbee.entity.MallUserAddress;\n\nimport java.util.List;\n\npublic interface NewBeeMallUserAddressService {\n\n    /**\n     * 获取我的收货地址\n     *\n     * @param userId\n     * @return\n     */\n    List<NewBeeMallUserAddressVO> getMyAddresses(Long userId);\n\n    /**\n     * 保存收货地址\n     *\n     * @param mallUserAddress\n     * @return\n     */\n    Boolean saveUserAddress(MallUserAddress mallUserAddress);\n\n    /**\n     * 修改收货地址\n     *\n     * @param mallUserAddress\n     * @return\n     */\n    Boolean updateMallUserAddress(MallUserAddress mallUserAddress);\n\n    /**\n     * 获取收货地址详情\n     *\n     * @param addressId\n     * @return\n     */\n    MallUserAddress getMallUserAddressById(Long addressId);\n\n    /**\n     * 获取我的默认收货地址\n     *\n     * @param userId\n     * @return\n     */\n    MallUserAddress getMyDefaultAddressByUserId(Long userId);\n\n    /**\n     * 删除收货地址\n     *\n     * @param addressId\n     * @return\n     */\n    Boolean deleteById(Long addressId);\n}\n"
  },
  {
    "path": "newbee-mall-cloud-order-service/newbee-mall-cloud-order-web/src/main/java/ltd/order/cloud/newbee/service/impl/NewBeeMallOrderServiceImpl.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.order.cloud.newbee.service.impl;\n\nimport io.seata.spring.annotation.GlobalTransactional;\nimport ltd.common.cloud.newbee.enums.ServiceResultEnum;\nimport ltd.common.cloud.newbee.dto.PageQueryUtil;\nimport ltd.common.cloud.newbee.dto.PageResult;\nimport ltd.common.cloud.newbee.dto.Result;\nimport ltd.common.cloud.newbee.enums.NewBeeMallOrderStatusEnum;\nimport ltd.common.cloud.newbee.enums.PayStatusEnum;\nimport ltd.common.cloud.newbee.enums.PayTypeEnum;\nimport ltd.common.cloud.newbee.exception.NewBeeMallException;\nimport ltd.common.cloud.newbee.util.BeanUtil;\nimport ltd.common.cloud.newbee.util.NumberUtil;\nimport ltd.goods.cloud.newbee.dto.NewBeeMallGoodsDTO;\nimport ltd.goods.cloud.newbee.dto.StockNumDTO;\nimport ltd.goods.cloud.newbee.dto.UpdateStockNumDTO;\nimport ltd.goods.cloud.newbee.openfeign.NewBeeCloudGoodsServiceFeign;\nimport ltd.order.cloud.newbee.controller.vo.NewBeeMallOrderDetailVO;\nimport ltd.order.cloud.newbee.controller.vo.NewBeeMallOrderItemVO;\nimport ltd.order.cloud.newbee.controller.vo.NewBeeMallOrderListVO;\nimport ltd.order.cloud.newbee.dao.NewBeeMallOrderAddressMapper;\nimport ltd.order.cloud.newbee.dao.NewBeeMallOrderItemMapper;\nimport ltd.order.cloud.newbee.dao.NewBeeMallOrderMapper;\nimport ltd.order.cloud.newbee.entity.MallUserAddress;\nimport ltd.order.cloud.newbee.entity.NewBeeMallOrder;\nimport ltd.order.cloud.newbee.entity.NewBeeMallOrderAddress;\nimport ltd.order.cloud.newbee.entity.NewBeeMallOrderItem;\nimport ltd.order.cloud.newbee.service.NewBeeMallOrderService;\nimport ltd.shopcart.cloud.newbee.dto.NewBeeMallShoppingCartItemDTO;\nimport ltd.shopcart.cloud.newbee.openfeign.NewBeeCloudShopCartServiceFeign;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\nimport org.springframework.transaction.annotation.Transactional;\nimport org.springframework.util.CollectionUtils;\nimport org.springframework.util.StringUtils;\n\nimport java.util.*;\nimport java.util.function.Function;\nimport java.util.stream.Collectors;\n\nimport static java.util.stream.Collectors.groupingBy;\n\n@Service\npublic class NewBeeMallOrderServiceImpl implements NewBeeMallOrderService {\n\n    @Autowired\n    private NewBeeMallOrderMapper newBeeMallOrderMapper;\n\n    @Autowired\n    private NewBeeMallOrderItemMapper newBeeMallOrderItemMapper;\n\n    @Autowired\n    private NewBeeMallOrderAddressMapper newBeeMallOrderAddressMapper;\n\n    @Autowired\n    private NewBeeCloudGoodsServiceFeign goodsService;\n\n    @Autowired\n    private NewBeeCloudShopCartServiceFeign shopCartService;\n\n    @Override\n    public NewBeeMallOrderDetailVO getOrderDetailByOrderId(Long orderId) {\n        NewBeeMallOrder newBeeMallOrder = newBeeMallOrderMapper.selectByPrimaryKey(orderId);\n        if (newBeeMallOrder == null) {\n            NewBeeMallException.fail(ServiceResultEnum.DATA_NOT_EXIST.getResult());\n        }\n        List<NewBeeMallOrderItem> orderItems = newBeeMallOrderItemMapper.selectByOrderId(newBeeMallOrder.getOrderId());\n        //获取订单项数据\n        if (!CollectionUtils.isEmpty(orderItems)) {\n            List<NewBeeMallOrderItemVO> newBeeMallOrderItemVOS = BeanUtil.copyList(orderItems, NewBeeMallOrderItemVO.class);\n            NewBeeMallOrderDetailVO newBeeMallOrderDetailVO = new NewBeeMallOrderDetailVO();\n            BeanUtil.copyProperties(newBeeMallOrder, newBeeMallOrderDetailVO);\n            newBeeMallOrderDetailVO.setOrderStatusString(NewBeeMallOrderStatusEnum.getNewBeeMallOrderStatusEnumByStatus(newBeeMallOrderDetailVO.getOrderStatus()).getName());\n            newBeeMallOrderDetailVO.setPayTypeString(PayTypeEnum.getPayTypeEnumByType(newBeeMallOrderDetailVO.getPayType()).getName());\n            newBeeMallOrderDetailVO.setNewBeeMallOrderItemVOS(newBeeMallOrderItemVOS);\n            return newBeeMallOrderDetailVO;\n        } else {\n            NewBeeMallException.fail(ServiceResultEnum.ORDER_ITEM_NULL_ERROR.getResult());\n            return null;\n        }\n    }\n\n    @Override\n    public NewBeeMallOrderDetailVO getOrderDetailByOrderNo(String orderNo, Long userId) {\n        NewBeeMallOrder newBeeMallOrder = newBeeMallOrderMapper.selectByOrderNo(orderNo);\n        if (newBeeMallOrder == null) {\n            NewBeeMallException.fail(ServiceResultEnum.DATA_NOT_EXIST.getResult());\n        }\n        if (!userId.equals(newBeeMallOrder.getUserId())) {\n            NewBeeMallException.fail(ServiceResultEnum.REQUEST_FORBIDEN_ERROR.getResult());\n        }\n        List<NewBeeMallOrderItem> orderItems = newBeeMallOrderItemMapper.selectByOrderId(newBeeMallOrder.getOrderId());\n        //获取订单项数据\n        if (CollectionUtils.isEmpty(orderItems)) {\n            NewBeeMallException.fail(ServiceResultEnum.ORDER_ITEM_NOT_EXIST_ERROR.getResult());\n        }\n        List<NewBeeMallOrderItemVO> newBeeMallOrderItemVOS = BeanUtil.copyList(orderItems, NewBeeMallOrderItemVO.class);\n        NewBeeMallOrderDetailVO newBeeMallOrderDetailVO = new NewBeeMallOrderDetailVO();\n        BeanUtil.copyProperties(newBeeMallOrder, newBeeMallOrderDetailVO);\n        newBeeMallOrderDetailVO.setOrderStatusString(NewBeeMallOrderStatusEnum.getNewBeeMallOrderStatusEnumByStatus(newBeeMallOrderDetailVO.getOrderStatus()).getName());\n        newBeeMallOrderDetailVO.setPayTypeString(PayTypeEnum.getPayTypeEnumByType(newBeeMallOrderDetailVO.getPayType()).getName());\n        newBeeMallOrderDetailVO.setNewBeeMallOrderItemVOS(newBeeMallOrderItemVOS);\n        return newBeeMallOrderDetailVO;\n    }\n\n\n    @Override\n    public PageResult getMyOrders(PageQueryUtil pageUtil) {\n        int total = newBeeMallOrderMapper.getTotalNewBeeMallOrders(pageUtil);\n        List<NewBeeMallOrder> newBeeMallOrders = newBeeMallOrderMapper.findNewBeeMallOrderList(pageUtil);\n        List<NewBeeMallOrderListVO> orderListVOS = new ArrayList<>();\n        if (total > 0) {\n            //数据转换 将实体类转成vo\n            orderListVOS = BeanUtil.copyList(newBeeMallOrders, NewBeeMallOrderListVO.class);\n            //设置订单状态中文显示值\n            for (NewBeeMallOrderListVO newBeeMallOrderListVO : orderListVOS) {\n                newBeeMallOrderListVO.setOrderStatusString(NewBeeMallOrderStatusEnum.getNewBeeMallOrderStatusEnumByStatus(newBeeMallOrderListVO.getOrderStatus()).getName());\n            }\n            List<Long> orderIds = newBeeMallOrders.stream().map(NewBeeMallOrder::getOrderId).collect(Collectors.toList());\n            if (!CollectionUtils.isEmpty(orderIds)) {\n                List<NewBeeMallOrderItem> orderItems = newBeeMallOrderItemMapper.selectByOrderIds(orderIds);\n                Map<Long, List<NewBeeMallOrderItem>> itemByOrderIdMap = orderItems.stream().collect(groupingBy(NewBeeMallOrderItem::getOrderId));\n                for (NewBeeMallOrderListVO newBeeMallOrderListVO : orderListVOS) {\n                    //封装每个订单列表对象的订单项数据\n                    if (itemByOrderIdMap.containsKey(newBeeMallOrderListVO.getOrderId())) {\n                        List<NewBeeMallOrderItem> orderItemListTemp = itemByOrderIdMap.get(newBeeMallOrderListVO.getOrderId());\n                        //将NewBeeMallOrderItem对象列表转换成NewBeeMallOrderItemVO对象列表\n                        List<NewBeeMallOrderItemVO> newBeeMallOrderItemVOS = BeanUtil.copyList(orderItemListTemp, NewBeeMallOrderItemVO.class);\n                        newBeeMallOrderListVO.setNewBeeMallOrderItemVOS(newBeeMallOrderItemVOS);\n                    }\n                }\n            }\n        }\n        PageResult pageResult = new PageResult(orderListVOS, total, pageUtil.getLimit(), pageUtil.getPage());\n        return pageResult;\n    }\n\n    @Override\n    public String cancelOrder(String orderNo, Long userId) {\n        NewBeeMallOrder newBeeMallOrder = newBeeMallOrderMapper.selectByOrderNo(orderNo);\n        if (newBeeMallOrder != null) {\n            //验证是否是当前userId下的订单，否则报错\n            if (!userId.equals(newBeeMallOrder.getUserId())) {\n                NewBeeMallException.fail(ServiceResultEnum.NO_PERMISSION_ERROR.getResult());\n            }\n            //订单状态判断\n            if (newBeeMallOrder.getOrderStatus().intValue() == NewBeeMallOrderStatusEnum.ORDER_SUCCESS.getOrderStatus()\n                    || newBeeMallOrder.getOrderStatus().intValue() == NewBeeMallOrderStatusEnum.ORDER_CLOSED_BY_MALLUSER.getOrderStatus()\n                    || newBeeMallOrder.getOrderStatus().intValue() == NewBeeMallOrderStatusEnum.ORDER_CLOSED_BY_EXPIRED.getOrderStatus()\n                    || newBeeMallOrder.getOrderStatus().intValue() == NewBeeMallOrderStatusEnum.ORDER_CLOSED_BY_JUDGE.getOrderStatus()) {\n                return ServiceResultEnum.ORDER_STATUS_ERROR.getResult();\n            }\n            if (newBeeMallOrderMapper.closeOrder(Collections.singletonList(newBeeMallOrder.getOrderId()), NewBeeMallOrderStatusEnum.ORDER_CLOSED_BY_MALLUSER.getOrderStatus()) > 0) {\n                return ServiceResultEnum.SUCCESS.getResult();\n            } else {\n                return ServiceResultEnum.DB_ERROR.getResult();\n            }\n        }\n        return ServiceResultEnum.ORDER_NOT_EXIST_ERROR.getResult();\n    }\n\n    @Override\n    public String finishOrder(String orderNo, Long userId) {\n        NewBeeMallOrder newBeeMallOrder = newBeeMallOrderMapper.selectByOrderNo(orderNo);\n        if (newBeeMallOrder != null) {\n            //验证是否是当前userId下的订单，否则报错\n            if (!userId.equals(newBeeMallOrder.getUserId())) {\n                return ServiceResultEnum.NO_PERMISSION_ERROR.getResult();\n            }\n            //订单状态判断 非出库状态下不进行修改操作\n            if (newBeeMallOrder.getOrderStatus().intValue() != NewBeeMallOrderStatusEnum.ORDER_EXPRESS.getOrderStatus()) {\n                return ServiceResultEnum.ORDER_STATUS_ERROR.getResult();\n            }\n            newBeeMallOrder.setOrderStatus((byte) NewBeeMallOrderStatusEnum.ORDER_SUCCESS.getOrderStatus());\n            newBeeMallOrder.setUpdateTime(new Date());\n            if (newBeeMallOrderMapper.updateByPrimaryKeySelective(newBeeMallOrder) > 0) {\n                return ServiceResultEnum.SUCCESS.getResult();\n            } else {\n                return ServiceResultEnum.DB_ERROR.getResult();\n            }\n        }\n        return ServiceResultEnum.ORDER_NOT_EXIST_ERROR.getResult();\n    }\n\n    @Override\n    public String paySuccess(String orderNo, int payType) {\n        NewBeeMallOrder newBeeMallOrder = newBeeMallOrderMapper.selectByOrderNo(orderNo);\n        if (newBeeMallOrder != null) {\n            //订单状态判断 非待支付状态下不进行修改操作\n            if (newBeeMallOrder.getOrderStatus().intValue() != NewBeeMallOrderStatusEnum.ORDER_PRE_PAY.getOrderStatus()) {\n                return ServiceResultEnum.ORDER_STATUS_ERROR.getResult();\n            }\n            newBeeMallOrder.setOrderStatus((byte) NewBeeMallOrderStatusEnum.ORDER_PAID.getOrderStatus());\n            newBeeMallOrder.setPayType((byte) payType);\n            newBeeMallOrder.setPayStatus((byte) PayStatusEnum.PAY_SUCCESS.getPayStatus());\n            newBeeMallOrder.setPayTime(new Date());\n            newBeeMallOrder.setUpdateTime(new Date());\n            if (newBeeMallOrderMapper.updateByPrimaryKeySelective(newBeeMallOrder) > 0) {\n                return ServiceResultEnum.SUCCESS.getResult();\n            } else {\n                return ServiceResultEnum.DB_ERROR.getResult();\n            }\n        }\n        return ServiceResultEnum.ORDER_NOT_EXIST_ERROR.getResult();\n    }\n\n    @Override\n    @Transactional\n    @GlobalTransactional\n    public String saveOrder(Long mallUserId, MallUserAddress address, List<Long> cartItemIds) {\n        //调用购物车服务feign获取数据\n        Result<List<NewBeeMallShoppingCartItemDTO>> cartItemDTOListResult = shopCartService.listByCartItemIds(cartItemIds);\n        if (cartItemDTOListResult == null || cartItemDTOListResult.getResultCode() != 200) {\n            NewBeeMallException.fail(\"参数异常\");\n        }\n        List<NewBeeMallShoppingCartItemDTO> itemsForSave = cartItemDTOListResult.getData();\n        if (CollectionUtils.isEmpty(itemsForSave)) {\n            //无数据\n            NewBeeMallException.fail(\"参数异常\");\n        }\n        List<Long> itemIdList = itemsForSave.stream().map(NewBeeMallShoppingCartItemDTO::getCartItemId).collect(Collectors.toList());\n        List<Long> goodsIds = itemsForSave.stream().map(NewBeeMallShoppingCartItemDTO::getGoodsId).collect(Collectors.toList());\n        //调用商品服务feign获取数据\n        Result<List<NewBeeMallGoodsDTO>> goodsDTOListResult = goodsService.listByGoodsIds(goodsIds);\n        if (goodsDTOListResult == null || goodsDTOListResult.getResultCode() != 200) {\n            NewBeeMallException.fail(\"参数异常\");\n        }\n        List<NewBeeMallGoodsDTO> newBeeMallGoods = goodsDTOListResult.getData();\n        //检查是否包含已下架商品\n        List<NewBeeMallGoodsDTO> goodsListNotSelling = newBeeMallGoods.stream()\n                .filter(newBeeMallGoodsTemp -> newBeeMallGoodsTemp.getGoodsSellStatus() != 0)\n                .collect(Collectors.toList());\n        if (!CollectionUtils.isEmpty(goodsListNotSelling)) {\n            //goodsListNotSelling 对象非空则表示有下架商品\n            NewBeeMallException.fail(goodsListNotSelling.get(0).getGoodsName() + \"已下架，无法生成订单\");\n        }\n        Map<Long, NewBeeMallGoodsDTO> newBeeMallGoodsMap = newBeeMallGoods.stream().collect(Collectors.toMap(NewBeeMallGoodsDTO::getGoodsId, Function.identity(), (entity1, entity2) -> entity1));\n        //判断商品库存\n        for (NewBeeMallShoppingCartItemDTO cartItemDTO : itemsForSave) {\n            //查出的商品中不存在购物车中的这条关联商品数据，直接返回错误提醒\n            if (!newBeeMallGoodsMap.containsKey(cartItemDTO.getGoodsId())) {\n                NewBeeMallException.fail(ServiceResultEnum.SHOPPING_ITEM_ERROR.getResult());\n            }\n            //存在数量大于库存的情况，直接返回错误提醒\n            if (cartItemDTO.getGoodsCount() > newBeeMallGoodsMap.get(cartItemDTO.getGoodsId()).getStockNum()) {\n                NewBeeMallException.fail(ServiceResultEnum.SHOPPING_ITEM_COUNT_ERROR.getResult());\n            }\n        }\n        //删除购物项\n        if (!CollectionUtils.isEmpty(itemIdList) && !CollectionUtils.isEmpty(goodsIds) && !CollectionUtils.isEmpty(newBeeMallGoods)) {\n\n            //调用购物车服务feign删除数据\n            Result<Boolean> deleteByCartItemIdsResult = shopCartService.deleteByCartItemIds(itemIdList);\n            if (deleteByCartItemIdsResult != null && deleteByCartItemIdsResult.getResultCode() == 200) {\n\n\n                List<StockNumDTO> stockNumDTOS = BeanUtil.copyList(itemsForSave, StockNumDTO.class);\n                UpdateStockNumDTO updateStockNumDTO = new UpdateStockNumDTO();\n                updateStockNumDTO.setStockNumDTOS(stockNumDTOS);\n\n                //调用商品服务feign修改库存数据\n                Result<Boolean> updateStockResult = goodsService.updateStock(updateStockNumDTO);\n                if (updateStockResult == null || updateStockResult.getResultCode() != 200) {\n                    NewBeeMallException.fail(ServiceResultEnum.PARAM_ERROR.getResult());\n                }\n                if (!updateStockResult.getData()) {\n                    NewBeeMallException.fail(ServiceResultEnum.SHOPPING_ITEM_COUNT_ERROR.getResult());\n                }\n                //生成订单号\n                String orderNo = NumberUtil.genOrderNo();\n                int priceTotal = 0;\n                //保存订单\n                NewBeeMallOrder newBeeMallOrder = new NewBeeMallOrder();\n                newBeeMallOrder.setOrderNo(orderNo);\n                newBeeMallOrder.setUserId(mallUserId);\n                //总价\n                for (NewBeeMallShoppingCartItemDTO cartItemDTO : itemsForSave) {\n                    priceTotal += cartItemDTO.getGoodsCount() * newBeeMallGoodsMap.get(cartItemDTO.getGoodsId()).getSellingPrice();\n                }\n                if (priceTotal < 1) {\n                    NewBeeMallException.fail(ServiceResultEnum.ORDER_PRICE_ERROR.getResult());\n                }\n                newBeeMallOrder.setTotalPrice(priceTotal);\n                String extraInfo = \"\";\n                newBeeMallOrder.setExtraInfo(extraInfo);\n                //生成订单项并保存订单项纪录\n                if (newBeeMallOrderMapper.insertSelective(newBeeMallOrder) > 0) {\n                    //生成订单收货地址快照，并保存至数据库\n                    NewBeeMallOrderAddress newBeeMallOrderAddress = new NewBeeMallOrderAddress();\n                    BeanUtil.copyProperties(address, newBeeMallOrderAddress);\n                    newBeeMallOrderAddress.setOrderId(newBeeMallOrder.getOrderId());\n                    //生成所有的订单项快照，并保存至数据库\n                    List<NewBeeMallOrderItem> newBeeMallOrderItems = new ArrayList<>();\n                    for (NewBeeMallShoppingCartItemDTO cartItemDTO : itemsForSave) {\n                        NewBeeMallOrderItem newBeeMallOrderItem = new NewBeeMallOrderItem();\n                        //使用BeanUtil工具类将cartItemDTO中的属性复制到newBeeMallOrderItem对象中\n                        BeanUtil.copyProperties(cartItemDTO, newBeeMallOrderItem);\n                        newBeeMallOrderItem.setGoodsCoverImg(newBeeMallGoodsMap.get(cartItemDTO.getGoodsId()).getGoodsCoverImg());\n                        newBeeMallOrderItem.setGoodsName(newBeeMallGoodsMap.get(cartItemDTO.getGoodsId()).getGoodsName());\n                        newBeeMallOrderItem.setSellingPrice(newBeeMallGoodsMap.get(cartItemDTO.getGoodsId()).getSellingPrice());\n                        //NewBeeMallOrderMapper文件insert()方法中使用了useGeneratedKeys因此orderId可以获取到\n                        newBeeMallOrderItem.setOrderId(newBeeMallOrder.getOrderId());\n                        newBeeMallOrderItems.add(newBeeMallOrderItem);\n                    }\n                    //保存至数据库\n                    if (newBeeMallOrderItemMapper.insertBatch(newBeeMallOrderItems) > 0 && newBeeMallOrderAddressMapper.insertSelective(newBeeMallOrderAddress) > 0) {\n                        //所有操作成功后，将订单号返回，以供Controller方法跳转到订单详情\n                        return orderNo;\n                    }\n                    NewBeeMallException.fail(ServiceResultEnum.ORDER_PRICE_ERROR.getResult());\n                }\n                NewBeeMallException.fail(ServiceResultEnum.DB_ERROR.getResult());\n            }\n            NewBeeMallException.fail(ServiceResultEnum.DB_ERROR.getResult());\n        }\n        NewBeeMallException.fail(ServiceResultEnum.SHOPPING_ITEM_ERROR.getResult());\n        return ServiceResultEnum.SHOPPING_ITEM_ERROR.getResult();\n    }\n\n\n    @Override\n    public PageResult getNewBeeMallOrdersPage(PageQueryUtil pageUtil) {\n        List<NewBeeMallOrder> newBeeMallOrders = newBeeMallOrderMapper.findNewBeeMallOrderList(pageUtil);\n        int total = newBeeMallOrderMapper.getTotalNewBeeMallOrders(pageUtil);\n        PageResult pageResult = new PageResult(newBeeMallOrders, total, pageUtil.getLimit(), pageUtil.getPage());\n        return pageResult;\n    }\n\n    @Override\n    @Transactional\n    public String updateOrderInfo(NewBeeMallOrder newBeeMallOrder) {\n        NewBeeMallOrder temp = newBeeMallOrderMapper.selectByPrimaryKey(newBeeMallOrder.getOrderId());\n        //不为空且orderStatus>=0且状态为出库之前可以修改部分信息\n        if (temp != null && temp.getOrderStatus() >= 0 && temp.getOrderStatus() < 3) {\n            temp.setTotalPrice(newBeeMallOrder.getTotalPrice());\n            temp.setUpdateTime(new Date());\n            if (newBeeMallOrderMapper.updateByPrimaryKeySelective(temp) > 0) {\n                return ServiceResultEnum.SUCCESS.getResult();\n            }\n            return ServiceResultEnum.DB_ERROR.getResult();\n        }\n        return ServiceResultEnum.DATA_NOT_EXIST.getResult();\n    }\n\n    @Override\n    @Transactional\n    public String checkDone(Long[] ids) {\n        //查询所有的订单 判断状态 修改状态和更新时间\n        List<NewBeeMallOrder> orders = newBeeMallOrderMapper.selectByPrimaryKeys(Arrays.asList(ids));\n        String errorOrderNos = \"\";\n        if (!CollectionUtils.isEmpty(orders)) {\n            for (NewBeeMallOrder newBeeMallOrder : orders) {\n                if (newBeeMallOrder.getIsDeleted() == 1) {\n                    errorOrderNos += newBeeMallOrder.getOrderNo() + \" \";\n                    continue;\n                }\n                if (newBeeMallOrder.getOrderStatus() != 1) {\n                    errorOrderNos += newBeeMallOrder.getOrderNo() + \" \";\n                }\n            }\n            if (!StringUtils.hasText(errorOrderNos)) {\n                //订单状态正常 可以执行配货完成操作 修改订单状态和更新时间\n                if (newBeeMallOrderMapper.checkDone(Arrays.asList(ids)) > 0) {\n                    return ServiceResultEnum.SUCCESS.getResult();\n                } else {\n                    return ServiceResultEnum.DB_ERROR.getResult();\n                }\n            } else {\n                //订单此时不可执行出库操作\n                if (errorOrderNos.length() > 0 && errorOrderNos.length() < 100) {\n                    return errorOrderNos + \"订单的状态不是支付成功无法执行出库操作\";\n                } else {\n                    return \"你选择了太多状态不是支付成功的订单，无法执行配货完成操作\";\n                }\n            }\n        }\n        //未查询到数据 返回错误提示\n        return ServiceResultEnum.DATA_NOT_EXIST.getResult();\n    }\n\n    @Override\n    @Transactional\n    public String checkOut(Long[] ids) {\n        //查询所有的订单 判断状态 修改状态和更新时间\n        List<NewBeeMallOrder> orders = newBeeMallOrderMapper.selectByPrimaryKeys(Arrays.asList(ids));\n        String errorOrderNos = \"\";\n        if (!CollectionUtils.isEmpty(orders)) {\n            for (NewBeeMallOrder newBeeMallOrder : orders) {\n                if (newBeeMallOrder.getIsDeleted() == 1) {\n                    errorOrderNos += newBeeMallOrder.getOrderNo() + \" \";\n                    continue;\n                }\n                if (newBeeMallOrder.getOrderStatus() != 1 && newBeeMallOrder.getOrderStatus() != 2) {\n                    errorOrderNos += newBeeMallOrder.getOrderNo() + \" \";\n                }\n            }\n            if (!StringUtils.hasText(errorOrderNos)) {\n                //订单状态正常 可以执行出库操作 修改订单状态和更新时间\n                if (newBeeMallOrderMapper.checkOut(Arrays.asList(ids)) > 0) {\n                    return ServiceResultEnum.SUCCESS.getResult();\n                } else {\n                    return ServiceResultEnum.DB_ERROR.getResult();\n                }\n            } else {\n                //订单此时不可执行出库操作\n                if (errorOrderNos.length() > 0 && errorOrderNos.length() < 100) {\n                    return errorOrderNos + \"订单的状态不是支付成功或配货完成无法执行出库操作\";\n                } else {\n                    return \"你选择了太多状态不是支付成功或配货完成的订单，无法执行出库操作\";\n                }\n            }\n        }\n        //未查询到数据 返回错误提示\n        return ServiceResultEnum.DATA_NOT_EXIST.getResult();\n    }\n\n    @Override\n    @Transactional\n    public String closeOrder(Long[] ids) {\n        //查询所有的订单 判断状态 修改状态和更新时间\n        List<NewBeeMallOrder> orders = newBeeMallOrderMapper.selectByPrimaryKeys(Arrays.asList(ids));\n        String errorOrderNos = \"\";\n        if (!CollectionUtils.isEmpty(orders)) {\n            for (NewBeeMallOrder newBeeMallOrder : orders) {\n                // isDeleted=1 一定为已关闭订单\n                if (newBeeMallOrder.getIsDeleted() == 1) {\n                    errorOrderNos += newBeeMallOrder.getOrderNo() + \" \";\n                    continue;\n                }\n                //已关闭或者已完成无法关闭订单\n                if (newBeeMallOrder.getOrderStatus() == 4 || newBeeMallOrder.getOrderStatus() < 0) {\n                    errorOrderNos += newBeeMallOrder.getOrderNo() + \" \";\n                }\n            }\n            if (!StringUtils.hasText(errorOrderNos)) {\n                //订单状态正常 可以执行关闭操作 修改订单状态和更新时间\n                if (newBeeMallOrderMapper.closeOrder(Arrays.asList(ids), NewBeeMallOrderStatusEnum.ORDER_CLOSED_BY_JUDGE.getOrderStatus()) > 0) {\n                    return ServiceResultEnum.SUCCESS.getResult();\n                } else {\n                    return ServiceResultEnum.DB_ERROR.getResult();\n                }\n            } else {\n                //订单此时不可执行关闭操作\n                if (errorOrderNos.length() > 0 && errorOrderNos.length() < 100) {\n                    return errorOrderNos + \"订单不能执行关闭操作\";\n                } else {\n                    return \"你选择的订单不能执行关闭操作\";\n                }\n            }\n        }\n        //未查询到数据 返回错误提示\n        return ServiceResultEnum.DATA_NOT_EXIST.getResult();\n    }\n\n    @Override\n    public List<NewBeeMallOrderItemVO> getOrderItems(Long orderId) {\n        NewBeeMallOrder newBeeMallOrder = newBeeMallOrderMapper.selectByPrimaryKey(orderId);\n        if (newBeeMallOrder != null) {\n            List<NewBeeMallOrderItem> orderItems = newBeeMallOrderItemMapper.selectByOrderId(newBeeMallOrder.getOrderId());\n            //获取订单项数据\n            if (!CollectionUtils.isEmpty(orderItems)) {\n                List<NewBeeMallOrderItemVO> newBeeMallOrderItemVOS = BeanUtil.copyList(orderItems, NewBeeMallOrderItemVO.class);\n                return newBeeMallOrderItemVOS;\n            }\n        }\n        return null;\n    }\n}\n"
  },
  {
    "path": "newbee-mall-cloud-order-service/newbee-mall-cloud-order-web/src/main/java/ltd/order/cloud/newbee/service/impl/NewBeeMallUserAddressServiceImpl.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.order.cloud.newbee.service.impl;\n\nimport ltd.common.cloud.newbee.enums.ServiceResultEnum;\nimport ltd.common.cloud.newbee.exception.NewBeeMallException;\nimport ltd.common.cloud.newbee.util.BeanUtil;\nimport ltd.order.cloud.newbee.controller.vo.NewBeeMallUserAddressVO;\nimport ltd.order.cloud.newbee.dao.MallUserAddressMapper;\nimport ltd.order.cloud.newbee.entity.MallUserAddress;\nimport ltd.order.cloud.newbee.service.NewBeeMallUserAddressService;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\nimport org.springframework.transaction.annotation.Transactional;\n\nimport java.util.Date;\nimport java.util.List;\n\n@Service\npublic class NewBeeMallUserAddressServiceImpl implements NewBeeMallUserAddressService {\n\n    @Autowired\n    private MallUserAddressMapper userAddressMapper;\n\n    @Override\n    public List<NewBeeMallUserAddressVO> getMyAddresses(Long userId) {\n        List<MallUserAddress> myAddressList = userAddressMapper.findMyAddressList(userId);\n        List<NewBeeMallUserAddressVO> newBeeMallUserAddressVOS = BeanUtil.copyList(myAddressList, NewBeeMallUserAddressVO.class);\n        return newBeeMallUserAddressVOS;\n    }\n\n    @Override\n    @Transactional\n    public Boolean saveUserAddress(MallUserAddress mallUserAddress) {\n        Date now = new Date();\n        if (mallUserAddress.getDefaultFlag().intValue() == 1) {\n            //添加默认地址，需要将原有的默认地址修改掉\n            MallUserAddress defaultAddress = userAddressMapper.getMyDefaultAddress(mallUserAddress.getUserId());\n            if (defaultAddress != null) {\n                defaultAddress.setDefaultFlag((byte) 0);\n                defaultAddress.setUpdateTime(now);\n                int updateResult = userAddressMapper.updateByPrimaryKeySelective(defaultAddress);\n                if (updateResult < 1) {\n                    //未更新成功\n                    NewBeeMallException.fail(ServiceResultEnum.DB_ERROR.getResult());\n                }\n            }\n        }\n        return userAddressMapper.insertSelective(mallUserAddress) > 0;\n    }\n\n    @Override\n    public Boolean updateMallUserAddress(MallUserAddress mallUserAddress) {\n        MallUserAddress tempAddress = getMallUserAddressById(mallUserAddress.getAddressId());\n        Date now = new Date();\n        if (mallUserAddress.getDefaultFlag().intValue() == 1) {\n            //修改为默认地址，需要将原有的默认地址修改掉\n            MallUserAddress defaultAddress = userAddressMapper.getMyDefaultAddress(mallUserAddress.getUserId());\n            if (defaultAddress != null && !defaultAddress.getAddressId().equals(tempAddress)) {\n                //存在默认地址且默认地址并不是当前修改的地址\n                defaultAddress.setDefaultFlag((byte) 0);\n                defaultAddress.setUpdateTime(now);\n                int updateResult = userAddressMapper.updateByPrimaryKeySelective(defaultAddress);\n                if (updateResult < 1) {\n                    //未更新成功\n                    NewBeeMallException.fail(ServiceResultEnum.DB_ERROR.getResult());\n                }\n            }\n        }\n        mallUserAddress.setUpdateTime(now);\n        return userAddressMapper.updateByPrimaryKeySelective(mallUserAddress) > 0;\n    }\n\n    @Override\n    public MallUserAddress getMallUserAddressById(Long addressId) {\n        MallUserAddress mallUserAddress = userAddressMapper.selectByPrimaryKey(addressId);\n        if (mallUserAddress == null) {\n            NewBeeMallException.fail(ServiceResultEnum.DATA_NOT_EXIST.getResult());\n        }\n        return mallUserAddress;\n    }\n\n    @Override\n    public MallUserAddress getMyDefaultAddressByUserId(Long userId) {\n        return userAddressMapper.getMyDefaultAddress(userId);\n    }\n\n    @Override\n    public Boolean deleteById(Long addressId) {\n        return userAddressMapper.deleteByPrimaryKey(addressId) > 0;\n    }\n}\n"
  },
  {
    "path": "newbee-mall-cloud-order-service/newbee-mall-cloud-order-web/src/main/resources/application.properties",
    "content": "server.port=29040\n# 服务名称\nspring.application.name=newbee-mall-cloud-order-service\n# Nacos地址\nspring.cloud.nacos.discovery.server-addr=127.0.0.1:8848\n# Nacos登录用户名(默认为nacos，生产环境一定要修改)\nspring.cloud.nacos.username=nacos\n# Nacos登录密码(默认为nacos，生产环境一定要修改)\nspring.cloud.nacos.password=nacos\n\n# datasource config (MySQL)\nspring.datasource.name=newbee-mall-cloud-order-datasource\nspring.datasource.driverClassName=com.mysql.cj.jdbc.Driver\nspring.datasource.url=jdbc:mysql://localhost:3306/newbee_mall_cloud_order_db?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=utf8&autoReconnect=true&useSSL=false\nspring.datasource.username=root\nspring.datasource.password=123456\n# 指定数据源类型\nspring.datasource.type=com.alibaba.druid.pool.DruidDataSource\n# Druid 数据源设置\n# 初始化时建立数据库连接的个数\nspring.datasource.initialSize=10\n# 最小连接池数量\nspring.datasource.minIdle=5\n# 最大连接池数量\nspring.datasource.maxActive=30\n# 配置获取连接等待超时的时间\nspring.datasource.maxWait=60000\n# 配置间隔多久才进行一次检测，检测需要关闭的空闲连接，单位是毫秒\nspring.datasource.timeBetweenEvictionRunsMillis=60000\n# 配置一个连接在池中最小生存的时间，单位是毫秒\nspring.datasource.minEvictableIdleTimeMillis=300000\n# 用来检测连接是否有效的SQL语句\nspring.datasource.validationQuery=SELECT 1\nspring.datasource.testWhileIdle=true\nspring.datasource.testOnBorrow=false\nspring.datasource.testOnReturn=false\n\n# mybatis config\nmybatis.mapper-locations=classpath:mapper/*Mapper.xml\n\n# sentinel config\nspring.cloud.sentinel.transport.port=8940\nspring.cloud.sentinel.transport.clientIp=127.0.0.1\n# 指定Sentinel控制台地址\nspring.cloud.sentinel.transport.dashboard=127.0.0.1:9113\n\n# openfeign config\nfeign.client.config.default.connectTimeout=2000\nfeign.client.config.default.readTimeout=5000\nfeign.compression.request.enabled=true\nfeign.compression.request.mime-types=text/xml,application/xml,application/json\nfeign.compression.request.min-request-size=1024\nfeign.compression.response.enabled=true\n\n# 演示需要，开启OpenFeign和当前项目中的DEBUG级别日志\n#logging.level.ltd.user.cloud.newbee.openfeign=debug\n#logging.level.ltd.goods.cloud.newbee.openfeign=debug\n#logging.level.ltd.shopcart.cloud.newbee.openfeign=debug\n#logging.level.ltd.order.cloud.newbee=debug\n\n# Sleuth采样率，取值范围为[0.1,1.0]，值越大收集越及时，但性能影响也越大\nspring.sleuth.sampler.probability=1.0\n# 每秒数据采集量，最多n条/秒Trace\nspring.sleuth.sampler.rate=500\n\nspring.zipkin.base-url=http://localhost:9411\n\nseata.enabled=true\nseata.application-id=order-server\n#事务分组配置\nseata.tx-service-group=newbee_cloud_save_order_group\nservice.vgroupMapping.newbee_cloud_save_order_group=default\n\n#连接Nacos服务中心的配置信息\nseata.registry.type=nacos\nseata.registry.nacos.application=seata-server\nseata.registry.nacos.server-addr=127.0.0.1:8848\nseata.registry.nacos.username=nacos\nseata.registry.nacos.password=nacos\nseata.registry.nacos.group=DEFAULT_GROUP\nseata.registry.nacos.cluster=default"
  },
  {
    "path": "newbee-mall-cloud-order-service/newbee-mall-cloud-order-web/src/main/resources/logback.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE configuration>\n<configuration>\n    <include resource=\"org/springframework/boot/logging/logback/defaults.xml\"/>\n    <include resource=\"org/springframework/boot/logging/logback/console-appender.xml\"/>\n    <!--应用名称-->\n    <property name=\"APP_NAME\" value=\"newbee-mall-cloud-order-service-log\"/>\n    <contextName>${APP_NAME}</contextName>\n\n    <!-- 控制台输出 -->\n    <appender name=\"CONSOLE\" class=\"ch.qos.logback.core.ConsoleAppender\">\n        <filter class=\"ch.qos.logback.classic.filter.ThresholdFilter\">\n            <level>INFO</level>\n        </filter>\n        <!-- 日志输出编码 -->\n        <encoder>\n            <pattern>${CONSOLE_LOG_PATTERN}</pattern>\n            <charset>utf8</charset>\n        </encoder>\n    </appender>\n\n    <appender name=\"LOGSTASH\" class=\"net.logstash.logback.appender.LogstashTcpSocketAppender\">\n        <!--可以访问的logstash日志收集端口-->\n        <destination>192.168.110.57:4560</destination>\n        <filter class=\"ch.qos.logback.classic.filter.ThresholdFilter\">\n            <level>INFO</level>\n        </filter>\n        <encoder charset=\"UTF-8\" class=\"net.logstash.logback.encoder.LogstashEncoder\"/>\n    </appender>\n\n    <root level=\"INFO\">\n        <appender-ref ref=\"CONSOLE\"/>\n        <appender-ref ref=\"LOGSTASH\"/>\n    </root>\n</configuration>\n\n"
  },
  {
    "path": "newbee-mall-cloud-order-service/newbee-mall-cloud-order-web/src/main/resources/mapper/MallUserAddressMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n严肃声明：\n开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\nCopyright (c) 2022 程序员十三 all rights reserved.\n版权所有，侵权必究！\n-->\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"ltd.order.cloud.newbee.dao.MallUserAddressMapper\">\n    <resultMap id=\"BaseResultMap\" type=\"ltd.order.cloud.newbee.entity.MallUserAddress\">\n        <id column=\"address_id\" jdbcType=\"BIGINT\" property=\"addressId\"/>\n        <result column=\"user_id\" jdbcType=\"BIGINT\" property=\"userId\"/>\n        <result column=\"user_name\" jdbcType=\"VARCHAR\" property=\"userName\"/>\n        <result column=\"user_phone\" jdbcType=\"VARCHAR\" property=\"userPhone\"/>\n        <result column=\"default_flag\" jdbcType=\"TINYINT\" property=\"defaultFlag\"/>\n        <result column=\"province_name\" jdbcType=\"VARCHAR\" property=\"provinceName\"/>\n        <result column=\"city_name\" jdbcType=\"VARCHAR\" property=\"cityName\"/>\n        <result column=\"region_name\" jdbcType=\"VARCHAR\" property=\"regionName\"/>\n        <result column=\"detail_address\" jdbcType=\"VARCHAR\" property=\"detailAddress\"/>\n        <result column=\"is_deleted\" jdbcType=\"TINYINT\" property=\"isDeleted\"/>\n        <result column=\"create_time\" jdbcType=\"TIMESTAMP\" property=\"createTime\"/>\n        <result column=\"update_time\" jdbcType=\"TIMESTAMP\" property=\"updateTime\"/>\n    </resultMap>\n    <sql id=\"Base_Column_List\">\n    address_id, user_id, user_name, user_phone, default_flag, province_name, city_name, \n    region_name, detail_address, is_deleted, create_time, update_time\n  </sql>\n    <select id=\"selectByPrimaryKey\" parameterType=\"java.lang.Long\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"Base_Column_List\"/>\n        from tb_newbee_mall_user_address\n        where address_id = #{addressId,jdbcType=BIGINT} and is_deleted = 0\n    </select>\n    <select id=\"getMyDefaultAddress\" parameterType=\"java.lang.Long\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"Base_Column_List\"/>\n        from tb_newbee_mall_user_address\n        where user_id = #{userId} and default_flag =1 and is_deleted = 0 limit 1\n    </select>\n    <select id=\"findMyAddressList\" parameterType=\"java.lang.Long\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"Base_Column_List\"/>\n        from tb_newbee_mall_user_address\n        where user_id = #{userId} and is_deleted = 0\n        order by address_id desc\n        limit 20 <!-- 最多返回20条 -->\n    </select>\n    <update id=\"deleteByPrimaryKey\" parameterType=\"java.lang.Long\">\n    update tb_newbee_mall_user_address set is_deleted = 1\n    where address_id = #{addressId,jdbcType=BIGINT}\n  </update>\n    <insert id=\"insert\" parameterType=\"ltd.order.cloud.newbee.entity.MallUserAddress\">\n    insert into tb_newbee_mall_user_address (address_id, user_id, user_name, \n      user_phone, default_flag, province_name, \n      city_name, region_name, detail_address, \n      is_deleted, create_time, update_time\n      )\n    values (#{addressId,jdbcType=BIGINT}, #{userId,jdbcType=BIGINT}, #{userName,jdbcType=VARCHAR}, \n      #{userPhone,jdbcType=VARCHAR}, #{defaultFlag,jdbcType=TINYINT}, #{provinceName,jdbcType=VARCHAR}, \n      #{cityName,jdbcType=VARCHAR}, #{regionName,jdbcType=VARCHAR}, #{detailAddress,jdbcType=VARCHAR}, \n      #{isDeleted,jdbcType=TINYINT}, #{createTime,jdbcType=TIMESTAMP}, #{updateTime,jdbcType=TIMESTAMP}\n      )\n  </insert>\n    <insert id=\"insertSelective\" parameterType=\"ltd.order.cloud.newbee.entity.MallUserAddress\">\n        insert into tb_newbee_mall_user_address\n        <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\n            <if test=\"addressId != null\">\n                address_id,\n            </if>\n            <if test=\"userId != null\">\n                user_id,\n            </if>\n            <if test=\"userName != null\">\n                user_name,\n            </if>\n            <if test=\"userPhone != null\">\n                user_phone,\n            </if>\n            <if test=\"defaultFlag != null\">\n                default_flag,\n            </if>\n            <if test=\"provinceName != null\">\n                province_name,\n            </if>\n            <if test=\"cityName != null\">\n                city_name,\n            </if>\n            <if test=\"regionName != null\">\n                region_name,\n            </if>\n            <if test=\"detailAddress != null\">\n                detail_address,\n            </if>\n            <if test=\"isDeleted != null\">\n                is_deleted,\n            </if>\n            <if test=\"createTime != null\">\n                create_time,\n            </if>\n            <if test=\"updateTime != null\">\n                update_time,\n            </if>\n        </trim>\n        <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n            <if test=\"addressId != null\">\n                #{addressId,jdbcType=BIGINT},\n            </if>\n            <if test=\"userId != null\">\n                #{userId,jdbcType=BIGINT},\n            </if>\n            <if test=\"userName != null\">\n                #{userName,jdbcType=VARCHAR},\n            </if>\n            <if test=\"userPhone != null\">\n                #{userPhone,jdbcType=VARCHAR},\n            </if>\n            <if test=\"defaultFlag != null\">\n                #{defaultFlag,jdbcType=TINYINT},\n            </if>\n            <if test=\"provinceName != null\">\n                #{provinceName,jdbcType=VARCHAR},\n            </if>\n            <if test=\"cityName != null\">\n                #{cityName,jdbcType=VARCHAR},\n            </if>\n            <if test=\"regionName != null\">\n                #{regionName,jdbcType=VARCHAR},\n            </if>\n            <if test=\"detailAddress != null\">\n                #{detailAddress,jdbcType=VARCHAR},\n            </if>\n            <if test=\"isDeleted != null\">\n                #{isDeleted,jdbcType=TINYINT},\n            </if>\n            <if test=\"createTime != null\">\n                #{createTime,jdbcType=TIMESTAMP},\n            </if>\n            <if test=\"updateTime != null\">\n                #{updateTime,jdbcType=TIMESTAMP},\n            </if>\n        </trim>\n    </insert>\n    <update id=\"updateByPrimaryKeySelective\" parameterType=\"ltd.order.cloud.newbee.entity.MallUserAddress\">\n        update tb_newbee_mall_user_address\n        <set>\n            <if test=\"userId != null\">\n                user_id = #{userId,jdbcType=BIGINT},\n            </if>\n            <if test=\"userName != null\">\n                user_name = #{userName,jdbcType=VARCHAR},\n            </if>\n            <if test=\"userPhone != null\">\n                user_phone = #{userPhone,jdbcType=VARCHAR},\n            </if>\n            <if test=\"defaultFlag != null\">\n                default_flag = #{defaultFlag,jdbcType=TINYINT},\n            </if>\n            <if test=\"provinceName != null\">\n                province_name = #{provinceName,jdbcType=VARCHAR},\n            </if>\n            <if test=\"cityName != null\">\n                city_name = #{cityName,jdbcType=VARCHAR},\n            </if>\n            <if test=\"regionName != null\">\n                region_name = #{regionName,jdbcType=VARCHAR},\n            </if>\n            <if test=\"detailAddress != null\">\n                detail_address = #{detailAddress,jdbcType=VARCHAR},\n            </if>\n            <if test=\"isDeleted != null\">\n                is_deleted = #{isDeleted,jdbcType=TINYINT},\n            </if>\n            <if test=\"createTime != null\">\n                create_time = #{createTime,jdbcType=TIMESTAMP},\n            </if>\n            <if test=\"updateTime != null\">\n                update_time = #{updateTime,jdbcType=TIMESTAMP},\n            </if>\n        </set>\n        where address_id = #{addressId,jdbcType=BIGINT}\n    </update>\n    <update id=\"updateByPrimaryKey\" parameterType=\"ltd.order.cloud.newbee.entity.MallUserAddress\">\n    update tb_newbee_mall_user_address\n    set user_id = #{userId,jdbcType=BIGINT},\n      user_name = #{userName,jdbcType=VARCHAR},\n      user_phone = #{userPhone,jdbcType=VARCHAR},\n      default_flag = #{defaultFlag,jdbcType=TINYINT},\n      province_name = #{provinceName,jdbcType=VARCHAR},\n      city_name = #{cityName,jdbcType=VARCHAR},\n      region_name = #{regionName,jdbcType=VARCHAR},\n      detail_address = #{detailAddress,jdbcType=VARCHAR},\n      is_deleted = #{isDeleted,jdbcType=TINYINT},\n      create_time = #{createTime,jdbcType=TIMESTAMP},\n      update_time = #{updateTime,jdbcType=TIMESTAMP}\n    where address_id = #{addressId,jdbcType=BIGINT}\n  </update>\n</mapper>"
  },
  {
    "path": "newbee-mall-cloud-order-service/newbee-mall-cloud-order-web/src/main/resources/mapper/NewBeeMallOrderAddressMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n严肃声明：\n开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\nCopyright (c) 2022 程序员十三 all rights reserved.\n版权所有，侵权必究！\n-->\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"ltd.order.cloud.newbee.dao.NewBeeMallOrderAddressMapper\">\n  <resultMap id=\"BaseResultMap\" type=\"ltd.order.cloud.newbee.entity.NewBeeMallOrderAddress\">\n    <id column=\"order_id\" jdbcType=\"BIGINT\" property=\"orderId\" />\n    <result column=\"user_name\" jdbcType=\"VARCHAR\" property=\"userName\" />\n    <result column=\"user_phone\" jdbcType=\"VARCHAR\" property=\"userPhone\" />\n    <result column=\"province_name\" jdbcType=\"VARCHAR\" property=\"provinceName\" />\n    <result column=\"city_name\" jdbcType=\"VARCHAR\" property=\"cityName\" />\n    <result column=\"region_name\" jdbcType=\"VARCHAR\" property=\"regionName\" />\n    <result column=\"detail_address\" jdbcType=\"VARCHAR\" property=\"detailAddress\" />\n  </resultMap>\n  <sql id=\"Base_Column_List\">\n    order_id, user_name, user_phone, province_name, city_name, region_name, detail_address\n  </sql>\n  <select id=\"selectByPrimaryKey\" parameterType=\"java.lang.Long\" resultMap=\"BaseResultMap\">\n    select \n    <include refid=\"Base_Column_List\" />\n    from tb_newbee_mall_order_address\n    where order_id = #{orderId,jdbcType=BIGINT}\n  </select>\n  <delete id=\"deleteByPrimaryKey\" parameterType=\"java.lang.Long\">\n    delete from tb_newbee_mall_order_address\n    where order_id = #{orderId,jdbcType=BIGINT}\n  </delete>\n  <insert id=\"insert\" parameterType=\"ltd.order.cloud.newbee.entity.NewBeeMallOrderAddress\">\n    insert into tb_newbee_mall_order_address (order_id, user_name, user_phone, \n      province_name, city_name, region_name, \n      detail_address)\n    values (#{orderId,jdbcType=BIGINT}, #{userName,jdbcType=VARCHAR}, #{userPhone,jdbcType=VARCHAR}, \n      #{provinceName,jdbcType=VARCHAR}, #{cityName,jdbcType=VARCHAR}, #{regionName,jdbcType=VARCHAR}, \n      #{detailAddress,jdbcType=VARCHAR})\n  </insert>\n  <insert id=\"insertSelective\" parameterType=\"ltd.order.cloud.newbee.entity.NewBeeMallOrderAddress\">\n    insert into tb_newbee_mall_order_address\n    <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"orderId != null\">\n        order_id,\n      </if>\n      <if test=\"userName != null\">\n        user_name,\n      </if>\n      <if test=\"userPhone != null\">\n        user_phone,\n      </if>\n      <if test=\"provinceName != null\">\n        province_name,\n      </if>\n      <if test=\"cityName != null\">\n        city_name,\n      </if>\n      <if test=\"regionName != null\">\n        region_name,\n      </if>\n      <if test=\"detailAddress != null\">\n        detail_address,\n      </if>\n    </trim>\n    <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n      <if test=\"orderId != null\">\n        #{orderId,jdbcType=BIGINT},\n      </if>\n      <if test=\"userName != null\">\n        #{userName,jdbcType=VARCHAR},\n      </if>\n      <if test=\"userPhone != null\">\n        #{userPhone,jdbcType=VARCHAR},\n      </if>\n      <if test=\"provinceName != null\">\n        #{provinceName,jdbcType=VARCHAR},\n      </if>\n      <if test=\"cityName != null\">\n        #{cityName,jdbcType=VARCHAR},\n      </if>\n      <if test=\"regionName != null\">\n        #{regionName,jdbcType=VARCHAR},\n      </if>\n      <if test=\"detailAddress != null\">\n        #{detailAddress,jdbcType=VARCHAR},\n      </if>\n    </trim>\n  </insert>\n  <update id=\"updateByPrimaryKeySelective\" parameterType=\"ltd.order.cloud.newbee.entity.NewBeeMallOrderAddress\">\n    update tb_newbee_mall_order_address\n    <set>\n      <if test=\"userName != null\">\n        user_name = #{userName,jdbcType=VARCHAR},\n      </if>\n      <if test=\"userPhone != null\">\n        user_phone = #{userPhone,jdbcType=VARCHAR},\n      </if>\n      <if test=\"provinceName != null\">\n        province_name = #{provinceName,jdbcType=VARCHAR},\n      </if>\n      <if test=\"cityName != null\">\n        city_name = #{cityName,jdbcType=VARCHAR},\n      </if>\n      <if test=\"regionName != null\">\n        region_name = #{regionName,jdbcType=VARCHAR},\n      </if>\n      <if test=\"detailAddress != null\">\n        detail_address = #{detailAddress,jdbcType=VARCHAR},\n      </if>\n    </set>\n    where order_id = #{orderId,jdbcType=BIGINT}\n  </update>\n  <update id=\"updateByPrimaryKey\" parameterType=\"ltd.order.cloud.newbee.entity.NewBeeMallOrderAddress\">\n    update tb_newbee_mall_order_address\n    set user_name = #{userName,jdbcType=VARCHAR},\n      user_phone = #{userPhone,jdbcType=VARCHAR},\n      province_name = #{provinceName,jdbcType=VARCHAR},\n      city_name = #{cityName,jdbcType=VARCHAR},\n      region_name = #{regionName,jdbcType=VARCHAR},\n      detail_address = #{detailAddress,jdbcType=VARCHAR}\n    where order_id = #{orderId,jdbcType=BIGINT}\n  </update>\n</mapper>"
  },
  {
    "path": "newbee-mall-cloud-order-service/newbee-mall-cloud-order-web/src/main/resources/mapper/NewBeeMallOrderItemMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n严肃声明：\n开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\nCopyright (c) 2022 程序员十三 all rights reserved.\n版权所有，侵权必究！\n-->\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"ltd.order.cloud.newbee.dao.NewBeeMallOrderItemMapper\">\n    <resultMap id=\"BaseResultMap\" type=\"ltd.order.cloud.newbee.entity.NewBeeMallOrderItem\">\n        <id column=\"order_item_id\" jdbcType=\"BIGINT\" property=\"orderItemId\"/>\n        <result column=\"order_id\" jdbcType=\"BIGINT\" property=\"orderId\"/>\n        <result column=\"goods_id\" jdbcType=\"BIGINT\" property=\"goodsId\"/>\n        <result column=\"goods_name\" jdbcType=\"VARCHAR\" property=\"goodsName\"/>\n        <result column=\"goods_cover_img\" jdbcType=\"VARCHAR\" property=\"goodsCoverImg\"/>\n        <result column=\"selling_price\" jdbcType=\"INTEGER\" property=\"sellingPrice\"/>\n        <result column=\"goods_count\" jdbcType=\"INTEGER\" property=\"goodsCount\"/>\n        <result column=\"create_time\" jdbcType=\"TIMESTAMP\" property=\"createTime\"/>\n    </resultMap>\n    <sql id=\"Base_Column_List\">\n    order_item_id, order_id, goods_id, goods_name, goods_cover_img, selling_price, goods_count, \n    create_time\n  </sql>\n    <select id=\"selectByPrimaryKey\" parameterType=\"java.lang.Long\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"Base_Column_List\"/>\n        from tb_newbee_mall_order_item\n        where order_item_id = #{orderItemId,jdbcType=BIGINT}\n    </select>\n    <select id=\"selectByOrderId\" parameterType=\"java.lang.Long\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"Base_Column_List\"/>\n        from tb_newbee_mall_order_item\n        where order_id = #{orderItemId,jdbcType=BIGINT}\n    </select>\n    <select id=\"selectByOrderIds\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"Base_Column_List\"/>\n        from tb_newbee_mall_order_item\n        where order_id\n        in\n        <foreach item=\"id\" collection=\"orderIds\" open=\"(\" separator=\",\" close=\")\">\n            #{id}\n        </foreach>\n    </select>\n    <delete id=\"deleteByPrimaryKey\" parameterType=\"java.lang.Long\">\n    delete from tb_newbee_mall_order_item\n    where order_item_id = #{orderItemId,jdbcType=BIGINT}\n  </delete>\n    <insert id=\"insertBatch\" parameterType=\"ltd.order.cloud.newbee.entity.NewBeeMallOrderItem\">\n        insert into tb_newbee_mall_order_item (order_id, goods_id,\n        goods_name, goods_cover_img, selling_price,\n        goods_count)\n        values\n        <foreach collection=\"orderItems\" item=\"orderItem\" separator=\",\">\n            (#{orderItem.orderId,jdbcType=BIGINT}, #{orderItem.goodsId,jdbcType=BIGINT},\n            #{orderItem.goodsName,jdbcType=VARCHAR}, #{orderItem.goodsCoverImg,jdbcType=VARCHAR},\n            #{orderItem.sellingPrice,jdbcType=INTEGER},\n            #{orderItem.goodsCount,jdbcType=INTEGER})\n        </foreach>\n    </insert>\n    <insert id=\"insert\" parameterType=\"ltd.order.cloud.newbee.entity.NewBeeMallOrderItem\">\n    insert into tb_newbee_mall_order_item (order_item_id, order_id, goods_id,\n      goods_name, goods_cover_img, selling_price,\n      goods_count, create_time)\n    values (#{orderItemId,jdbcType=BIGINT}, #{orderId,jdbcType=BIGINT}, #{goodsId,jdbcType=BIGINT},\n      #{goodsName,jdbcType=VARCHAR}, #{goodsCoverImg,jdbcType=VARCHAR}, #{sellingPrice,jdbcType=INTEGER},\n      #{goodsCount,jdbcType=INTEGER}, #{createTime,jdbcType=TIMESTAMP})\n  </insert>\n    <insert id=\"insertSelective\" parameterType=\"ltd.order.cloud.newbee.entity.NewBeeMallOrderItem\">\n        insert into tb_newbee_mall_order_item\n        <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\n            <if test=\"orderItemId != null\">\n                order_item_id,\n            </if>\n            <if test=\"orderId != null\">\n                order_id,\n            </if>\n            <if test=\"goodsId != null\">\n                goods_id,\n            </if>\n            <if test=\"goodsName != null\">\n                goods_name,\n            </if>\n            <if test=\"goodsCoverImg != null\">\n                goods_cover_img,\n            </if>\n            <if test=\"sellingPrice != null\">\n                selling_price,\n            </if>\n            <if test=\"goodsCount != null\">\n                goods_count,\n            </if>\n            <if test=\"createTime != null\">\n                create_time,\n            </if>\n        </trim>\n        <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n            <if test=\"orderItemId != null\">\n                #{orderItemId,jdbcType=BIGINT},\n            </if>\n            <if test=\"orderId != null\">\n                #{orderId,jdbcType=BIGINT},\n            </if>\n            <if test=\"goodsId != null\">\n                #{goodsId,jdbcType=BIGINT},\n            </if>\n            <if test=\"goodsName != null\">\n                #{goodsName,jdbcType=VARCHAR},\n            </if>\n            <if test=\"goodsCoverImg != null\">\n                #{goodsCoverImg,jdbcType=VARCHAR},\n            </if>\n            <if test=\"sellingPrice != null\">\n                #{sellingPrice,jdbcType=INTEGER},\n            </if>\n            <if test=\"goodsCount != null\">\n                #{goodsCount,jdbcType=INTEGER},\n            </if>\n            <if test=\"createTime != null\">\n                #{createTime,jdbcType=TIMESTAMP},\n            </if>\n        </trim>\n    </insert>\n    <update id=\"updateByPrimaryKeySelective\" parameterType=\"ltd.order.cloud.newbee.entity.NewBeeMallOrderItem\">\n        update tb_newbee_mall_order_item\n        <set>\n            <if test=\"orderId != null\">\n                order_id = #{orderId,jdbcType=BIGINT},\n            </if>\n            <if test=\"goodsId != null\">\n                goods_id = #{goodsId,jdbcType=BIGINT},\n            </if>\n            <if test=\"goodsName != null\">\n                goods_name = #{goodsName,jdbcType=VARCHAR},\n            </if>\n            <if test=\"goodsCoverImg != null\">\n                goods_cover_img = #{goodsCoverImg,jdbcType=VARCHAR},\n            </if>\n            <if test=\"sellingPrice != null\">\n                selling_price = #{sellingPrice,jdbcType=INTEGER},\n            </if>\n            <if test=\"goodsCount != null\">\n                goods_count = #{goodsCount,jdbcType=INTEGER},\n            </if>\n            <if test=\"createTime != null\">\n                create_time = #{createTime,jdbcType=TIMESTAMP},\n            </if>\n        </set>\n        where order_item_id = #{orderItemId,jdbcType=BIGINT}\n    </update>\n    <update id=\"updateByPrimaryKey\" parameterType=\"ltd.order.cloud.newbee.entity.NewBeeMallOrderItem\">\n    update tb_newbee_mall_order_item\n    set order_id = #{orderId,jdbcType=BIGINT},\n      goods_id = #{goodsId,jdbcType=BIGINT},\n      goods_name = #{goodsName,jdbcType=VARCHAR},\n      goods_cover_img = #{goodsCoverImg,jdbcType=VARCHAR},\n      selling_price = #{sellingPrice,jdbcType=INTEGER},\n      goods_count = #{goodsCount,jdbcType=INTEGER},\n      create_time = #{createTime,jdbcType=TIMESTAMP}\n    where order_item_id = #{orderItemId,jdbcType=BIGINT}\n  </update>\n</mapper>"
  },
  {
    "path": "newbee-mall-cloud-order-service/newbee-mall-cloud-order-web/src/main/resources/mapper/NewBeeMallOrderMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n严肃声明：\n开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\nCopyright (c) 2022 程序员十三 all rights reserved.\n版权所有，侵权必究！\n-->\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"ltd.order.cloud.newbee.dao.NewBeeMallOrderMapper\">\n    <resultMap id=\"BaseResultMap\" type=\"ltd.order.cloud.newbee.entity.NewBeeMallOrder\">\n        <id column=\"order_id\" jdbcType=\"BIGINT\" property=\"orderId\"/>\n        <result column=\"order_no\" jdbcType=\"VARCHAR\" property=\"orderNo\"/>\n        <result column=\"user_id\" jdbcType=\"BIGINT\" property=\"userId\"/>\n        <result column=\"total_price\" jdbcType=\"INTEGER\" property=\"totalPrice\"/>\n        <result column=\"pay_status\" jdbcType=\"TINYINT\" property=\"payStatus\"/>\n        <result column=\"pay_type\" jdbcType=\"TINYINT\" property=\"payType\"/>\n        <result column=\"pay_time\" jdbcType=\"TIMESTAMP\" property=\"payTime\"/>\n        <result column=\"order_status\" jdbcType=\"TINYINT\" property=\"orderStatus\"/>\n        <result column=\"extra_info\" jdbcType=\"VARCHAR\" property=\"extraInfo\"/>\n        <result column=\"is_deleted\" jdbcType=\"TINYINT\" property=\"isDeleted\"/>\n        <result column=\"create_time\" jdbcType=\"TIMESTAMP\" property=\"createTime\"/>\n        <result column=\"update_time\" jdbcType=\"TIMESTAMP\" property=\"updateTime\"/>\n    </resultMap>\n    <sql id=\"Base_Column_List\">\n    order_id, order_no, user_id, total_price, pay_status, pay_type, pay_time, order_status,\n    extra_info, is_deleted, create_time, update_time\n  </sql>\n    <select id=\"selectByPrimaryKey\" parameterType=\"java.lang.Long\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"Base_Column_List\"/>\n        from tb_newbee_mall_order\n        where order_id = #{orderId,jdbcType=BIGINT}\n    </select>\n    <select id=\"selectByOrderNo\" parameterType=\"java.lang.String\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"Base_Column_List\"/>\n        from tb_newbee_mall_order\n        where order_no = #{orderNo,jdbcType=VARCHAR} and is_deleted=0 limit 1\n    </select>\n    <select id=\"selectByPrimaryKeys\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"Base_Column_List\"/>\n        from tb_newbee_mall_order\n        where order_id in\n        <foreach collection=\"orderIds\" item=\"item\" index=\"index\"\n                 open=\"(\" separator=\",\" close=\")\">#{item}\n        </foreach>\n    </select>\n    <select id=\"findNewBeeMallOrderList\" parameterType=\"Map\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"Base_Column_List\"/>\n        from tb_newbee_mall_order\n        <where>\n            <if test=\"orderNo!=null and orderNo!=''\">\n                and order_no = #{orderNo}\n            </if>\n            <if test=\"userId!=null and userId!=''\">\n                and user_id = #{userId}\n            </if>\n            <if test=\"payType!=null and payType!=''\">\n                and pay_type = #{payType}\n            </if>\n            <if test=\"orderStatus!=null\">\n                and order_status = #{orderStatus}\n            </if>\n            <if test=\"isDeleted!=null and isDeleted!=''\">\n                and is_deleted = #{isDeleted}\n            </if>\n            <if test=\"startTime != null and startTime.trim() != ''\">\n                and create_time &gt; #{startTime}\n            </if>\n            <if test=\"endTime != null and endTime.trim() != ''\">\n                and create_time &lt; #{endTime}\n            </if>\n        </where>\n        order by create_time desc\n        <if test=\"start!=null and limit!=null\">\n            limit #{start},#{limit}\n        </if>\n    </select>\n\n    <select id=\"getTotalNewBeeMallOrders\" parameterType=\"Map\" resultType=\"int\">\n        select count(*) from tb_newbee_mall_order\n        <where>\n            <if test=\"orderNo!=null and orderNo!=''\">\n                and order_no = #{orderNo}\n            </if>\n            <if test=\"userId!=null and userId!=''\">\n                and user_id = #{userId}\n            </if>\n            <if test=\"payType!=null and payType!=''\">\n                and pay_type = #{payType}\n            </if>\n            <if test=\"orderStatus!=null\">\n                and order_status = #{orderStatus}\n            </if>\n            <if test=\"isDeleted!=null and isDeleted!=''\">\n                and is_deleted = #{isDeleted}\n            </if>\n            <if test=\"startTime != null and startTime.trim() != ''\">\n                and create_time &gt; #{startTime}\n            </if>\n            <if test=\"endTime != null and endTime.trim() != ''\">\n                and create_time &lt; #{endTime}\n            </if>\n        </where>\n    </select>\n    <update id=\"deleteByPrimaryKey\" parameterType=\"java.lang.Long\">\n    update tb_newbee_mall_order set is_deleted=1\n    where order_id = #{orderId,jdbcType=BIGINT} and is_deleted=0\n  </update>\n    <insert id=\"insert\" parameterType=\"ltd.order.cloud.newbee.entity.NewBeeMallOrder\">\n    insert into tb_newbee_mall_order (order_id, order_no, user_id, \n      total_price, pay_status, pay_type, \n      pay_time, order_status, extra_info, \n      is_deleted, create_time, update_time\n      )\n    values (#{orderId,jdbcType=BIGINT}, #{orderNo,jdbcType=VARCHAR}, #{userId,jdbcType=BIGINT}, \n      #{totalPrice,jdbcType=INTEGER}, #{payStatus,jdbcType=TINYINT}, #{payType,jdbcType=TINYINT}, \n      #{payTime,jdbcType=TIMESTAMP}, #{orderStatus,jdbcType=TINYINT}, #{extraInfo,jdbcType=VARCHAR}, \n      #{isDeleted,jdbcType=TINYINT}, #{createTime,jdbcType=TIMESTAMP}, #{updateTime,jdbcType=TIMESTAMP}\n      )\n  </insert>\n    <insert id=\"insertSelective\" useGeneratedKeys=\"true\" keyProperty=\"orderId\"\n            parameterType=\"ltd.order.cloud.newbee.entity.NewBeeMallOrder\">\n        insert into tb_newbee_mall_order\n        <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\n            <if test=\"orderId != null\">\n                order_id,\n            </if>\n            <if test=\"orderNo != null\">\n                order_no,\n            </if>\n            <if test=\"userId != null\">\n                user_id,\n            </if>\n            <if test=\"totalPrice != null\">\n                total_price,\n            </if>\n            <if test=\"payStatus != null\">\n                pay_status,\n            </if>\n            <if test=\"payType != null\">\n                pay_type,\n            </if>\n            <if test=\"payTime != null\">\n                pay_time,\n            </if>\n            <if test=\"orderStatus != null\">\n                order_status,\n            </if>\n            <if test=\"extraInfo != null\">\n                extra_info,\n            </if>\n            <if test=\"isDeleted != null\">\n                is_deleted,\n            </if>\n            <if test=\"createTime != null\">\n                create_time,\n            </if>\n            <if test=\"updateTime != null\">\n                update_time,\n            </if>\n        </trim>\n        <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n            <if test=\"orderId != null\">\n                #{orderId,jdbcType=BIGINT},\n            </if>\n            <if test=\"orderNo != null\">\n                #{orderNo,jdbcType=VARCHAR},\n            </if>\n            <if test=\"userId != null\">\n                #{userId,jdbcType=BIGINT},\n            </if>\n            <if test=\"totalPrice != null\">\n                #{totalPrice,jdbcType=INTEGER},\n            </if>\n            <if test=\"payStatus != null\">\n                #{payStatus,jdbcType=TINYINT},\n            </if>\n            <if test=\"payType != null\">\n                #{payType,jdbcType=TINYINT},\n            </if>\n            <if test=\"payTime != null\">\n                #{payTime,jdbcType=TIMESTAMP},\n            </if>\n            <if test=\"orderStatus != null\">\n                #{orderStatus,jdbcType=TINYINT},\n            </if>\n            <if test=\"extraInfo != null\">\n                #{extraInfo,jdbcType=VARCHAR},\n            </if>\n            <if test=\"isDeleted != null\">\n                #{isDeleted,jdbcType=TINYINT},\n            </if>\n            <if test=\"createTime != null\">\n                #{createTime,jdbcType=TIMESTAMP},\n            </if>\n            <if test=\"updateTime != null\">\n                #{updateTime,jdbcType=TIMESTAMP},\n            </if>\n        </trim>\n    </insert>\n    <update id=\"checkDone\">\n        update tb_newbee_mall_order\n        set order_status = 2,update_time = now()\n        where order_id in\n        <foreach collection=\"orderIds\" item=\"item\" index=\"index\"\n                 open=\"(\" separator=\",\" close=\")\">#{item}\n        </foreach>\n    </update>\n    <update id=\"checkOut\">\n        update tb_newbee_mall_order\n        set order_status = 3,update_time = now()\n        where order_id in\n        <foreach collection=\"orderIds\" item=\"item\" index=\"index\"\n                 open=\"(\" separator=\",\" close=\")\">#{item}\n        </foreach>\n    </update>\n    <update id=\"closeOrder\">\n        update tb_newbee_mall_order\n        set order_status = #{orderStatus},update_time = now()\n        where order_id in\n        <foreach collection=\"orderIds\" item=\"item\" index=\"index\"\n                 open=\"(\" separator=\",\" close=\")\">#{item}\n        </foreach>\n    </update>\n    <update id=\"updateByPrimaryKeySelective\" parameterType=\"ltd.order.cloud.newbee.entity.NewBeeMallOrder\">\n        update tb_newbee_mall_order\n        <set>\n            <if test=\"orderNo != null\">\n                order_no = #{orderNo,jdbcType=VARCHAR},\n            </if>\n            <if test=\"userId != null\">\n                user_id = #{userId,jdbcType=BIGINT},\n            </if>\n            <if test=\"totalPrice != null\">\n                total_price = #{totalPrice,jdbcType=INTEGER},\n            </if>\n            <if test=\"payStatus != null\">\n                pay_status = #{payStatus,jdbcType=TINYINT},\n            </if>\n            <if test=\"payType != null\">\n                pay_type = #{payType,jdbcType=TINYINT},\n            </if>\n            <if test=\"payTime != null\">\n                pay_time = #{payTime,jdbcType=TIMESTAMP},\n            </if>\n            <if test=\"orderStatus != null\">\n                order_status = #{orderStatus,jdbcType=TINYINT},\n            </if>\n            <if test=\"extraInfo != null\">\n                extra_info = #{extraInfo,jdbcType=VARCHAR},\n            </if>\n            <if test=\"isDeleted != null\">\n                is_deleted = #{isDeleted,jdbcType=TINYINT},\n            </if>\n            <if test=\"createTime != null\">\n                create_time = #{createTime,jdbcType=TIMESTAMP},\n            </if>\n            <if test=\"updateTime != null\">\n                update_time = #{updateTime,jdbcType=TIMESTAMP},\n            </if>\n        </set>\n        where order_id = #{orderId,jdbcType=BIGINT}\n    </update>\n    <update id=\"updateByPrimaryKey\" parameterType=\"ltd.order.cloud.newbee.entity.NewBeeMallOrder\">\n    update tb_newbee_mall_order\n    set order_no = #{orderNo,jdbcType=VARCHAR},\n      user_id = #{userId,jdbcType=BIGINT},\n      total_price = #{totalPrice,jdbcType=INTEGER},\n      pay_status = #{payStatus,jdbcType=TINYINT},\n      pay_type = #{payType,jdbcType=TINYINT},\n      pay_time = #{payTime,jdbcType=TIMESTAMP},\n      order_status = #{orderStatus,jdbcType=TINYINT},\n      extra_info = #{extraInfo,jdbcType=VARCHAR},\n      is_deleted = #{isDeleted,jdbcType=TINYINT},\n      create_time = #{createTime,jdbcType=TIMESTAMP},\n      update_time = #{updateTime,jdbcType=TIMESTAMP}\n    where order_id = #{orderId,jdbcType=BIGINT}\n  </update>\n</mapper>"
  },
  {
    "path": "newbee-mall-cloud-order-service/pom.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--  @author 程序员十三\n      @qq交流群 791509631\n      @email 2449207463@qq.com\n      @link https://github.com/newbee-ltd -->\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd\">\n    <modelVersion>4.0.0</modelVersion>\n    <groupId>ltd.newbee.cloud</groupId>\n    <artifactId>newbee-mall-cloud-order-service</artifactId>\n    <version>0.0.1-SNAPSHOT</version>\n    <packaging>pom</packaging>\n    <name>newbee-mall-cloud-order-service</name>\n    <description>订单模块</description>\n\n    <parent>\n        <groupId>ltd.newbee.cloud</groupId>\n        <artifactId>newbee-mall-cloud</artifactId>\n        <version>0.0.1-SNAPSHOT</version>\n    </parent>\n\n    <properties>\n        <java.version>1.8</java.version>\n    </properties>\n\n    <modules>\n        <module>newbee-mall-cloud-order-web</module>\n        <module>newbee-mall-cloud-order-api</module>\n    </modules>\n\n    <dependencies>\n\n    </dependencies>\n    <!--  @author 程序员十三\n      @qq交流群 791509631\n      @email 2449207463@qq.com\n      @link https://github.com/newbee-ltd -->\n</project>\n"
  },
  {
    "path": "newbee-mall-cloud-recommend-service/newbee-mall-cloud-recommend-api/pom.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--  @author 程序员十三\n      @qq交流群 791509631\n      @email 2449207463@qq.com\n      @link https://github.com/newbee-ltd -->\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd\">\n    <modelVersion>4.0.0</modelVersion>\n    <groupId>ltd.recommend.newbee.cloud</groupId>\n    <artifactId>newbee-mall-cloud-recommend-api</artifactId>\n    <packaging>jar</packaging>\n    <version>0.0.1-SNAPSHOT</version>\n    <name>newbee-mall-cloud-recommend-api</name>\n    <description>推荐服务openfeign</description>\n\n    <parent>\n        <groupId>ltd.newbee.cloud</groupId>\n        <artifactId>newbee-mall-cloud-recommend-service</artifactId>\n        <version>0.0.1-SNAPSHOT</version>\n    </parent>\n\n    <properties>\n        <java.version>1.8</java.version>\n    </properties>\n\n    <dependencies>\n\n        <dependency>\n            <groupId>org.springframework.cloud</groupId>\n            <artifactId>spring-cloud-starter-openfeign</artifactId>\n        </dependency>\n\n        <dependency>\n            <groupId>ltd.newbee.cloud</groupId>\n            <artifactId>newbee-mall-cloud-common</artifactId>\n            <version>0.0.1-SNAPSHOT</version>\n        </dependency>\n\n    </dependencies>\n    <!--  @author 程序员十三\n      @qq交流群 791509631\n      @email 2449207463@qq.com\n      @link https://github.com/newbee-ltd -->\n</project>\n"
  },
  {
    "path": "newbee-mall-cloud-recommend-service/newbee-mall-cloud-recommend-web/pom.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--  @author 程序员十三\n      @qq交流群 791509631\n      @email 2449207463@qq.com\n      @link https://github.com/newbee-ltd -->\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd\">\n    <modelVersion>4.0.0</modelVersion>\n    <groupId>ltd.recommend.newbee.cloud</groupId>\n    <artifactId>newbee-mall-cloud-recommend-web</artifactId>\n    <version>0.0.1-SNAPSHOT</version>\n    <name>newbee-mall-cloud-recommend-web</name>\n    <description>推荐服务</description>\n\n    <parent>\n        <groupId>ltd.newbee.cloud</groupId>\n        <artifactId>newbee-mall-cloud-recommend-service</artifactId>\n        <version>0.0.1-SNAPSHOT</version>\n    </parent>\n\n    <properties>\n        <java.version>1.8</java.version>\n    </properties>\n\n    <dependencies>\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter-web</artifactId>\n        </dependency>\n\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter-test</artifactId>\n            <scope>test</scope>\n        </dependency>\n\n        <dependency>\n            <groupId>com.alibaba.cloud</groupId>\n            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>\n        </dependency>\n\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter-validation</artifactId>\n        </dependency>\n\n        <dependency>\n            <groupId>org.mybatis.spring.boot</groupId>\n            <artifactId>mybatis-spring-boot-starter</artifactId>\n        </dependency>\n\n        <dependency>\n            <groupId>org.projectlombok</groupId>\n            <artifactId>lombok</artifactId>\n            <version>${lombok.version}</version>\n            <scope>provided</scope>\n        </dependency>\n\n        <dependency>\n            <groupId>io.springfox</groupId>\n            <artifactId>springfox-boot-starter</artifactId>\n        </dependency>\n\n        <dependency>\n            <groupId>mysql</groupId>\n            <artifactId>mysql-connector-java</artifactId>\n            <scope>runtime</scope>\n        </dependency>\n\n        <dependency>\n            <groupId>ltd.newbee.cloud</groupId>\n            <artifactId>newbee-mall-cloud-common</artifactId>\n            <version>0.0.1-SNAPSHOT</version>\n        </dependency>\n\n        <dependency>\n            <groupId>org.springframework.cloud</groupId>\n            <artifactId>spring-cloud-starter-openfeign</artifactId>\n        </dependency>\n\n        <dependency>\n            <groupId>com.alibaba.cloud</groupId>\n            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>\n        </dependency>\n\n        <!-- Sleuth依赖项 -->\n        <dependency>\n            <groupId>org.springframework.cloud</groupId>\n            <artifactId>spring-cloud-starter-sleuth</artifactId>\n        </dependency>\n        <!--Zipkin 依赖-->\n        <dependency>\n            <groupId>org.springframework.cloud</groupId>\n            <artifactId>spring-cloud-sleuth-zipkin</artifactId>\n        </dependency>\n\n        <dependency>\n            <groupId>org.springframework.cloud</groupId>\n            <artifactId>spring-cloud-starter-loadbalancer</artifactId>\n        </dependency>\n\n        <dependency>\n            <groupId>net.logstash.logback</groupId>\n            <artifactId>logstash-logback-encoder</artifactId>\n            <version>${logstash-logback-encoder.version}</version>\n        </dependency>\n\n        <dependency>\n            <groupId>ltd.user.newbee.cloud</groupId>\n            <artifactId>newbee-mall-cloud-user-api</artifactId>\n            <version>0.0.1-SNAPSHOT</version>\n        </dependency>\n\n        <dependency>\n            <groupId>ltd.goods.newbee.cloud</groupId>\n            <artifactId>newbee-mall-cloud-goods-api</artifactId>\n            <version>0.0.1-SNAPSHOT</version>\n        </dependency>\n\n    </dependencies>\n    <!--  @author 程序员十三\n      @qq交流群 791509631\n      @email 2449207463@qq.com\n      @link https://github.com/newbee-ltd -->\n</project>\n"
  },
  {
    "path": "newbee-mall-cloud-recommend-service/newbee-mall-cloud-recommend-web/src/main/java/ltd/recommend/cloud/newbee/NewBeeMallCloudRecommendServiceApplication.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本系统已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.recommend.cloud.newbee;\n\nimport ltd.user.cloud.newbee.openfeign.NewBeeCloudUserServiceFeign;\nimport org.mybatis.spring.annotation.MapperScan;\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigure.SpringBootApplication;\nimport org.springframework.cloud.client.discovery.EnableDiscoveryClient;\nimport org.springframework.cloud.openfeign.EnableFeignClients;\n\n/**\n * @author 程序员十三\n * @qq交流群 791509631\n * @email 2449207463@qq.com\n * @link https://github.com/newbee-ltd\n */\n@SpringBootApplication\n@EnableDiscoveryClient\n@MapperScan(\"ltd.recommend.cloud.newbee.dao\")\n@EnableFeignClients(basePackageClasses =\n        {NewBeeCloudUserServiceFeign.class,\n         ltd.goods.cloud.newbee.openfeign.NewBeeCloudGoodsServiceFeign.class})\npublic class NewBeeMallCloudRecommendServiceApplication {\n\n    public static void main(String[] args) {\n        System.setProperty(\"nacos.logging.default.config.enabled\",\"false\");\n        SpringApplication.run(NewBeeMallCloudRecommendServiceApplication.class, args);\n    }\n\n}\n"
  },
  {
    "path": "newbee-mall-cloud-recommend-service/newbee-mall-cloud-recommend-web/src/main/java/ltd/recommend/cloud/newbee/config/OpenFeignConfiguration.java",
    "content": "package ltd.recommend.cloud.newbee.config;\n\nimport feign.Logger;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\n\n@Configuration\npublic class OpenFeignConfiguration {\n    @Bean\n    public Logger.Level openFeignLogLevel() {\n        // 设置OpenFeign日志级别\n        return Logger.Level.FULL;\n    }\n}\n"
  },
  {
    "path": "newbee-mall-cloud-recommend-service/newbee-mall-cloud-recommend-web/src/main/java/ltd/recommend/cloud/newbee/config/RecommendServiceExceptionHandler.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.recommend.cloud.newbee.config;\n\nimport ltd.common.cloud.newbee.enums.ServiceResultEnum;\nimport ltd.common.cloud.newbee.dto.Result;\nimport ltd.common.cloud.newbee.exception.NewBeeMallException;\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport org.springframework.validation.BindException;\nimport org.springframework.validation.BindingResult;\nimport org.springframework.web.bind.MethodArgumentNotValidException;\nimport org.springframework.web.bind.annotation.ExceptionHandler;\nimport org.springframework.web.bind.annotation.RestControllerAdvice;\n\nimport javax.servlet.http.HttpServletRequest;\nimport java.util.Objects;\n\n/**\n * 全局异常处理\n */\n@RestControllerAdvice\npublic class RecommendServiceExceptionHandler {\n\n    private static final Logger log = LoggerFactory.getLogger(RecommendServiceExceptionHandler.class);\n\n    @ExceptionHandler(BindException.class)\n    public Object bindException(BindException e) {\n        log.error(\"RecommendServiceExceptionHandler:\",e);\n        Result result = new Result();\n        result.setResultCode(510);\n        BindingResult bindingResult = e.getBindingResult();\n        result.setMessage(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());\n        return result;\n    }\n\n    @ExceptionHandler(MethodArgumentNotValidException.class)\n    public Object bindException(MethodArgumentNotValidException e) {\n        log.error(\"RecommendServiceExceptionHandler:\",e);\n        Result result = new Result();\n        result.setResultCode(510);\n        BindingResult bindingResult = e.getBindingResult();\n        result.setMessage(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());\n        return result;\n    }\n\n    @ExceptionHandler(Exception.class)\n    public Object handleException(Exception e, HttpServletRequest req) {\n        log.error(\"RecommendServiceExceptionHandler:\",e);\n        Result result = new Result();\n        result.setResultCode(500);\n        //区分是否为自定义异常\n        if (e instanceof NewBeeMallException) {\n            result.setMessage(e.getMessage());\n            if (e.getMessage().equals(ServiceResultEnum.ADMIN_NOT_LOGIN_ERROR.getResult()) || e.getMessage().equals(ServiceResultEnum.ADMIN_TOKEN_EXPIRE_ERROR.getResult())) {\n                result.setResultCode(419);\n            }\n        } else {\n            e.printStackTrace();\n            result.setMessage(\"未知异常，请查看控制台日志并检查配置文件。\");\n        }\n        return result;\n\n    }\n}\n"
  },
  {
    "path": "newbee-mall-cloud-recommend-service/newbee-mall-cloud-recommend-web/src/main/java/ltd/recommend/cloud/newbee/config/RecommendServiceSwagger3Config.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.recommend.cloud.newbee.config;\n\nimport ltd.common.cloud.newbee.pojo.AdminUserToken;\nimport ltd.recommend.cloud.newbee.entity.LoginAdminUser;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\nimport springfox.documentation.builders.ApiInfoBuilder;\nimport springfox.documentation.builders.PathSelectors;\nimport springfox.documentation.builders.RequestHandlerSelectors;\nimport springfox.documentation.builders.RequestParameterBuilder;\nimport springfox.documentation.oas.annotations.EnableOpenApi;\nimport springfox.documentation.schema.ScalarType;\nimport springfox.documentation.service.ApiInfo;\nimport springfox.documentation.service.ParameterType;\nimport springfox.documentation.service.RequestParameter;\nimport springfox.documentation.spi.DocumentationType;\nimport springfox.documentation.spring.web.plugins.Docket;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\n@Configuration\n@EnableOpenApi\npublic class RecommendServiceSwagger3Config{\n\n    @Bean\n    public Docket api() {\n        return new Docket(DocumentationType.OAS_30)\n                .apiInfo(apiInfo())\n                .ignoredParameterTypes(AdminUserToken.class, LoginAdminUser.class)\n                .select()\n                .apis(RequestHandlerSelectors.basePackage(\"ltd.recommend.cloud.newbee.controller\"))\n                .paths(PathSelectors.any())\n                .build()\n                .globalRequestParameters(getGlobalRequestParameters());\n    }\n\n    //生成全局通用参数\n    private List<RequestParameter> getGlobalRequestParameters() {\n        List<RequestParameter> parameters = new ArrayList<>();\n        parameters.add(new RequestParameterBuilder()\n                .name(\"token\")\n                .description(\"登录认证token\")\n                .required(false) // 非必传\n                .in(ParameterType.HEADER) //请求头中的参数，其它类型可以点进ParameterType类中查看\n                .query(q -> q.model(m -> m.scalarModel(ScalarType.STRING)))\n                .build());\n        return parameters;\n    }\n\n    private ApiInfo apiInfo() {\n        return new ApiInfoBuilder()\n                .title(\"newbee-mall-cloud-recommend-service接口文档\")\n                .description(\"swagger接口文档\")\n                .version(\"2.0\")\n                .build();\n    }\n}"
  },
  {
    "path": "newbee-mall-cloud-recommend-service/newbee-mall-cloud-recommend-web/src/main/java/ltd/recommend/cloud/newbee/config/RecommendServiceWebMvcConfigurer.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.recommend.cloud.newbee.config;\n\nimport com.alibaba.cloud.sentinel.SentinelProperties;\nimport com.alibaba.csp.sentinel.adapter.spring.webmvc.SentinelWebInterceptor;\nimport ltd.recommend.cloud.newbee.config.handler.TokenToAdminUserMethodArgumentResolver;\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.context.annotation.Configuration;\nimport org.springframework.context.annotation.Lazy;\nimport org.springframework.web.method.support.HandlerMethodArgumentResolver;\nimport org.springframework.web.servlet.HandlerInterceptor;\nimport org.springframework.web.servlet.config.annotation.InterceptorRegistry;\nimport org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;\nimport org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;\n\nimport java.util.List;\nimport java.util.Optional;\n\n@Configuration\npublic class RecommendServiceWebMvcConfigurer extends WebMvcConfigurationSupport {\n\n    private static final Logger log = LoggerFactory.getLogger(RecommendServiceWebMvcConfigurer.class);\n\n    @Autowired\n    private SentinelProperties sentinelProperties;\n    @Autowired\n    private Optional<SentinelWebInterceptor> sentinelWebInterceptorOptional;\n    @Autowired\n    @Lazy\n    private TokenToAdminUserMethodArgumentResolver tokenToAdminUserMethodArgumentResolver;\n\n    /**\n     * @param argumentResolvers\n     * @tip @TokenToAdminUser 注解处理方法\n     */\n    public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {\n        argumentResolvers.add(tokenToAdminUserMethodArgumentResolver);\n    }\n\n    @Override\n    public void addResourceHandlers(ResourceHandlerRegistry registry) {\n        registry.\n                addResourceHandler(\"/swagger-ui/**\")\n                .addResourceLocations(\"classpath:/META-INF/resources/webjars/springfox-swagger-ui/\")\n                .resourceChain(false);\n    }\n\n    public void addInterceptors(InterceptorRegistry registry) {\n        if (this.sentinelWebInterceptorOptional.isPresent()) {\n            SentinelProperties.Filter filterConfig = this.sentinelProperties.getFilter();\n            registry.addInterceptor((HandlerInterceptor) this.sentinelWebInterceptorOptional.get()).order(filterConfig.getOrder()).addPathPatterns(filterConfig.getUrlPatterns());\n            log.info(\"[Sentinel Starter] register SentinelWebInterceptor with urlPatterns: {}.\", filterConfig.getUrlPatterns());\n        }\n    }\n}\n"
  },
  {
    "path": "newbee-mall-cloud-recommend-service/newbee-mall-cloud-recommend-web/src/main/java/ltd/recommend/cloud/newbee/config/annotation/TokenToAdminUser.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.recommend.cloud.newbee.config.annotation;\n\nimport java.lang.annotation.*;\n\n@Target({ElementType.PARAMETER})\n@Retention(RetentionPolicy.RUNTIME)\n@Documented\npublic @interface TokenToAdminUser {\n\n    /**\n     * 当前用户在request中的名字\n     *\n     * @return\n     */\n    String value() default \"adminUser\";\n\n}\n"
  },
  {
    "path": "newbee-mall-cloud-recommend-service/newbee-mall-cloud-recommend-web/src/main/java/ltd/recommend/cloud/newbee/config/handler/TokenToAdminUserMethodArgumentResolver.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.recommend.cloud.newbee.config.handler;\n\nimport ltd.common.cloud.newbee.enums.ServiceResultEnum;\nimport ltd.common.cloud.newbee.dto.Result;\nimport ltd.common.cloud.newbee.exception.NewBeeMallException;\nimport ltd.recommend.cloud.newbee.config.annotation.TokenToAdminUser;\nimport ltd.recommend.cloud.newbee.entity.LoginAdminUser;\nimport ltd.user.cloud.newbee.openfeign.NewBeeCloudUserServiceFeign;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.core.MethodParameter;\nimport org.springframework.stereotype.Component;\nimport org.springframework.web.bind.support.WebDataBinderFactory;\nimport org.springframework.web.context.request.NativeWebRequest;\nimport org.springframework.web.method.support.HandlerMethodArgumentResolver;\nimport org.springframework.web.method.support.ModelAndViewContainer;\n\nimport java.util.LinkedHashMap;\n\n@Component\npublic class TokenToAdminUserMethodArgumentResolver implements HandlerMethodArgumentResolver {\n\n    @Autowired\n    private NewBeeCloudUserServiceFeign newBeeCloudUserService;\n\n    public TokenToAdminUserMethodArgumentResolver() {\n    }\n\n    public boolean supportsParameter(MethodParameter parameter) {\n        if (parameter.hasParameterAnnotation(TokenToAdminUser.class)) {\n            return true;\n        }\n        return false;\n    }\n\n    public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) {\n        if (parameter.getParameterAnnotation(TokenToAdminUser.class) instanceof TokenToAdminUser) {\n            String token = webRequest.getHeader(\"token\");\n            if (null != token && !\"\".equals(token) && token.length() == 32) {\n                // 通过用户中心获取用户信息\n                Result result = newBeeCloudUserService.getAdminUserByToken(token);\n\n                if (result == null || result.getResultCode() != 200 || result.getData() == null) {\n                    NewBeeMallException.fail(ServiceResultEnum.ADMIN_NOT_LOGIN_ERROR.getResult());\n                }\n\n                LinkedHashMap resultData = (LinkedHashMap) result.getData();\n\n                // 将返回的字段封装到LoginAdminUser对象中\n                LoginAdminUser loginAdminUser = new LoginAdminUser();\n                loginAdminUser.setAdminUserId(Long.valueOf(resultData.get(\"adminUserId\").toString()));\n                loginAdminUser.setLoginUserName((String) resultData.get(\"loginUserName\"));\n                loginAdminUser.setNickName((String) resultData.get(\"nickName\"));\n                loginAdminUser.setLocked(Byte.valueOf(resultData.get(\"locked\").toString()));\n                return loginAdminUser;\n            } else {\n                NewBeeMallException.fail(ServiceResultEnum.ADMIN_NOT_LOGIN_ERROR.getResult());\n            }\n        }\n        return null;\n    }\n\n}\n"
  },
  {
    "path": "newbee-mall-cloud-recommend-service/newbee-mall-cloud-recommend-web/src/main/java/ltd/recommend/cloud/newbee/controller/NewBeeAdminCarouselController.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本系统已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.recommend.cloud.newbee.controller;\n\nimport io.swagger.annotations.Api;\nimport io.swagger.annotations.ApiOperation;\nimport io.swagger.annotations.ApiParam;\nimport ltd.common.cloud.newbee.enums.ServiceResultEnum;\nimport ltd.common.cloud.newbee.dto.PageQueryUtil;\nimport ltd.common.cloud.newbee.dto.Result;\nimport ltd.common.cloud.newbee.dto.ResultGenerator;\nimport ltd.common.cloud.newbee.util.BeanUtil;\nimport ltd.recommend.cloud.newbee.config.annotation.TokenToAdminUser;\nimport ltd.recommend.cloud.newbee.controller.param.BatchIdParam;\nimport ltd.recommend.cloud.newbee.controller.param.CarouselAddParam;\nimport ltd.recommend.cloud.newbee.controller.param.CarouselEditParam;\nimport ltd.recommend.cloud.newbee.entity.Carousel;\nimport ltd.recommend.cloud.newbee.entity.LoginAdminUser;\nimport ltd.recommend.cloud.newbee.service.NewBeeMallCarouselService;\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport org.springframework.web.bind.annotation.*;\n\nimport javax.annotation.Resource;\nimport javax.validation.Valid;\nimport java.util.HashMap;\nimport java.util.Map;\n\n/**\n * @author 13\n * @qq交流群 796794009\n * @email 2449207463@qq.com\n * @link https://github.com/newbee-ltd\n */\n@RestController\n@Api(value = \"v1\", tags = \"后台管理系统轮播图模块接口\")\n@RequestMapping(\"/carousels/admin\")\npublic class NewBeeAdminCarouselController {\n\n    private static final Logger logger = LoggerFactory.getLogger(NewBeeAdminCarouselController.class);\n\n    @Resource\n    NewBeeMallCarouselService newBeeMallCarouselService;\n\n    /**\n     * 列表\n     */\n    @RequestMapping(value = \"/list\", method = RequestMethod.GET)\n    @ApiOperation(value = \"轮播图列表\", notes = \"轮播图列表\")\n    public Result list(@RequestParam(required = false) @ApiParam(value = \"页码\") Integer pageNumber,\n                       @RequestParam(required = false) @ApiParam(value = \"每页条数\") Integer pageSize, @TokenToAdminUser LoginAdminUser adminUser) {\n        logger.info(\"adminUser:{}\", adminUser.toString());\n        if (pageNumber == null || pageNumber < 1 || pageSize == null || pageSize < 10) {\n            return ResultGenerator.genFailResult(\"分页参数异常！\");\n        }\n        Map params = new HashMap(4);\n        params.put(\"page\", pageNumber);\n        params.put(\"limit\", pageSize);\n        PageQueryUtil pageUtil = new PageQueryUtil(params);\n        return ResultGenerator.genSuccessResult(newBeeMallCarouselService.getCarouselPage(pageUtil));\n    }\n\n    /**\n     * 添加\n     */\n    @RequestMapping(value = \"/add\", method = RequestMethod.POST)\n    @ApiOperation(value = \"新增轮播图\", notes = \"新增轮播图\")\n    public Result save(@RequestBody @Valid CarouselAddParam carouselAddParam, @TokenToAdminUser LoginAdminUser adminUser) {\n        logger.info(\"adminUser:{}\", adminUser.toString());\n        Carousel carousel = new Carousel();\n        BeanUtil.copyProperties(carouselAddParam, carousel);\n        String result = newBeeMallCarouselService.saveCarousel(carousel);\n        if (ServiceResultEnum.SUCCESS.getResult().equals(result)) {\n            return ResultGenerator.genSuccessResult();\n        } else {\n            return ResultGenerator.genFailResult(result);\n        }\n    }\n\n\n    /**\n     * 修改\n     */\n    @RequestMapping(value = \"/update\", method = RequestMethod.PUT)\n    @ApiOperation(value = \"修改轮播图信息\", notes = \"修改轮播图信息\")\n    public Result update(@RequestBody CarouselEditParam carouselEditParam, @TokenToAdminUser LoginAdminUser adminUser) {\n        logger.info(\"adminUser:{}\", adminUser.toString());\n        Carousel carousel = new Carousel();\n        BeanUtil.copyProperties(carouselEditParam, carousel);\n        String result = newBeeMallCarouselService.updateCarousel(carousel);\n        if (ServiceResultEnum.SUCCESS.getResult().equals(result)) {\n            return ResultGenerator.genSuccessResult();\n        } else {\n            return ResultGenerator.genFailResult(result);\n        }\n    }\n\n    /**\n     * 详情\n     */\n    @RequestMapping(value = \"/detail/{id}\", method = RequestMethod.GET)\n    @ApiOperation(value = \"获取单条轮播图信息\", notes = \"根据id查询\")\n    public Result info(@PathVariable(\"id\") Integer id, @TokenToAdminUser LoginAdminUser adminUser) {\n        logger.info(\"adminUser:{}\", adminUser.toString());\n        Carousel carousel = newBeeMallCarouselService.getCarouselById(id);\n        if (carousel == null) {\n            return ResultGenerator.genFailResult(ServiceResultEnum.DATA_NOT_EXIST.getResult());\n        }\n        return ResultGenerator.genSuccessResult(carousel);\n    }\n\n    /**\n     * 删除\n     */\n    @RequestMapping(value = \"/batchDelete\", method = RequestMethod.DELETE)\n    @ApiOperation(value = \"批量删除轮播图信息\", notes = \"批量删除轮播图信息\")\n    public Result delete(@RequestBody BatchIdParam batchIdParam, @TokenToAdminUser LoginAdminUser adminUser) {\n        logger.info(\"adminUser:{}\", adminUser.toString());\n        if (batchIdParam == null || batchIdParam.getIds().length < 1) {\n            return ResultGenerator.genFailResult(\"参数异常！\");\n        }\n        if (newBeeMallCarouselService.deleteBatch(batchIdParam.getIds())) {\n            return ResultGenerator.genSuccessResult();\n        } else {\n            return ResultGenerator.genFailResult(\"删除失败\");\n        }\n    }\n\n}"
  },
  {
    "path": "newbee-mall-cloud-recommend-service/newbee-mall-cloud-recommend-web/src/main/java/ltd/recommend/cloud/newbee/controller/NewBeeAdminIndexConfigController.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本系统已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.recommend.cloud.newbee.controller;\n\nimport io.swagger.annotations.Api;\nimport io.swagger.annotations.ApiOperation;\nimport io.swagger.annotations.ApiParam;\nimport ltd.common.cloud.newbee.enums.ServiceResultEnum;\nimport ltd.common.cloud.newbee.dto.PageQueryUtil;\nimport ltd.common.cloud.newbee.dto.Result;\nimport ltd.common.cloud.newbee.dto.ResultGenerator;\nimport ltd.common.cloud.newbee.enums.IndexConfigTypeEnum;\nimport ltd.common.cloud.newbee.util.BeanUtil;\nimport ltd.recommend.cloud.newbee.config.annotation.TokenToAdminUser;\nimport ltd.recommend.cloud.newbee.controller.param.BatchIdParam;\nimport ltd.recommend.cloud.newbee.controller.param.IndexConfigAddParam;\nimport ltd.recommend.cloud.newbee.controller.param.IndexConfigEditParam;\nimport ltd.recommend.cloud.newbee.entity.IndexConfig;\nimport ltd.recommend.cloud.newbee.entity.LoginAdminUser;\nimport ltd.recommend.cloud.newbee.service.NewBeeMallIndexConfigService;\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport org.springframework.web.bind.annotation.*;\n\nimport javax.annotation.Resource;\nimport javax.validation.Valid;\nimport java.util.HashMap;\nimport java.util.Map;\n\n/**\n * @author 13\n * @qq交流群 796794009\n * @email 2449207463@qq.com\n * @link https://github.com/newbee-ltd\n */\n@RestController\n@Api(value = \"v1\", tags = \"后台管理系统首页配置模块接口\")\n@RequestMapping(\"/indexConfigs/admin\")\npublic class NewBeeAdminIndexConfigController {\n\n    private static final Logger logger = LoggerFactory.getLogger(NewBeeAdminIndexConfigController.class);\n\n    @Resource\n    private NewBeeMallIndexConfigService newBeeMallIndexConfigService;\n\n    /**\n     * 列表\n     */\n    @RequestMapping(value = \"/list\", method = RequestMethod.GET)\n    @ApiOperation(value = \"首页配置列表\", notes = \"首页配置列表\")\n    public Result list(@RequestParam(required = false) @ApiParam(value = \"页码\") Integer pageNumber,\n                       @RequestParam(required = false) @ApiParam(value = \"每页条数\") Integer pageSize,\n                       @RequestParam(required = false) @ApiParam(value = \"1-搜索框热搜 2-搜索下拉框热搜 3-(首页)热销商品 4-(首页)新品上线 5-(首页)为你推荐\") Integer configType, @TokenToAdminUser LoginAdminUser adminUser) {\n        logger.info(\"adminUser:{}\", adminUser.toString());\n        if (pageNumber == null || pageNumber < 1 || pageSize == null || pageSize < 10) {\n            return ResultGenerator.genFailResult(\"分页参数异常！\");\n        }\n        IndexConfigTypeEnum indexConfigTypeEnum = IndexConfigTypeEnum.getIndexConfigTypeEnumByType(configType);\n        if (indexConfigTypeEnum.equals(IndexConfigTypeEnum.DEFAULT)) {\n            return ResultGenerator.genFailResult(\"非法参数！\");\n        }\n        Map params = new HashMap(8);\n        params.put(\"page\", pageNumber);\n        params.put(\"limit\", pageSize);\n        params.put(\"configType\", configType);\n        PageQueryUtil pageUtil = new PageQueryUtil(params);\n        return ResultGenerator.genSuccessResult(newBeeMallIndexConfigService.getConfigsPage(pageUtil));\n    }\n\n    /**\n     * 添加\n     */\n    @RequestMapping(value = \"/add\", method = RequestMethod.POST)\n    @ApiOperation(value = \"新增首页配置项\", notes = \"新增首页配置项\")\n    public Result save(@RequestBody @Valid IndexConfigAddParam indexConfigAddParam, @TokenToAdminUser LoginAdminUser adminUser) {\n        logger.info(\"adminUser:{}\", adminUser.toString());\n        IndexConfig indexConfig = new IndexConfig();\n        BeanUtil.copyProperties(indexConfigAddParam, indexConfig);\n        String result = newBeeMallIndexConfigService.saveIndexConfig(indexConfig);\n        if (ServiceResultEnum.SUCCESS.getResult().equals(result)) {\n            return ResultGenerator.genSuccessResult();\n        } else {\n            return ResultGenerator.genFailResult(result);\n        }\n    }\n\n\n    /**\n     * 修改\n     */\n    @RequestMapping(value = \"/update\", method = RequestMethod.PUT)\n    @ApiOperation(value = \"修改首页配置项\", notes = \"修改首页配置项\")\n    public Result update(@RequestBody @Valid IndexConfigEditParam indexConfigEditParam, @TokenToAdminUser LoginAdminUser adminUser) {\n        logger.info(\"adminUser:{}\", adminUser.toString());\n        IndexConfig indexConfig = new IndexConfig();\n        BeanUtil.copyProperties(indexConfigEditParam, indexConfig);\n        String result = newBeeMallIndexConfigService.updateIndexConfig(indexConfig);\n        if (ServiceResultEnum.SUCCESS.getResult().equals(result)) {\n            return ResultGenerator.genSuccessResult();\n        } else {\n            return ResultGenerator.genFailResult(result);\n        }\n    }\n\n    /**\n     * 详情\n     */\n    @RequestMapping(value = \"/detail/{id}\", method = RequestMethod.GET)\n    @ApiOperation(value = \"获取单条首页配置项信息\", notes = \"根据id查询\")\n    public Result info(@PathVariable(\"id\") Long id, @TokenToAdminUser LoginAdminUser adminUser) {\n        logger.info(\"adminUser:{}\", adminUser.toString());\n        IndexConfig config = newBeeMallIndexConfigService.getIndexConfigById(id);\n        if (config == null) {\n            return ResultGenerator.genFailResult(\"未查询到数据\");\n        }\n        return ResultGenerator.genSuccessResult(config);\n    }\n\n    /**\n     * 删除\n     */\n    @RequestMapping(value = \"/batchDelete\", method = RequestMethod.DELETE)\n    @ApiOperation(value = \"批量删除首页配置项信息\", notes = \"批量删除首页配置项信息\")\n    public Result delete(@RequestBody BatchIdParam batchIdParam, @TokenToAdminUser LoginAdminUser adminUser) {\n        logger.info(\"adminUser:{}\", adminUser.toString());\n        if (batchIdParam == null || batchIdParam.getIds().length < 1) {\n            return ResultGenerator.genFailResult(\"参数异常！\");\n        }\n        if (newBeeMallIndexConfigService.deleteBatch(batchIdParam.getIds())) {\n            return ResultGenerator.genSuccessResult();\n        } else {\n            return ResultGenerator.genFailResult(\"删除失败\");\n        }\n    }\n\n}"
  },
  {
    "path": "newbee-mall-cloud-recommend-service/newbee-mall-cloud-recommend-web/src/main/java/ltd/recommend/cloud/newbee/controller/NewBeeMallIndexController.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.recommend.cloud.newbee.controller;\n\nimport io.swagger.annotations.Api;\nimport io.swagger.annotations.ApiOperation;\nimport ltd.common.cloud.newbee.dto.Result;\nimport ltd.common.cloud.newbee.dto.ResultGenerator;\nimport ltd.common.cloud.newbee.enums.IndexConfigTypeEnum;\nimport ltd.recommend.cloud.newbee.controller.vo.IndexInfoVO;\nimport ltd.recommend.cloud.newbee.controller.vo.NewBeeMallIndexCarouselVO;\nimport ltd.recommend.cloud.newbee.controller.vo.NewBeeMallIndexConfigGoodsVO;\nimport ltd.recommend.cloud.newbee.service.NewBeeMallCarouselService;\nimport ltd.recommend.cloud.newbee.service.NewBeeMallIndexConfigService;\nimport org.springframework.web.bind.annotation.GetMapping;\nimport org.springframework.web.bind.annotation.RequestMapping;\nimport org.springframework.web.bind.annotation.RestController;\n\nimport javax.annotation.Resource;\nimport java.util.List;\n\n@RestController\n@Api(value = \"v1\", tags = \"新蜂商城首页接口\")\n@RequestMapping(\"/mall/index\")\npublic class NewBeeMallIndexController {\n\n    @Resource\n    private NewBeeMallCarouselService newBeeMallCarouselService;\n\n    @Resource\n    private NewBeeMallIndexConfigService newBeeMallIndexConfigService;\n\n    @GetMapping(\"/recommondInfos\")\n    @ApiOperation(value = \"获取首页数据\", notes = \"轮播图、新品、推荐等\")\n    public Result<IndexInfoVO> indexInfo() {\n        IndexInfoVO indexInfoVO = new IndexInfoVO();\n        List<NewBeeMallIndexCarouselVO> carousels = newBeeMallCarouselService.getCarouselsForIndex(5);\n        List<NewBeeMallIndexConfigGoodsVO> hotGoodses = newBeeMallIndexConfigService.getConfigGoodsesForIndex(IndexConfigTypeEnum.INDEX_GOODS_HOT.getType(), 4);\n        List<NewBeeMallIndexConfigGoodsVO> newGoodses = newBeeMallIndexConfigService.getConfigGoodsesForIndex(IndexConfigTypeEnum.INDEX_GOODS_NEW.getType(), 6);\n        List<NewBeeMallIndexConfigGoodsVO> recommendGoodses = newBeeMallIndexConfigService.getConfigGoodsesForIndex(IndexConfigTypeEnum.INDEX_GOODS_RECOMMOND.getType(), 10);\n        indexInfoVO.setCarousels(carousels);\n        indexInfoVO.setHotGoodses(hotGoodses);\n        indexInfoVO.setNewGoodses(newGoodses);\n        indexInfoVO.setRecommendGoodses(recommendGoodses);\n        return ResultGenerator.genSuccessResult(indexInfoVO);\n    }\n}\n"
  },
  {
    "path": "newbee-mall-cloud-recommend-service/newbee-mall-cloud-recommend-web/src/main/java/ltd/recommend/cloud/newbee/controller/param/BatchIdParam.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.recommend.cloud.newbee.controller.param;\n\nimport lombok.Data;\n\nimport java.io.Serializable;\n\n@Data\npublic class BatchIdParam implements Serializable {\n    //id数组\n    Long[] ids;\n}\n"
  },
  {
    "path": "newbee-mall-cloud-recommend-service/newbee-mall-cloud-recommend-web/src/main/java/ltd/recommend/cloud/newbee/controller/param/CarouselAddParam.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.recommend.cloud.newbee.controller.param;\n\nimport io.swagger.annotations.ApiModelProperty;\nimport lombok.Data;\n\nimport javax.validation.constraints.Max;\nimport javax.validation.constraints.Min;\nimport javax.validation.constraints.NotEmpty;\nimport javax.validation.constraints.NotNull;\n\n@Data\npublic class CarouselAddParam {\n\n    @ApiModelProperty(\"轮播图URL地址\")\n    @NotEmpty(message = \"轮播图URL不能为空\")\n    private String carouselUrl;\n\n    @ApiModelProperty(\"轮播图跳转地址\")\n    @NotEmpty(message = \"轮播图跳转地址不能为空\")\n    private String redirectUrl;\n\n    @ApiModelProperty(\"排序值\")\n    @Min(value = 1, message = \"carouselRank最低为1\")\n    @Max(value = 200, message = \"carouselRank最高为200\")\n    @NotNull(message = \"carouselRank不能为空\")\n    private Integer carouselRank;\n}\n"
  },
  {
    "path": "newbee-mall-cloud-recommend-service/newbee-mall-cloud-recommend-web/src/main/java/ltd/recommend/cloud/newbee/controller/param/CarouselEditParam.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.recommend.cloud.newbee.controller.param;\n\nimport io.swagger.annotations.ApiModelProperty;\nimport lombok.Data;\n\nimport javax.validation.constraints.Max;\nimport javax.validation.constraints.Min;\nimport javax.validation.constraints.NotEmpty;\nimport javax.validation.constraints.NotNull;\n\n@Data\npublic class CarouselEditParam {\n\n    @ApiModelProperty(\"待修改轮播图id\")\n    @NotNull(message = \"轮播图id不能为空\")\n    @Min(1)\n    private Integer carouselId;\n\n    @ApiModelProperty(\"轮播图URL地址\")\n    @NotEmpty(message = \"轮播图URL不能为空\")\n    private String carouselUrl;\n\n    @ApiModelProperty(\"轮播图跳转地址\")\n    @NotEmpty(message = \"轮播图跳转地址不能为空\")\n    private String redirectUrl;\n\n    @ApiModelProperty(\"排序值\")\n    @Min(value = 1, message = \"carouselRank最低为1\")\n    @Max(value = 200, message = \"carouselRank最高为200\")\n    @NotNull(message = \"carouselRank不能为空\")\n    private Integer carouselRank;\n}\n"
  },
  {
    "path": "newbee-mall-cloud-recommend-service/newbee-mall-cloud-recommend-web/src/main/java/ltd/recommend/cloud/newbee/controller/param/IndexConfigAddParam.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.recommend.cloud.newbee.controller.param;\n\nimport io.swagger.annotations.ApiModelProperty;\nimport lombok.Data;\n\nimport javax.validation.constraints.Max;\nimport javax.validation.constraints.Min;\nimport javax.validation.constraints.NotEmpty;\nimport javax.validation.constraints.NotNull;\n\n@Data\npublic class IndexConfigAddParam {\n\n    @ApiModelProperty(\"配置项名称\")\n    @NotEmpty(message = \"configName不能为空\")\n    private String configName;\n\n    @ApiModelProperty(\"配置类别\")\n    @NotNull(message = \"configType不能为空\")\n    @Min(value = 1, message = \"configType最小为1\")\n    @Max(value = 5, message = \"configType最大为5\")\n    private Byte configType;\n\n    @ApiModelProperty(\"商品id\")\n    @NotNull(message = \"商品id不能为空\")\n    @Min(value = 1, message = \"商品id不能为空\")\n    private Long goodsId;\n\n    @ApiModelProperty(\"排序值\")\n    @Min(value = 1, message = \"configRank最低为1\")\n    @Max(value = 200, message = \"configRank最高为200\")\n    @NotNull(message = \"configRank不能为空\")\n    private Integer configRank;\n}"
  },
  {
    "path": "newbee-mall-cloud-recommend-service/newbee-mall-cloud-recommend-web/src/main/java/ltd/recommend/cloud/newbee/controller/param/IndexConfigEditParam.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.recommend.cloud.newbee.controller.param;\n\nimport io.swagger.annotations.ApiModelProperty;\nimport lombok.Data;\n\nimport javax.validation.constraints.Max;\nimport javax.validation.constraints.Min;\nimport javax.validation.constraints.NotEmpty;\nimport javax.validation.constraints.NotNull;\n\n@Data\npublic class IndexConfigEditParam {\n\n    @ApiModelProperty(\"待修改配置id\")\n    @NotNull(message = \"configId不能为空\")\n    @Min(value = 1, message = \"configId不能为空\")\n    private Long configId;\n\n    @ApiModelProperty(\"配置的名称\")\n    @NotEmpty(message = \"configName不能为空\")\n    private String configName;\n\n    @ApiModelProperty(\"配置类别\")\n    @NotNull(message = \"configType不能为空\")\n    @Min(value = 1, message = \"configType最小为1\")\n    @Max(value = 5, message = \"configType最大为5\")\n    private Byte configType;\n\n    @ApiModelProperty(\"商品id\")\n    @NotNull(message = \"商品id不能为空\")\n    @Min(value = 1, message = \"商品id不能为空\")\n    private Long goodsId;\n\n    @ApiModelProperty(\"排序值\")\n    @Min(value = 1, message = \"configRank最低为1\")\n    @Max(value = 200, message = \"configRank最高为200\")\n    @NotNull(message = \"configRank不能为空\")\n    private Integer configRank;\n}"
  },
  {
    "path": "newbee-mall-cloud-recommend-service/newbee-mall-cloud-recommend-web/src/main/java/ltd/recommend/cloud/newbee/controller/vo/IndexInfoVO.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.recommend.cloud.newbee.controller.vo;\n\nimport io.swagger.annotations.ApiModelProperty;\nimport lombok.Data;\n\nimport java.io.Serializable;\nimport java.util.List;\n\n@Data\npublic class IndexInfoVO implements Serializable {\n\n    @ApiModelProperty(\"轮播图(列表)\")\n    private List<NewBeeMallIndexCarouselVO> carousels;\n\n    @ApiModelProperty(\"首页热销商品(列表)\")\n    private List<NewBeeMallIndexConfigGoodsVO> hotGoodses;\n\n    @ApiModelProperty(\"首页新品推荐(列表)\")\n    private List<NewBeeMallIndexConfigGoodsVO> newGoodses;\n\n    @ApiModelProperty(\"首页推荐商品(列表)\")\n    private List<NewBeeMallIndexConfigGoodsVO> recommendGoodses;\n}\n"
  },
  {
    "path": "newbee-mall-cloud-recommend-service/newbee-mall-cloud-recommend-web/src/main/java/ltd/recommend/cloud/newbee/controller/vo/NewBeeMallIndexCarouselVO.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.recommend.cloud.newbee.controller.vo;\n\nimport io.swagger.annotations.ApiModelProperty;\nimport lombok.Data;\n\nimport java.io.Serializable;\n\n/**\n * 首页轮播图VO\n */\n@Data\npublic class NewBeeMallIndexCarouselVO implements Serializable {\n\n    @ApiModelProperty(\"轮播图图片地址\")\n    private String carouselUrl;\n\n    @ApiModelProperty(\"轮播图点击后的跳转路径\")\n    private String redirectUrl;\n}\n"
  },
  {
    "path": "newbee-mall-cloud-recommend-service/newbee-mall-cloud-recommend-web/src/main/java/ltd/recommend/cloud/newbee/controller/vo/NewBeeMallIndexCategoryVO.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.recommend.cloud.newbee.controller.vo;\n\nimport io.swagger.annotations.ApiModelProperty;\nimport lombok.Data;\n\nimport java.io.Serializable;\nimport java.util.List;\n\n/**\n * 首页分类数据VO\n */\n@Data\npublic class NewBeeMallIndexCategoryVO implements Serializable {\n\n    @ApiModelProperty(\"当前一级分类id\")\n    private Long categoryId;\n\n    @ApiModelProperty(\"当前分类级别\")\n    private Byte categoryLevel;\n\n    @ApiModelProperty(\"当前一级分类名称\")\n    private String categoryName;\n\n    @ApiModelProperty(\"二级分类列表\")\n    private List<SecondLevelCategoryVO> secondLevelCategoryVOS;\n}\n"
  },
  {
    "path": "newbee-mall-cloud-recommend-service/newbee-mall-cloud-recommend-web/src/main/java/ltd/recommend/cloud/newbee/controller/vo/NewBeeMallIndexConfigGoodsVO.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.recommend.cloud.newbee.controller.vo;\n\nimport io.swagger.annotations.ApiModelProperty;\nimport lombok.Data;\n\nimport java.io.Serializable;\n\n/**\n * 首页配置商品VO\n */\n@Data\npublic class NewBeeMallIndexConfigGoodsVO implements Serializable {\n\n    @ApiModelProperty(\"商品id\")\n    private Long goodsId;\n    @ApiModelProperty(\"商品名称\")\n    private String goodsName;\n    @ApiModelProperty(\"商品简介\")\n    private String goodsIntro;\n    @ApiModelProperty(\"商品图片地址\")\n    private String goodsCoverImg;\n    @ApiModelProperty(\"商品价格\")\n    private Integer sellingPrice;\n    @ApiModelProperty(\"商品标签\")\n    private String tag;\n}\n"
  },
  {
    "path": "newbee-mall-cloud-recommend-service/newbee-mall-cloud-recommend-web/src/main/java/ltd/recommend/cloud/newbee/controller/vo/SecondLevelCategoryVO.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.recommend.cloud.newbee.controller.vo;\n\nimport io.swagger.annotations.ApiModelProperty;\nimport lombok.Data;\n\nimport java.io.Serializable;\nimport java.util.List;\n\n/**\n * 首页分类数据VO(第二级)\n */\n@Data\npublic class SecondLevelCategoryVO implements Serializable {\n\n    @ApiModelProperty(\"当前二级分类id\")\n    private Long categoryId;\n\n    @ApiModelProperty(\"父级分类id\")\n    private Long parentId;\n\n    @ApiModelProperty(\"当前分类级别\")\n    private Byte categoryLevel;\n\n    @ApiModelProperty(\"当前二级分类名称\")\n    private String categoryName;\n\n    @ApiModelProperty(\"三级分类列表\")\n    private List<ThirdLevelCategoryVO> thirdLevelCategoryVOS;\n}\n"
  },
  {
    "path": "newbee-mall-cloud-recommend-service/newbee-mall-cloud-recommend-web/src/main/java/ltd/recommend/cloud/newbee/controller/vo/ThirdLevelCategoryVO.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.recommend.cloud.newbee.controller.vo;\n\nimport io.swagger.annotations.ApiModelProperty;\nimport lombok.Data;\n\nimport java.io.Serializable;\n\n/**\n * 首页分类数据VO(第三级)\n */\n@Data\npublic class ThirdLevelCategoryVO implements Serializable {\n\n    @ApiModelProperty(\"当前三级分类id\")\n    private Long categoryId;\n\n    @ApiModelProperty(\"当前分类级别\")\n    private Byte categoryLevel;\n\n    @ApiModelProperty(\"当前三级分类名称\")\n    private String categoryName;\n}\n"
  },
  {
    "path": "newbee-mall-cloud-recommend-service/newbee-mall-cloud-recommend-web/src/main/java/ltd/recommend/cloud/newbee/dao/CarouselMapper.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.recommend.cloud.newbee.dao;\n\nimport ltd.common.cloud.newbee.dto.PageQueryUtil;\nimport ltd.recommend.cloud.newbee.entity.Carousel;\nimport org.apache.ibatis.annotations.Param;\n\nimport java.util.List;\n\npublic interface CarouselMapper {\n    int deleteByPrimaryKey(Integer carouselId);\n\n    int insert(Carousel record);\n\n    int insertSelective(Carousel record);\n\n    Carousel selectByPrimaryKey(Integer carouselId);\n\n    int updateByPrimaryKeySelective(Carousel record);\n\n    int updateByPrimaryKey(Carousel record);\n\n    List<Carousel> findCarouselList(PageQueryUtil pageUtil);\n\n    int getTotalCarousels(PageQueryUtil pageUtil);\n\n    int deleteBatch(Long[] ids);\n\n    List<Carousel> findCarouselsByNum(@Param(\"number\") int number);\n}"
  },
  {
    "path": "newbee-mall-cloud-recommend-service/newbee-mall-cloud-recommend-web/src/main/java/ltd/recommend/cloud/newbee/dao/IndexConfigMapper.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.recommend.cloud.newbee.dao;\n\nimport ltd.common.cloud.newbee.dto.PageQueryUtil;\nimport ltd.recommend.cloud.newbee.entity.IndexConfig;\nimport org.apache.ibatis.annotations.Param;\n\nimport java.util.List;\n\npublic interface IndexConfigMapper {\n    int deleteByPrimaryKey(Long configId);\n\n    int insert(IndexConfig record);\n\n    int insertSelective(IndexConfig record);\n\n    IndexConfig selectByPrimaryKey(Long configId);\n\n    IndexConfig selectByTypeAndGoodsId(@Param(\"configType\") int configType, @Param(\"goodsId\") Long goodsId);\n\n    int updateByPrimaryKeySelective(IndexConfig record);\n\n    int updateByPrimaryKey(IndexConfig record);\n\n    List<IndexConfig> findIndexConfigList(PageQueryUtil pageUtil);\n\n    int getTotalIndexConfigs(PageQueryUtil pageUtil);\n\n    int deleteBatch(Long[] ids);\n\n    List<IndexConfig> findIndexConfigsByTypeAndNum(@Param(\"configType\") int configType, @Param(\"number\") int number);\n}"
  },
  {
    "path": "newbee-mall-cloud-recommend-service/newbee-mall-cloud-recommend-web/src/main/java/ltd/recommend/cloud/newbee/entity/Carousel.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.recommend.cloud.newbee.entity;\n\nimport com.fasterxml.jackson.annotation.JsonFormat;\nimport lombok.Data;\n\nimport java.util.Date;\n\n@Data\npublic class Carousel {\n    private Integer carouselId;\n\n    private String carouselUrl;\n\n    private String redirectUrl;\n\n    private Integer carouselRank;\n\n    private Byte isDeleted;\n\n    @JsonFormat(pattern = \"yyyy-MM-dd HH:mm:ss\", timezone = \"GMT+8\")\n    private Date createTime;\n\n    private Integer createUser;\n\n    @JsonFormat(pattern = \"yyyy-MM-dd HH:mm:ss\", timezone = \"GMT+8\")\n    private Date updateTime;\n\n    private Integer updateUser;\n}"
  },
  {
    "path": "newbee-mall-cloud-recommend-service/newbee-mall-cloud-recommend-web/src/main/java/ltd/recommend/cloud/newbee/entity/IndexConfig.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.recommend.cloud.newbee.entity;\n\nimport com.fasterxml.jackson.annotation.JsonFormat;\nimport lombok.Data;\n\nimport java.util.Date;\n\n@Data\npublic class IndexConfig {\n    private Long configId;\n\n    private String configName;\n\n    private Byte configType;\n\n    private Long goodsId;\n\n    private String redirectUrl;\n\n    private Integer configRank;\n\n    private Byte isDeleted;\n\n    @JsonFormat(pattern = \"yyyy-MM-dd HH:mm:ss\", timezone = \"GMT+8\")\n    private Date createTime;\n\n    private Integer createUser;\n\n    @JsonFormat(pattern = \"yyyy-MM-dd HH:mm:ss\", timezone = \"GMT+8\")\n    private Date updateTime;\n\n    private Integer updateUser;\n}"
  },
  {
    "path": "newbee-mall-cloud-recommend-service/newbee-mall-cloud-recommend-web/src/main/java/ltd/recommend/cloud/newbee/entity/LoginAdminUser.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本系统已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.recommend.cloud.newbee.entity;\n\nimport lombok.Data;\n\n@Data\npublic class LoginAdminUser {\n    private Long adminUserId;\n\n    private String loginUserName;\n\n    private String loginPassword;\n\n    private String nickName;\n\n    private Byte locked;\n}"
  },
  {
    "path": "newbee-mall-cloud-recommend-service/newbee-mall-cloud-recommend-web/src/main/java/ltd/recommend/cloud/newbee/service/NewBeeMallCarouselService.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.recommend.cloud.newbee.service;\n\nimport ltd.common.cloud.newbee.dto.PageQueryUtil;\nimport ltd.common.cloud.newbee.dto.PageResult;\nimport ltd.recommend.cloud.newbee.controller.vo.NewBeeMallIndexCarouselVO;\nimport ltd.recommend.cloud.newbee.entity.Carousel;\n\nimport java.util.List;\n\npublic interface NewBeeMallCarouselService {\n\n    /**\n     * 后台分页\n     *\n     * @param pageUtil\n     * @return\n     */\n    PageResult getCarouselPage(PageQueryUtil pageUtil);\n\n    String saveCarousel(Carousel carousel);\n\n    String updateCarousel(Carousel carousel);\n\n    Carousel getCarouselById(Integer id);\n\n    Boolean deleteBatch(Long[] ids);\n\n    /**\n     * 返回固定数量的轮播图对象(首页调用)\n     *\n     * @param number\n     * @return\n     */\n    List<NewBeeMallIndexCarouselVO> getCarouselsForIndex(int number);\n}\n"
  },
  {
    "path": "newbee-mall-cloud-recommend-service/newbee-mall-cloud-recommend-web/src/main/java/ltd/recommend/cloud/newbee/service/NewBeeMallIndexConfigService.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.recommend.cloud.newbee.service;\n\nimport ltd.common.cloud.newbee.dto.PageQueryUtil;\nimport ltd.common.cloud.newbee.dto.PageResult;\nimport ltd.recommend.cloud.newbee.controller.vo.NewBeeMallIndexConfigGoodsVO;\nimport ltd.recommend.cloud.newbee.entity.IndexConfig;\n\nimport java.util.List;\n\npublic interface NewBeeMallIndexConfigService {\n    /**\n     * 后台分页\n     *\n     * @param pageUtil\n     * @return\n     */\n    PageResult getConfigsPage(PageQueryUtil pageUtil);\n\n    String saveIndexConfig(IndexConfig indexConfig);\n\n    String updateIndexConfig(IndexConfig indexConfig);\n\n    IndexConfig getIndexConfigById(Long id);\n\n    Boolean deleteBatch(Long[] ids);\n\n    /**\n     * 返回固定数量的首页配置商品对象(首页调用)\n     *\n     * @param number\n     * @return\n     */\n    List<NewBeeMallIndexConfigGoodsVO> getConfigGoodsesForIndex(int configType, int number);\n}\n"
  },
  {
    "path": "newbee-mall-cloud-recommend-service/newbee-mall-cloud-recommend-web/src/main/java/ltd/recommend/cloud/newbee/service/impl/NewBeeMallCarouselServiceImpl.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.recommend.cloud.newbee.service.impl;\n\nimport ltd.common.cloud.newbee.enums.ServiceResultEnum;\nimport ltd.common.cloud.newbee.dto.PageQueryUtil;\nimport ltd.common.cloud.newbee.dto.PageResult;\nimport ltd.common.cloud.newbee.util.BeanUtil;\nimport ltd.recommend.cloud.newbee.controller.vo.NewBeeMallIndexCarouselVO;\nimport ltd.recommend.cloud.newbee.dao.CarouselMapper;\nimport ltd.recommend.cloud.newbee.entity.Carousel;\nimport ltd.recommend.cloud.newbee.service.NewBeeMallCarouselService;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\nimport org.springframework.util.CollectionUtils;\n\nimport java.util.ArrayList;\nimport java.util.Date;\nimport java.util.List;\n\n@Service\npublic class NewBeeMallCarouselServiceImpl implements NewBeeMallCarouselService {\n\n    @Autowired\n    private CarouselMapper carouselMapper;\n\n\n    @Override\n    public PageResult getCarouselPage(PageQueryUtil pageUtil) {\n        List<Carousel> carousels = carouselMapper.findCarouselList(pageUtil);\n        int total = carouselMapper.getTotalCarousels(pageUtil);\n        PageResult pageResult = new PageResult(carousels, total, pageUtil.getLimit(), pageUtil.getPage());\n        return pageResult;\n    }\n\n    @Override\n    public String saveCarousel(Carousel carousel) {\n        if (carouselMapper.insertSelective(carousel) > 0) {\n            return ServiceResultEnum.SUCCESS.getResult();\n        }\n        return ServiceResultEnum.DB_ERROR.getResult();\n    }\n\n    @Override\n    public String updateCarousel(Carousel carousel) {\n        Carousel temp = carouselMapper.selectByPrimaryKey(carousel.getCarouselId());\n        if (temp == null) {\n            return ServiceResultEnum.DATA_NOT_EXIST.getResult();\n        }\n        temp.setCarouselRank(carousel.getCarouselRank());\n        temp.setRedirectUrl(carousel.getRedirectUrl());\n        temp.setCarouselUrl(carousel.getCarouselUrl());\n        temp.setUpdateTime(new Date());\n        if (carouselMapper.updateByPrimaryKeySelective(temp) > 0) {\n            return ServiceResultEnum.SUCCESS.getResult();\n        }\n        return ServiceResultEnum.DB_ERROR.getResult();\n    }\n\n    @Override\n    public Carousel getCarouselById(Integer id) {\n        return carouselMapper.selectByPrimaryKey(id);\n    }\n\n    @Override\n    public Boolean deleteBatch(Long[] ids) {\n        if (ids.length < 1) {\n            return false;\n        }\n        //删除数据\n        return carouselMapper.deleteBatch(ids) > 0;\n    }\n\n    @Override\n    public List<NewBeeMallIndexCarouselVO> getCarouselsForIndex(int number) {\n        List<NewBeeMallIndexCarouselVO> newBeeMallIndexCarouselVOS = new ArrayList<>(number);\n        List<Carousel> carousels = carouselMapper.findCarouselsByNum(number);\n        if (!CollectionUtils.isEmpty(carousels)) {\n            newBeeMallIndexCarouselVOS = BeanUtil.copyList(carousels, NewBeeMallIndexCarouselVO.class);\n        }\n        return newBeeMallIndexCarouselVOS;\n    }\n\n}\n"
  },
  {
    "path": "newbee-mall-cloud-recommend-service/newbee-mall-cloud-recommend-web/src/main/java/ltd/recommend/cloud/newbee/service/impl/NewBeeMallIndexConfigServiceImpl.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.recommend.cloud.newbee.service.impl;\n\nimport ltd.common.cloud.newbee.enums.ServiceResultEnum;\nimport ltd.common.cloud.newbee.dto.PageQueryUtil;\nimport ltd.common.cloud.newbee.dto.PageResult;\nimport ltd.common.cloud.newbee.dto.Result;\nimport ltd.common.cloud.newbee.util.BeanUtil;\nimport ltd.goods.cloud.newbee.dto.NewBeeMallGoodsDTO;\nimport ltd.goods.cloud.newbee.openfeign.NewBeeCloudGoodsServiceFeign;\nimport ltd.recommend.cloud.newbee.controller.vo.NewBeeMallIndexConfigGoodsVO;\nimport ltd.recommend.cloud.newbee.dao.IndexConfigMapper;\nimport ltd.recommend.cloud.newbee.entity.IndexConfig;\nimport ltd.recommend.cloud.newbee.service.NewBeeMallIndexConfigService;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\nimport org.springframework.util.CollectionUtils;\n\nimport java.util.ArrayList;\nimport java.util.Date;\nimport java.util.List;\nimport java.util.stream.Collectors;\n\n@Service\npublic class NewBeeMallIndexConfigServiceImpl implements NewBeeMallIndexConfigService {\n\n    @Autowired\n    private IndexConfigMapper indexConfigMapper;\n\n    @Autowired\n    private NewBeeCloudGoodsServiceFeign goodsService;\n\n    @Override\n    public PageResult getConfigsPage(PageQueryUtil pageUtil) {\n        List<IndexConfig> indexConfigs = indexConfigMapper.findIndexConfigList(pageUtil);\n        int total = indexConfigMapper.getTotalIndexConfigs(pageUtil);\n        PageResult pageResult = new PageResult(indexConfigs, total, pageUtil.getLimit(), pageUtil.getPage());\n        return pageResult;\n    }\n\n    @Override\n    public String saveIndexConfig(IndexConfig indexConfig) {\n        Result<NewBeeMallGoodsDTO> goodsDetailResult = goodsService.getGoodsDetail(indexConfig.getGoodsId());\n        if (goodsDetailResult == null || goodsDetailResult.getResultCode() != 200) {\n            return ServiceResultEnum.GOODS_NOT_EXIST.getResult();\n        }\n        if (indexConfigMapper.selectByTypeAndGoodsId(indexConfig.getConfigType(), indexConfig.getGoodsId()) != null) {\n            return ServiceResultEnum.SAME_INDEX_CONFIG_EXIST.getResult();\n        }\n        if (indexConfigMapper.insertSelective(indexConfig) > 0) {\n            return ServiceResultEnum.SUCCESS.getResult();\n        }\n        return ServiceResultEnum.DB_ERROR.getResult();\n    }\n\n    @Override\n    public String updateIndexConfig(IndexConfig indexConfig) {\n        Result<NewBeeMallGoodsDTO> goodsDetailResult = goodsService.getGoodsDetail(indexConfig.getGoodsId());\n        if (goodsDetailResult == null || goodsDetailResult.getResultCode() != 200) {\n            return ServiceResultEnum.GOODS_NOT_EXIST.getResult();\n        }\n        IndexConfig temp = indexConfigMapper.selectByPrimaryKey(indexConfig.getConfigId());\n        if (temp == null) {\n            return ServiceResultEnum.DATA_NOT_EXIST.getResult();\n        }\n        IndexConfig temp2 = indexConfigMapper.selectByTypeAndGoodsId(indexConfig.getConfigType(), indexConfig.getGoodsId());\n        if (temp2 != null && !temp2.getConfigId().equals(indexConfig.getConfigId())) {\n            //goodsId相同且不同id 不能继续修改\n            return ServiceResultEnum.SAME_INDEX_CONFIG_EXIST.getResult();\n        }\n        indexConfig.setUpdateTime(new Date());\n        if (indexConfigMapper.updateByPrimaryKeySelective(indexConfig) > 0) {\n            return ServiceResultEnum.SUCCESS.getResult();\n        }\n        return ServiceResultEnum.DB_ERROR.getResult();\n    }\n\n    @Override\n    public IndexConfig getIndexConfigById(Long id) {\n        return indexConfigMapper.selectByPrimaryKey(id);\n    }\n\n    @Override\n    public Boolean deleteBatch(Long[] ids) {\n        if (ids.length < 1) {\n            return false;\n        }\n        //删除数据\n        return indexConfigMapper.deleteBatch(ids) > 0;\n    }\n\n\n    @Override\n    public List<NewBeeMallIndexConfigGoodsVO> getConfigGoodsesForIndex(int configType, int number) {\n        List<NewBeeMallIndexConfigGoodsVO> newBeeMallIndexConfigGoodsVOS = new ArrayList<>(number);\n        List<IndexConfig> indexConfigs = indexConfigMapper.findIndexConfigsByTypeAndNum(configType, number);\n        if (!CollectionUtils.isEmpty(indexConfigs)) {\n            //取出所有的goodsId\n            List<Long> goodsIds = indexConfigs.stream().map(IndexConfig::getGoodsId).collect(Collectors.toList());\n            Result<List<NewBeeMallGoodsDTO>> newBeeMallGoodsDTOResult = goodsService.listByGoodsIds(goodsIds);\n            newBeeMallIndexConfigGoodsVOS = BeanUtil.copyList(newBeeMallGoodsDTOResult.getData(), NewBeeMallIndexConfigGoodsVO.class);\n            for (NewBeeMallIndexConfigGoodsVO newBeeMallIndexConfigGoodsVO : newBeeMallIndexConfigGoodsVOS) {\n                String goodsName = newBeeMallIndexConfigGoodsVO.getGoodsName();\n                String goodsIntro = newBeeMallIndexConfigGoodsVO.getGoodsIntro();\n                // 字符串过长导致文字超出的问题\n                if (goodsName.length() > 30) {\n                    goodsName = goodsName.substring(0, 30) + \"...\";\n                    newBeeMallIndexConfigGoodsVO.setGoodsName(goodsName);\n                }\n                if (goodsIntro.length() > 22) {\n                    goodsIntro = goodsIntro.substring(0, 22) + \"...\";\n                    newBeeMallIndexConfigGoodsVO.setGoodsIntro(goodsIntro);\n                }\n            }\n        }\n        return newBeeMallIndexConfigGoodsVOS;\n    }\n}\n"
  },
  {
    "path": "newbee-mall-cloud-recommend-service/newbee-mall-cloud-recommend-web/src/main/resources/application.properties",
    "content": "server.port=29020\n# 服务名称\nspring.application.name=newbee-mall-cloud-recommend-service\n# Nacos地址\nspring.cloud.nacos.discovery.server-addr=127.0.0.1:8848\n# Nacos登录用户名(默认为nacos，生产环境一定要修改)\nspring.cloud.nacos.username=nacos\n# Nacos登录密码(默认为nacos，生产环境一定要修改)\nspring.cloud.nacos.password=nacos\n\n# datasource config (MySQL)\nspring.datasource.name=newbee-mall-cloud-recommend-datasource\nspring.datasource.driverClassName=com.mysql.cj.jdbc.Driver\nspring.datasource.url=jdbc:mysql://localhost:3306/newbee_mall_cloud_recommend_db?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=utf8&autoReconnect=true&useSSL=false\nspring.datasource.username=root\nspring.datasource.password=123456\nspring.datasource.hikari.minimum-idle=5\nspring.datasource.hikari.maximum-pool-size=15\nspring.datasource.hikari.auto-commit=true\nspring.datasource.hikari.idle-timeout=60000\nspring.datasource.hikari.pool-name=hikariCP\nspring.datasource.hikari.max-lifetime=600000\nspring.datasource.hikari.connection-timeout=30000\nspring.datasource.hikari.connection-test-query=SELECT 1\n\n# mybatis config\nmybatis.mapper-locations=classpath:mapper/*Mapper.xml\n\n# openfeign config\nfeign.client.config.default.connectTimeout=2000\nfeign.client.config.default.readTimeout=5000\nfeign.compression.request.enabled=true\nfeign.compression.request.mime-types=text/xml,application/xml,application/json\nfeign.compression.request.min-request-size=1024\nfeign.compression.response.enabled=true\n\n# 演示需要，开启OpenFeign和当前项目中的DEBUG级别日志\n#logging.level.ltd.user.cloud.newbee.openfeign=debug\n#logging.level.ltd.goods.cloud.newbee.openfeign=debug\n#logging.level.ltd.recommend.cloud.newbee=debug\n\n# sentinel config\nspring.cloud.sentinel.transport.port=8920\nspring.cloud.sentinel.transport.clientIp=127.0.0.1\n# 指定Sentinel控制台地址\nspring.cloud.sentinel.transport.dashboard=127.0.0.1:9113\n\n# Sleuth采样率，取值范围为[0.1,1.0]，值越大收集越及时，但性能影响也越大\nspring.sleuth.sampler.probability=1.0\n# 每秒数据采集量，最多n条/秒Trace\nspring.sleuth.sampler.rate=500\n\nspring.zipkin.base-url=http://localhost:9411"
  },
  {
    "path": "newbee-mall-cloud-recommend-service/newbee-mall-cloud-recommend-web/src/main/resources/logback.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE configuration>\n<configuration>\n    <include resource=\"org/springframework/boot/logging/logback/defaults.xml\"/>\n    <include resource=\"org/springframework/boot/logging/logback/console-appender.xml\"/>\n    <!--应用名称-->\n    <property name=\"APP_NAME\" value=\"newbee-mall-cloud-recommend-service-log\"/>\n    <contextName>${APP_NAME}</contextName>\n\n    <!-- 控制台输出 -->\n    <appender name=\"CONSOLE\" class=\"ch.qos.logback.core.ConsoleAppender\">\n        <filter class=\"ch.qos.logback.classic.filter.ThresholdFilter\">\n            <level>INFO</level>\n        </filter>\n        <!-- 日志输出编码 -->\n        <encoder>\n            <pattern>${CONSOLE_LOG_PATTERN}</pattern>\n            <charset>utf8</charset>\n        </encoder>\n    </appender>\n\n    <appender name=\"LOGSTASH\" class=\"net.logstash.logback.appender.LogstashTcpSocketAppender\">\n        <!--可以访问的logstash日志收集端口-->\n        <destination>192.168.110.57:4560</destination>\n        <filter class=\"ch.qos.logback.classic.filter.ThresholdFilter\">\n            <level>INFO</level>\n        </filter>\n        <encoder charset=\"UTF-8\" class=\"net.logstash.logback.encoder.LogstashEncoder\"/>\n    </appender>\n\n    <root level=\"INFO\">\n        <appender-ref ref=\"CONSOLE\"/>\n        <appender-ref ref=\"LOGSTASH\"/>\n    </root>\n</configuration>\n\n"
  },
  {
    "path": "newbee-mall-cloud-recommend-service/newbee-mall-cloud-recommend-web/src/main/resources/mapper/CarouselMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n严肃声明：\n开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\nCopyright (c) 2022 程序员十三 all rights reserved.\n版权所有，侵权必究！\n-->\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"ltd.recommend.cloud.newbee.dao.CarouselMapper\">\n    <resultMap id=\"BaseResultMap\" type=\"ltd.recommend.cloud.newbee.entity.Carousel\">\n        <id column=\"carousel_id\" jdbcType=\"INTEGER\" property=\"carouselId\"/>\n        <result column=\"carousel_url\" jdbcType=\"VARCHAR\" property=\"carouselUrl\"/>\n        <result column=\"redirect_url\" jdbcType=\"VARCHAR\" property=\"redirectUrl\"/>\n        <result column=\"carousel_rank\" jdbcType=\"INTEGER\" property=\"carouselRank\"/>\n        <result column=\"is_deleted\" jdbcType=\"TINYINT\" property=\"isDeleted\"/>\n        <result column=\"create_time\" jdbcType=\"TIMESTAMP\" property=\"createTime\"/>\n        <result column=\"create_user\" jdbcType=\"INTEGER\" property=\"createUser\"/>\n        <result column=\"update_time\" jdbcType=\"TIMESTAMP\" property=\"updateTime\"/>\n        <result column=\"update_user\" jdbcType=\"INTEGER\" property=\"updateUser\"/>\n    </resultMap>\n    <sql id=\"Base_Column_List\">\n    carousel_id, carousel_url, redirect_url, carousel_rank, is_deleted, create_time, \n    create_user, update_time, update_user\n  </sql>\n    <select id=\"findCarouselList\" parameterType=\"Map\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"Base_Column_List\"/>\n        from tb_newbee_mall_carousel\n        where is_deleted = 0\n        order by carousel_rank desc\n        <if test=\"start!=null and limit!=null\">\n            limit #{start},#{limit}\n        </if>\n    </select>\n    <select id=\"getTotalCarousels\" parameterType=\"Map\" resultType=\"int\">\n        select count(*) from tb_newbee_mall_carousel\n        where is_deleted = 0\n    </select>\n    <select id=\"selectByPrimaryKey\" parameterType=\"java.lang.Integer\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"Base_Column_List\"/>\n        from tb_newbee_mall_carousel\n        where carousel_id = #{carouselId,jdbcType=INTEGER} and is_deleted=0\n    </select>\n    <select id=\"findCarouselsByNum\" parameterType=\"int\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"Base_Column_List\"/>\n        from tb_newbee_mall_carousel\n        where is_deleted = 0\n        order by carousel_rank desc\n        limit #{number}\n    </select>\n    <delete id=\"deleteByPrimaryKey\" parameterType=\"java.lang.Integer\">\n    delete from tb_newbee_mall_carousel\n    where carousel_id = #{carouselId,jdbcType=INTEGER}\n  </delete>\n    <insert id=\"insert\" parameterType=\"ltd.recommend.cloud.newbee.entity.Carousel\">\n    insert into tb_newbee_mall_carousel (carousel_id, carousel_url, redirect_url, \n      carousel_rank, is_deleted, create_time, \n      create_user, update_time, update_user\n      )\n    values (#{carouselId,jdbcType=INTEGER}, #{carouselUrl,jdbcType=VARCHAR}, #{redirectUrl,jdbcType=VARCHAR}, \n      #{carouselRank,jdbcType=INTEGER}, #{isDeleted,jdbcType=TINYINT}, #{createTime,jdbcType=TIMESTAMP}, \n      #{createUser,jdbcType=INTEGER}, #{updateTime,jdbcType=TIMESTAMP}, #{updateUser,jdbcType=INTEGER}\n      )\n  </insert>\n    <insert id=\"insertSelective\" parameterType=\"ltd.recommend.cloud.newbee.entity.Carousel\">\n        insert into tb_newbee_mall_carousel\n        <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\n            <if test=\"carouselId != null\">\n                carousel_id,\n            </if>\n            <if test=\"carouselUrl != null\">\n                carousel_url,\n            </if>\n            <if test=\"redirectUrl != null\">\n                redirect_url,\n            </if>\n            <if test=\"carouselRank != null\">\n                carousel_rank,\n            </if>\n            <if test=\"isDeleted != null\">\n                is_deleted,\n            </if>\n            <if test=\"createTime != null\">\n                create_time,\n            </if>\n            <if test=\"createUser != null\">\n                create_user,\n            </if>\n            <if test=\"updateTime != null\">\n                update_time,\n            </if>\n            <if test=\"updateUser != null\">\n                update_user,\n            </if>\n        </trim>\n        <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n            <if test=\"carouselId != null\">\n                #{carouselId,jdbcType=INTEGER},\n            </if>\n            <if test=\"carouselUrl != null\">\n                #{carouselUrl,jdbcType=VARCHAR},\n            </if>\n            <if test=\"redirectUrl != null\">\n                #{redirectUrl,jdbcType=VARCHAR},\n            </if>\n            <if test=\"carouselRank != null\">\n                #{carouselRank,jdbcType=INTEGER},\n            </if>\n            <if test=\"isDeleted != null\">\n                #{isDeleted,jdbcType=TINYINT},\n            </if>\n            <if test=\"createTime != null\">\n                #{createTime,jdbcType=TIMESTAMP},\n            </if>\n            <if test=\"createUser != null\">\n                #{createUser,jdbcType=INTEGER},\n            </if>\n            <if test=\"updateTime != null\">\n                #{updateTime,jdbcType=TIMESTAMP},\n            </if>\n            <if test=\"updateUser != null\">\n                #{updateUser,jdbcType=INTEGER},\n            </if>\n        </trim>\n    </insert>\n    <update id=\"updateByPrimaryKeySelective\" parameterType=\"ltd.recommend.cloud.newbee.entity.Carousel\">\n        update tb_newbee_mall_carousel\n        <set>\n            <if test=\"carouselUrl != null\">\n                carousel_url = #{carouselUrl,jdbcType=VARCHAR},\n            </if>\n            <if test=\"redirectUrl != null\">\n                redirect_url = #{redirectUrl,jdbcType=VARCHAR},\n            </if>\n            <if test=\"carouselRank != null\">\n                carousel_rank = #{carouselRank,jdbcType=INTEGER},\n            </if>\n            <if test=\"isDeleted != null\">\n                is_deleted = #{isDeleted,jdbcType=TINYINT},\n            </if>\n            <if test=\"createTime != null\">\n                create_time = #{createTime,jdbcType=TIMESTAMP},\n            </if>\n            <if test=\"createUser != null\">\n                create_user = #{createUser,jdbcType=INTEGER},\n            </if>\n            <if test=\"updateTime != null\">\n                update_time = #{updateTime,jdbcType=TIMESTAMP},\n            </if>\n            <if test=\"updateUser != null\">\n                update_user = #{updateUser,jdbcType=INTEGER},\n            </if>\n        </set>\n        where carousel_id = #{carouselId,jdbcType=INTEGER}\n    </update>\n    <update id=\"updateByPrimaryKey\" parameterType=\"ltd.recommend.cloud.newbee.entity.Carousel\">\n    update tb_newbee_mall_carousel\n    set carousel_url = #{carouselUrl,jdbcType=VARCHAR},\n      redirect_url = #{redirectUrl,jdbcType=VARCHAR},\n      carousel_rank = #{carouselRank,jdbcType=INTEGER},\n      is_deleted = #{isDeleted,jdbcType=TINYINT},\n      create_time = #{createTime,jdbcType=TIMESTAMP},\n      create_user = #{createUser,jdbcType=INTEGER},\n      update_time = #{updateTime,jdbcType=TIMESTAMP},\n      update_user = #{updateUser,jdbcType=INTEGER}\n    where carousel_id = #{carouselId,jdbcType=INTEGER}\n  </update>\n    <update id=\"deleteBatch\">\n        update tb_newbee_mall_carousel\n        set is_deleted=1,update_time=now() where carousel_id in\n        <foreach item=\"id\" collection=\"array\" open=\"(\" separator=\",\" close=\")\">\n            #{id}\n        </foreach>\n    </update>\n</mapper>"
  },
  {
    "path": "newbee-mall-cloud-recommend-service/newbee-mall-cloud-recommend-web/src/main/resources/mapper/IndexConfigMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n严肃声明：\n开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\nCopyright (c) 2022 程序员十三 all rights reserved.\n版权所有，侵权必究！\n-->\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"ltd.recommend.cloud.newbee.dao.IndexConfigMapper\">\n    <resultMap id=\"BaseResultMap\" type=\"ltd.recommend.cloud.newbee.entity.IndexConfig\">\n        <id column=\"config_id\" jdbcType=\"BIGINT\" property=\"configId\"/>\n        <result column=\"config_name\" jdbcType=\"VARCHAR\" property=\"configName\"/>\n        <result column=\"config_type\" jdbcType=\"TINYINT\" property=\"configType\"/>\n        <result column=\"goods_id\" jdbcType=\"BIGINT\" property=\"goodsId\"/>\n        <result column=\"redirect_url\" jdbcType=\"VARCHAR\" property=\"redirectUrl\"/>\n        <result column=\"config_rank\" jdbcType=\"INTEGER\" property=\"configRank\"/>\n        <result column=\"is_deleted\" jdbcType=\"TINYINT\" property=\"isDeleted\"/>\n        <result column=\"create_time\" jdbcType=\"TIMESTAMP\" property=\"createTime\"/>\n        <result column=\"create_user\" jdbcType=\"INTEGER\" property=\"createUser\"/>\n        <result column=\"update_time\" jdbcType=\"TIMESTAMP\" property=\"updateTime\"/>\n        <result column=\"update_user\" jdbcType=\"INTEGER\" property=\"updateUser\"/>\n    </resultMap>\n    <sql id=\"Base_Column_List\">\n    config_id, config_name, config_type, goods_id, redirect_url, config_rank, is_deleted, \n    create_time, create_user, update_time, update_user\n  </sql>\n\n    <select id=\"findIndexConfigList\" parameterType=\"Map\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"Base_Column_List\"/>\n        from tb_newbee_mall_index_config\n        <where>\n            <if test=\"configType!=null and configType!=''\">\n                and config_type = #{configType}\n            </if>\n            and is_deleted = 0\n        </where>\n        order by config_rank desc\n        <if test=\"start!=null and limit!=null\">\n            limit #{start},#{limit}\n        </if>\n    </select>\n    <select id=\"getTotalIndexConfigs\" parameterType=\"Map\" resultType=\"int\">\n        select count(*) from tb_newbee_mall_index_config\n        <where>\n            <if test=\"configType!=null and configType!=''\">\n                and config_type = #{configType}\n            </if>\n            and is_deleted = 0\n        </where>\n    </select>\n    <select id=\"findIndexConfigsByTypeAndNum\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"Base_Column_List\"/>\n        from tb_newbee_mall_index_config\n        where config_type = #{configType} and is_deleted = 0\n        order by config_rank desc\n        limit #{number}\n    </select>\n    <select id=\"selectByPrimaryKey\" parameterType=\"java.lang.Long\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"Base_Column_List\"/>\n        from tb_newbee_mall_index_config\n        where config_id = #{configId,jdbcType=BIGINT} and is_deleted=0\n    </select>\n    <select id=\"selectByTypeAndGoodsId\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"Base_Column_List\"/>\n        from tb_newbee_mall_index_config\n        where config_type = #{configType,jdbcType=BIGINT} and goods_id=#{goodsId,jdbcType=BIGINT} and is_deleted=0 limit 1\n    </select>\n    <update id=\"deleteByPrimaryKey\" parameterType=\"java.lang.Long\">\n    update tb_newbee_mall_index_config set is_deleted=1\n    where config_id = #{configId,jdbcType=BIGINT} and is_deleted=0\n  </update>\n    <update id=\"deleteBatch\">\n        update tb_newbee_mall_index_config\n        set is_deleted=1,update_time=now() where is_deleted=0 and config_id in\n        <foreach item=\"id\" collection=\"array\" open=\"(\" separator=\",\" close=\")\">\n            #{id}\n        </foreach>\n    </update>\n    <insert id=\"insert\" parameterType=\"ltd.recommend.cloud.newbee.entity.IndexConfig\">\n    insert into tb_newbee_mall_index_config (config_id, config_name, config_type, \n      goods_id, redirect_url, config_rank, \n      is_deleted, create_time, create_user, \n      update_time, update_user)\n    values (#{configId,jdbcType=BIGINT}, #{configName,jdbcType=VARCHAR}, #{configType,jdbcType=TINYINT}, \n      #{goodsId,jdbcType=BIGINT}, #{redirectUrl,jdbcType=VARCHAR}, #{configRank,jdbcType=INTEGER}, \n      #{isDeleted,jdbcType=TINYINT}, #{createTime,jdbcType=TIMESTAMP}, #{createUser,jdbcType=INTEGER}, \n      #{updateTime,jdbcType=TIMESTAMP}, #{updateUser,jdbcType=INTEGER})\n  </insert>\n    <insert id=\"insertSelective\" parameterType=\"ltd.recommend.cloud.newbee.entity.IndexConfig\">\n        insert into tb_newbee_mall_index_config\n        <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\n            <if test=\"configId != null\">\n                config_id,\n            </if>\n            <if test=\"configName != null\">\n                config_name,\n            </if>\n            <if test=\"configType != null\">\n                config_type,\n            </if>\n            <if test=\"goodsId != null\">\n                goods_id,\n            </if>\n            <if test=\"redirectUrl != null\">\n                redirect_url,\n            </if>\n            <if test=\"configRank != null\">\n                config_rank,\n            </if>\n            <if test=\"isDeleted != null\">\n                is_deleted,\n            </if>\n            <if test=\"createTime != null\">\n                create_time,\n            </if>\n            <if test=\"createUser != null\">\n                create_user,\n            </if>\n            <if test=\"updateTime != null\">\n                update_time,\n            </if>\n            <if test=\"updateUser != null\">\n                update_user,\n            </if>\n        </trim>\n        <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n            <if test=\"configId != null\">\n                #{configId,jdbcType=BIGINT},\n            </if>\n            <if test=\"configName != null\">\n                #{configName,jdbcType=VARCHAR},\n            </if>\n            <if test=\"configType != null\">\n                #{configType,jdbcType=TINYINT},\n            </if>\n            <if test=\"goodsId != null\">\n                #{goodsId,jdbcType=BIGINT},\n            </if>\n            <if test=\"redirectUrl != null\">\n                #{redirectUrl,jdbcType=VARCHAR},\n            </if>\n            <if test=\"configRank != null\">\n                #{configRank,jdbcType=INTEGER},\n            </if>\n            <if test=\"isDeleted != null\">\n                #{isDeleted,jdbcType=TINYINT},\n            </if>\n            <if test=\"createTime != null\">\n                #{createTime,jdbcType=TIMESTAMP},\n            </if>\n            <if test=\"createUser != null\">\n                #{createUser,jdbcType=INTEGER},\n            </if>\n            <if test=\"updateTime != null\">\n                #{updateTime,jdbcType=TIMESTAMP},\n            </if>\n            <if test=\"updateUser != null\">\n                #{updateUser,jdbcType=INTEGER},\n            </if>\n        </trim>\n    </insert>\n    <update id=\"updateByPrimaryKeySelective\" parameterType=\"ltd.recommend.cloud.newbee.entity.IndexConfig\">\n        update tb_newbee_mall_index_config\n        <set>\n            <if test=\"configName != null\">\n                config_name = #{configName,jdbcType=VARCHAR},\n            </if>\n            <if test=\"configType != null\">\n                config_type = #{configType,jdbcType=TINYINT},\n            </if>\n            <if test=\"goodsId != null\">\n                goods_id = #{goodsId,jdbcType=BIGINT},\n            </if>\n            <if test=\"redirectUrl != null\">\n                redirect_url = #{redirectUrl,jdbcType=VARCHAR},\n            </if>\n            <if test=\"configRank != null\">\n                config_rank = #{configRank,jdbcType=INTEGER},\n            </if>\n            <if test=\"isDeleted != null\">\n                is_deleted = #{isDeleted,jdbcType=TINYINT},\n            </if>\n            <if test=\"createTime != null\">\n                create_time = #{createTime,jdbcType=TIMESTAMP},\n            </if>\n            <if test=\"createUser != null\">\n                create_user = #{createUser,jdbcType=INTEGER},\n            </if>\n            <if test=\"updateTime != null\">\n                update_time = #{updateTime,jdbcType=TIMESTAMP},\n            </if>\n            <if test=\"updateUser != null\">\n                update_user = #{updateUser,jdbcType=INTEGER},\n            </if>\n        </set>\n        where config_id = #{configId,jdbcType=BIGINT}\n    </update>\n    <update id=\"updateByPrimaryKey\" parameterType=\"ltd.recommend.cloud.newbee.entity.IndexConfig\">\n    update tb_newbee_mall_index_config\n    set config_name = #{configName,jdbcType=VARCHAR},\n      config_type = #{configType,jdbcType=TINYINT},\n      goods_id = #{goodsId,jdbcType=BIGINT},\n      redirect_url = #{redirectUrl,jdbcType=VARCHAR},\n      config_rank = #{configRank,jdbcType=INTEGER},\n      is_deleted = #{isDeleted,jdbcType=TINYINT},\n      create_time = #{createTime,jdbcType=TIMESTAMP},\n      create_user = #{createUser,jdbcType=INTEGER},\n      update_time = #{updateTime,jdbcType=TIMESTAMP},\n      update_user = #{updateUser,jdbcType=INTEGER}\n    where config_id = #{configId,jdbcType=BIGINT}\n  </update>\n</mapper>"
  },
  {
    "path": "newbee-mall-cloud-recommend-service/pom.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--  @author 程序员十三\n      @qq交流群 791509631\n      @email 2449207463@qq.com\n      @link https://github.com/newbee-ltd -->\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd\">\n    <modelVersion>4.0.0</modelVersion>\n    <groupId>ltd.newbee.cloud</groupId>\n    <artifactId>newbee-mall-cloud-recommend-service</artifactId>\n    <version>0.0.1-SNAPSHOT</version>\n    <packaging>pom</packaging>\n    <name>newbee-mall-cloud-recommend-service</name>\n    <description>推荐模块</description>\n\n    <parent>\n        <groupId>ltd.newbee.cloud</groupId>\n        <artifactId>newbee-mall-cloud</artifactId>\n        <version>0.0.1-SNAPSHOT</version>\n    </parent>\n\n    <properties>\n        <java.version>1.8</java.version>\n    </properties>\n\n    <modules>\n        <module>newbee-mall-cloud-recommend-web</module>\n        <module>newbee-mall-cloud-recommend-api</module>\n    </modules>\n\n    <dependencies>\n\n    </dependencies>\n    <!--  @author 程序员十三\n      @qq交流群 791509631\n      @email 2449207463@qq.com\n      @link https://github.com/newbee-ltd -->\n</project>\n"
  },
  {
    "path": "newbee-mall-cloud-shop-cart-service/newbee-mall-cloud-shop-cart-api/pom.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--  @author 程序员十三\n      @qq交流群 791509631\n      @email 2449207463@qq.com\n      @link https://github.com/newbee-ltd -->\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd\">\n    <modelVersion>4.0.0</modelVersion>\n    <groupId>ltd.shopcart.newbee.cloud</groupId>\n    <artifactId>newbee-mall-cloud-shop-cart-api</artifactId>\n    <packaging>jar</packaging>\n    <version>0.0.1-SNAPSHOT</version>\n    <name>newbee-mall-cloud-shop-cart-api</name>\n    <description>购物车服务openfeign</description>\n\n    <parent>\n        <groupId>ltd.newbee.cloud</groupId>\n        <artifactId>newbee-mall-cloud-shop-cart-service</artifactId>\n        <version>0.0.1-SNAPSHOT</version>\n    </parent>\n\n    <properties>\n        <java.version>1.8</java.version>\n    </properties>\n\n    <dependencies>\n\n        <dependency>\n            <groupId>org.springframework.cloud</groupId>\n            <artifactId>spring-cloud-starter-openfeign</artifactId>\n        </dependency>\n\n        <dependency>\n            <groupId>ltd.newbee.cloud</groupId>\n            <artifactId>newbee-mall-cloud-common</artifactId>\n            <version>0.0.1-SNAPSHOT</version>\n        </dependency>\n\n    </dependencies>\n    <!--  @author 程序员十三\n      @qq交流群 791509631\n      @email 2449207463@qq.com\n      @link https://github.com/newbee-ltd -->\n</project>\n"
  },
  {
    "path": "newbee-mall-cloud-shop-cart-service/newbee-mall-cloud-shop-cart-api/src/main/java/ltd/shopcart/cloud/newbee/dto/NewBeeMallShoppingCartItemDTO.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.shopcart.cloud.newbee.dto;\n\nimport java.io.Serializable;\n\npublic class NewBeeMallShoppingCartItemDTO implements Serializable {\n\n    private Long cartItemId;\n\n    private Long userId;\n\n    private Long goodsId;\n\n    private Integer goodsCount;\n\n    public Long getCartItemId() {\n        return cartItemId;\n    }\n\n    public void setCartItemId(Long cartItemId) {\n        this.cartItemId = cartItemId;\n    }\n\n    public Long getUserId() {\n        return userId;\n    }\n\n    public void setUserId(Long userId) {\n        this.userId = userId;\n    }\n\n    public Long getGoodsId() {\n        return goodsId;\n    }\n\n    public void setGoodsId(Long goodsId) {\n        this.goodsId = goodsId;\n    }\n\n    public Integer getGoodsCount() {\n        return goodsCount;\n    }\n\n    public void setGoodsCount(Integer goodsCount) {\n        this.goodsCount = goodsCount;\n    }\n}\n"
  },
  {
    "path": "newbee-mall-cloud-shop-cart-service/newbee-mall-cloud-shop-cart-api/src/main/java/ltd/shopcart/cloud/newbee/openfeign/NewBeeCloudShopCartServiceFeign.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本系统已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.shopcart.cloud.newbee.openfeign;\n\nimport ltd.common.cloud.newbee.dto.Result;\nimport ltd.shopcart.cloud.newbee.dto.NewBeeMallShoppingCartItemDTO;\nimport org.springframework.cloud.openfeign.FeignClient;\nimport org.springframework.web.bind.annotation.DeleteMapping;\nimport org.springframework.web.bind.annotation.GetMapping;\nimport org.springframework.web.bind.annotation.RequestParam;\n\nimport java.util.List;\n\n@FeignClient(value = \"newbee-mall-cloud-shop-cart-service\", path = \"/shop-cart\")\npublic interface NewBeeCloudShopCartServiceFeign {\n\n    @GetMapping(value = \"/listByCartItemIds\")\n    Result<List<NewBeeMallShoppingCartItemDTO>> listByCartItemIds(@RequestParam(value = \"cartItemIds\") List<Long> cartItemIds);\n\n    @DeleteMapping(value = \"/deleteByCartItemIds\")\n    Result<Boolean> deleteByCartItemIds(@RequestParam(value = \"cartItemIds\") List<Long> cartItemIds);\n}\n"
  },
  {
    "path": "newbee-mall-cloud-shop-cart-service/newbee-mall-cloud-shop-cart-web/pom.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--  @author 程序员十三\n      @qq交流群 791509631\n      @email 2449207463@qq.com\n      @link https://github.com/newbee-ltd -->\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd\">\n    <modelVersion>4.0.0</modelVersion>\n    <groupId>ltd.shopcart.newbee.cloud</groupId>\n    <artifactId>newbee-mall-cloud-shop-cart-web</artifactId>\n    <version>0.0.1-SNAPSHOT</version>\n    <name>newbee-mall-cloud-shop-cart-web</name>\n    <description>购物车服务</description>\n\n    <parent>\n        <groupId>ltd.newbee.cloud</groupId>\n        <artifactId>newbee-mall-cloud-shop-cart-service</artifactId>\n        <version>0.0.1-SNAPSHOT</version>\n    </parent>\n\n    <properties>\n        <java.version>1.8</java.version>\n    </properties>\n\n    <dependencies>\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter-web</artifactId>\n        </dependency>\n\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter-test</artifactId>\n            <scope>test</scope>\n        </dependency>\n\n        <dependency>\n            <groupId>com.alibaba.cloud</groupId>\n            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>\n        </dependency>\n\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter-validation</artifactId>\n        </dependency>\n\n        <dependency>\n            <groupId>org.mybatis.spring.boot</groupId>\n            <artifactId>mybatis-spring-boot-starter</artifactId>\n        </dependency>\n\n        <!-- Seata 依赖包 -->\n        <dependency>\n            <groupId>com.alibaba.cloud</groupId>\n            <artifactId>spring-cloud-starter-alibaba-seata</artifactId>\n        </dependency>\n\n        <dependency>\n            <groupId>org.projectlombok</groupId>\n            <artifactId>lombok</artifactId>\n            <version>${lombok.version}</version>\n            <scope>provided</scope>\n        </dependency>\n\n        <dependency>\n            <groupId>io.springfox</groupId>\n            <artifactId>springfox-boot-starter</artifactId>\n        </dependency>\n\n        <dependency>\n            <groupId>mysql</groupId>\n            <artifactId>mysql-connector-java</artifactId>\n            <scope>runtime</scope>\n        </dependency>\n\n        <dependency>\n            <groupId>ltd.newbee.cloud</groupId>\n            <artifactId>newbee-mall-cloud-common</artifactId>\n            <version>0.0.1-SNAPSHOT</version>\n        </dependency>\n\n        <dependency>\n            <groupId>org.springframework.cloud</groupId>\n            <artifactId>spring-cloud-starter-openfeign</artifactId>\n        </dependency>\n\n        <dependency>\n            <groupId>org.springframework.cloud</groupId>\n            <artifactId>spring-cloud-starter-loadbalancer</artifactId>\n        </dependency>\n\n        <dependency>\n            <groupId>com.alibaba.cloud</groupId>\n            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>\n        </dependency>\n\n        <!-- Sleuth依赖项 -->\n        <dependency>\n            <groupId>org.springframework.cloud</groupId>\n            <artifactId>spring-cloud-starter-sleuth</artifactId>\n        </dependency>\n        <!--Zipkin 依赖-->\n        <dependency>\n            <groupId>org.springframework.cloud</groupId>\n            <artifactId>spring-cloud-sleuth-zipkin</artifactId>\n        </dependency>\n\n        <dependency>\n            <groupId>net.logstash.logback</groupId>\n            <artifactId>logstash-logback-encoder</artifactId>\n            <version>${logstash-logback-encoder.version}</version>\n        </dependency>\n\n        <dependency>\n            <groupId>ltd.user.newbee.cloud</groupId>\n            <artifactId>newbee-mall-cloud-user-api</artifactId>\n            <version>0.0.1-SNAPSHOT</version>\n        </dependency>\n\n        <dependency>\n            <groupId>ltd.goods.newbee.cloud</groupId>\n            <artifactId>newbee-mall-cloud-goods-api</artifactId>\n            <version>0.0.1-SNAPSHOT</version>\n        </dependency>\n\n    </dependencies>\n    <!--  @author 程序员十三\n      @qq交流群 791509631\n      @email 2449207463@qq.com\n      @link https://github.com/newbee-ltd -->\n</project>\n"
  },
  {
    "path": "newbee-mall-cloud-shop-cart-service/newbee-mall-cloud-shop-cart-web/src/main/java/ltd/shopcart/cloud/newbee/NewBeeMallCloudShopCartServiceApplication.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本系统已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.shopcart.cloud.newbee;\n\nimport ltd.goods.cloud.newbee.openfeign.NewBeeCloudGoodsServiceFeign;\nimport ltd.user.cloud.newbee.openfeign.NewBeeCloudUserServiceFeign;\nimport org.mybatis.spring.annotation.MapperScan;\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigure.SpringBootApplication;\nimport org.springframework.cloud.client.discovery.EnableDiscoveryClient;\nimport org.springframework.cloud.openfeign.EnableFeignClients;\n\n/**\n * @author 程序员十三\n * @qq交流群 791509631\n * @email 2449207463@qq.com\n * @link https://github.com/newbee-ltd\n */\n@SpringBootApplication\n@EnableDiscoveryClient\n@MapperScan(\"ltd.shopcart.cloud.newbee.dao\")\n@EnableFeignClients(basePackageClasses ={NewBeeCloudUserServiceFeign.class, NewBeeCloudGoodsServiceFeign.class})\npublic class NewBeeMallCloudShopCartServiceApplication {\n\n    public static void main(String[] args) {\n        System.setProperty(\"nacos.logging.default.config.enabled\",\"false\");\n        SpringApplication.run(NewBeeMallCloudShopCartServiceApplication.class, args);\n    }\n\n}\n"
  },
  {
    "path": "newbee-mall-cloud-shop-cart-service/newbee-mall-cloud-shop-cart-web/src/main/java/ltd/shopcart/cloud/newbee/config/OpenFeignConfiguration.java",
    "content": "package ltd.shopcart.cloud.newbee.config;\n\nimport feign.Logger;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\n\n@Configuration\npublic class OpenFeignConfiguration {\n    @Bean\n    public Logger.Level openFeignLogLevel() {\n        // 设置OpenFeign日志级别\n        return Logger.Level.FULL;\n    }\n}\n"
  },
  {
    "path": "newbee-mall-cloud-shop-cart-service/newbee-mall-cloud-shop-cart-web/src/main/java/ltd/shopcart/cloud/newbee/config/SeataProxyConfiguration.java",
    "content": "package ltd.shopcart.cloud.newbee.config;\n\nimport com.alibaba.druid.pool.DruidDataSource;\nimport io.seata.rm.datasource.DataSourceProxy;\nimport org.springframework.boot.context.properties.ConfigurationProperties;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\nimport org.springframework.context.annotation.Primary;\n\nimport javax.annotation.PostConstruct;\nimport javax.sql.DataSource;\n\n@Configuration\npublic class SeataProxyConfiguration {\n\n    //创建Druid数据源\n    @Bean\n    @ConfigurationProperties(prefix = \"spring.datasource\")\n    public DruidDataSource druidDataSource() {\n        return new DruidDataSource();\n    }\n\n    //创建DataSource数据源代理\n    @Bean(\"dataSource\")\n    @Primary\n    public DataSource dataSourceDelegation(DruidDataSource druidDataSource) {\n        return new DataSourceProxy(druidDataSource);\n    }\n\n    /*\n     * 解决druid 日志报错：discard long time none received connection:xxx\n     * */\n    @PostConstruct\n    public void setProperties(){\n        System.setProperty(\"druid.mysql.usePingMethod\",\"false\");\n    }\n\n}\n\n"
  },
  {
    "path": "newbee-mall-cloud-shop-cart-service/newbee-mall-cloud-shop-cart-web/src/main/java/ltd/shopcart/cloud/newbee/config/ShopCartServiceExceptionHandler.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.shopcart.cloud.newbee.config;\n\nimport ltd.common.cloud.newbee.enums.ServiceResultEnum;\nimport ltd.common.cloud.newbee.dto.Result;\nimport ltd.common.cloud.newbee.exception.NewBeeMallException;\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport org.springframework.validation.BindException;\nimport org.springframework.validation.BindingResult;\nimport org.springframework.web.bind.MethodArgumentNotValidException;\nimport org.springframework.web.bind.annotation.ExceptionHandler;\nimport org.springframework.web.bind.annotation.RestControllerAdvice;\n\nimport javax.servlet.http.HttpServletRequest;\nimport java.util.Objects;\n\n/**\n * 全局异常处理\n */\n@RestControllerAdvice\npublic class ShopCartServiceExceptionHandler {\n\n    private static final Logger log = LoggerFactory.getLogger(ShopCartServiceExceptionHandler.class);\n\n    @ExceptionHandler(BindException.class)\n    public Object bindException(BindException e) {\n        log.error(\"ShopCartServiceExceptionHandler:\",e);\n        Result result = new Result();\n        result.setResultCode(510);\n        BindingResult bindingResult = e.getBindingResult();\n        result.setMessage(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());\n        return result;\n    }\n\n    @ExceptionHandler(MethodArgumentNotValidException.class)\n    public Object bindException(MethodArgumentNotValidException e) {\n        log.error(\"ShopCartServiceExceptionHandler:\",e);\n        Result result = new Result();\n        result.setResultCode(510);\n        BindingResult bindingResult = e.getBindingResult();\n        result.setMessage(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());\n        return result;\n    }\n\n    @ExceptionHandler(Exception.class)\n    public Object handleException(Exception e, HttpServletRequest req) {\n        log.error(\"ShopCartServiceExceptionHandler:\",e);\n        Result result = new Result();\n        result.setResultCode(500);\n        //区分是否为自定义异常\n        if (e instanceof NewBeeMallException) {\n            result.setMessage(e.getMessage());\n            if (e.getMessage().equals(ServiceResultEnum.NOT_LOGIN_ERROR.getResult()) || e.getMessage().equals(ServiceResultEnum.TOKEN_EXPIRE_ERROR.getResult())) {\n                result.setResultCode(416);\n            }\n        } else {\n            e.printStackTrace();\n            result.setMessage(\"未知异常，请查看控制台日志并检查配置文件。\");\n        }\n        return result;\n\n    }\n}\n"
  },
  {
    "path": "newbee-mall-cloud-shop-cart-service/newbee-mall-cloud-shop-cart-web/src/main/java/ltd/shopcart/cloud/newbee/config/ShopCartServiceSwagger3Config.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.shopcart.cloud.newbee.config;\n\nimport ltd.common.cloud.newbee.pojo.MallUserToken;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\nimport springfox.documentation.builders.ApiInfoBuilder;\nimport springfox.documentation.builders.PathSelectors;\nimport springfox.documentation.builders.RequestHandlerSelectors;\nimport springfox.documentation.builders.RequestParameterBuilder;\nimport springfox.documentation.oas.annotations.EnableOpenApi;\nimport springfox.documentation.schema.ScalarType;\nimport springfox.documentation.service.ApiInfo;\nimport springfox.documentation.service.ParameterType;\nimport springfox.documentation.service.RequestParameter;\nimport springfox.documentation.spi.DocumentationType;\nimport springfox.documentation.spring.web.plugins.Docket;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\n@Configuration\n@EnableOpenApi\npublic class ShopCartServiceSwagger3Config{\n\n    @Bean\n    public Docket api() {\n        return new Docket(DocumentationType.OAS_30)\n                .apiInfo(apiInfo())\n                .ignoredParameterTypes(MallUserToken.class)\n                .select()\n                .apis(RequestHandlerSelectors.basePackage(\"ltd.shopcart.cloud.newbee.controller\"))\n                .paths(PathSelectors.any())\n                .build()\n                .globalRequestParameters(getGlobalRequestParameters());\n    }\n\n    //生成全局通用参数\n    private List<RequestParameter> getGlobalRequestParameters() {\n        List<RequestParameter> parameters = new ArrayList<>();\n        parameters.add(new RequestParameterBuilder()\n                .name(\"token\")\n                .description(\"登录认证token\")\n                .required(false) // 非必传\n                .in(ParameterType.HEADER) //请求头中的参数，其它类型可以点进ParameterType类中查看\n                .query(q -> q.model(m -> m.scalarModel(ScalarType.STRING)))\n                .build());\n        return parameters;\n    }\n\n    private ApiInfo apiInfo() {\n        return new ApiInfoBuilder()\n                .title(\"newbee-mall-cloud-shop-cart-service接口文档\")\n                .description(\"swagger接口文档\")\n                .version(\"2.0\")\n                .build();\n    }\n}"
  },
  {
    "path": "newbee-mall-cloud-shop-cart-service/newbee-mall-cloud-shop-cart-web/src/main/java/ltd/shopcart/cloud/newbee/config/ShopCartServiceWebMvcConfigurer.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.shopcart.cloud.newbee.config;\n\nimport com.alibaba.cloud.seata.web.SeataHandlerInterceptor;\nimport com.alibaba.cloud.sentinel.SentinelProperties;\nimport com.alibaba.csp.sentinel.adapter.spring.webmvc.SentinelWebInterceptor;\nimport ltd.shopcart.cloud.newbee.config.handler.TokenToMallUserMethodArgumentResolver;\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.context.annotation.Configuration;\nimport org.springframework.context.annotation.Lazy;\nimport org.springframework.web.method.support.HandlerMethodArgumentResolver;\nimport org.springframework.web.servlet.HandlerInterceptor;\nimport org.springframework.web.servlet.config.annotation.InterceptorRegistry;\nimport org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;\nimport org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;\nimport org.springframework.web.servlet.config.annotation.WebMvcConfigurer;\n\nimport java.util.List;\nimport java.util.Optional;\n\n@Configuration\npublic class ShopCartServiceWebMvcConfigurer extends WebMvcConfigurationSupport {\n\n    private static final Logger log = LoggerFactory.getLogger(ShopCartServiceWebMvcConfigurer.class);\n\n    @Autowired\n    private SentinelProperties sentinelProperties;\n    @Autowired\n    private Optional<SentinelWebInterceptor> sentinelWebInterceptorOptional;\n    @Autowired\n    @Lazy\n    private TokenToMallUserMethodArgumentResolver tokenToMallUserMethodArgumentResolver;\n\n    /**\n     * @param argumentResolvers\n     * @tip @TokenToMallUser 注解处理方法\n     */\n    public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {\n        argumentResolvers.add(tokenToMallUserMethodArgumentResolver);\n    }\n\n    @Override\n    public void addResourceHandlers(ResourceHandlerRegistry registry) {\n        registry.\n                addResourceHandler(\"/swagger-ui/**\")\n                .addResourceLocations(\"classpath:/META-INF/resources/webjars/springfox-swagger-ui/\")\n                .resourceChain(false);\n    }\n\n    public void addInterceptors(InterceptorRegistry registry) {\n        registry.addInterceptor(new SeataHandlerInterceptor()).addPathPatterns(\"/**\");\n        if (this.sentinelWebInterceptorOptional.isPresent()) {\n            SentinelProperties.Filter filterConfig = this.sentinelProperties.getFilter();\n            registry.addInterceptor((HandlerInterceptor) this.sentinelWebInterceptorOptional.get()).order(filterConfig.getOrder()).addPathPatterns(filterConfig.getUrlPatterns());\n            log.info(\"[Sentinel Starter] register SentinelWebInterceptor with urlPatterns: {}.\", filterConfig.getUrlPatterns());\n        }\n    }\n}\n"
  },
  {
    "path": "newbee-mall-cloud-shop-cart-service/newbee-mall-cloud-shop-cart-web/src/main/java/ltd/shopcart/cloud/newbee/config/annotation/TokenToMallUser.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.shopcart.cloud.newbee.config.annotation;\n\nimport java.lang.annotation.*;\n\n@Target({ElementType.PARAMETER})\n@Retention(RetentionPolicy.RUNTIME)\n@Documented\npublic @interface TokenToMallUser {\n\n    /**\n     * 当前用户在request中的名字\n     *\n     * @return\n     */\n    String value() default \"user\";\n\n}\n"
  },
  {
    "path": "newbee-mall-cloud-shop-cart-service/newbee-mall-cloud-shop-cart-web/src/main/java/ltd/shopcart/cloud/newbee/config/handler/TokenToMallUserMethodArgumentResolver.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.shopcart.cloud.newbee.config.handler;\n\nimport ltd.common.cloud.newbee.enums.ServiceResultEnum;\nimport ltd.common.cloud.newbee.dto.Result;\nimport ltd.common.cloud.newbee.exception.NewBeeMallException;\nimport ltd.common.cloud.newbee.pojo.MallUserToken;\nimport ltd.shopcart.cloud.newbee.config.annotation.TokenToMallUser;\nimport ltd.user.cloud.newbee.dto.MallUserDTO;\nimport ltd.user.cloud.newbee.openfeign.NewBeeCloudUserServiceFeign;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.core.MethodParameter;\nimport org.springframework.stereotype.Component;\nimport org.springframework.web.bind.support.WebDataBinderFactory;\nimport org.springframework.web.context.request.NativeWebRequest;\nimport org.springframework.web.method.support.HandlerMethodArgumentResolver;\nimport org.springframework.web.method.support.ModelAndViewContainer;\n\n@Component\npublic class TokenToMallUserMethodArgumentResolver implements HandlerMethodArgumentResolver {\n\n    @Autowired\n    private NewBeeCloudUserServiceFeign newBeeCloudUserService;\n\n    public TokenToMallUserMethodArgumentResolver() {\n    }\n\n    public boolean supportsParameter(MethodParameter parameter) {\n        if (parameter.hasParameterAnnotation(TokenToMallUser.class)) {\n            return true;\n        }\n        return false;\n    }\n\n    public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) {\n        if (parameter.getParameterAnnotation(TokenToMallUser.class) instanceof TokenToMallUser) {\n            String token = webRequest.getHeader(\"token\");\n            if (null != token && !\"\".equals(token) && token.length() == 32) {\n                Result<MallUserDTO> result = newBeeCloudUserService.getMallUserByToken(token);\n                if (result == null || result.getResultCode() != 200 || result.getData() == null) {\n                    NewBeeMallException.fail(ServiceResultEnum.TOKEN_EXPIRE_ERROR.getResult());\n                }\n                MallUserToken mallUserToken = new MallUserToken();\n                mallUserToken.setToken(token);\n                mallUserToken.setUserId(result.getData().getUserId());\n                return mallUserToken;\n            } else {\n                NewBeeMallException.fail(ServiceResultEnum.NOT_LOGIN_ERROR.getResult());\n            }\n        }\n        return null;\n    }\n\n}\n"
  },
  {
    "path": "newbee-mall-cloud-shop-cart-service/newbee-mall-cloud-shop-cart-web/src/main/java/ltd/shopcart/cloud/newbee/controller/NewBeeMallShoppingCartController.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.shopcart.cloud.newbee.controller;\n\nimport io.seata.core.context.RootContext;\nimport io.swagger.annotations.Api;\nimport io.swagger.annotations.ApiOperation;\nimport ltd.common.cloud.newbee.enums.ServiceResultEnum;\nimport ltd.common.cloud.newbee.dto.PageQueryUtil;\nimport ltd.common.cloud.newbee.dto.PageResult;\nimport ltd.common.cloud.newbee.dto.Result;\nimport ltd.common.cloud.newbee.dto.ResultGenerator;\nimport ltd.common.cloud.newbee.exception.NewBeeMallException;\nimport ltd.common.cloud.newbee.pojo.MallUserToken;\nimport ltd.shopcart.cloud.newbee.config.annotation.TokenToMallUser;\nimport ltd.shopcart.cloud.newbee.controller.param.SaveCartItemParam;\nimport ltd.shopcart.cloud.newbee.controller.param.UpdateCartItemParam;\nimport ltd.shopcart.cloud.newbee.controller.vo.NewBeeMallShoppingCartItemVO;\nimport ltd.shopcart.cloud.newbee.entity.NewBeeMallShoppingCartItem;\nimport ltd.shopcart.cloud.newbee.service.NewBeeMallShoppingCartService;\nimport org.springframework.http.HttpRequest;\nimport org.springframework.util.CollectionUtils;\nimport org.springframework.web.bind.annotation.*;\n\nimport javax.annotation.Resource;\nimport javax.servlet.http.HttpServletRequest;\nimport java.util.Arrays;\nimport java.util.HashMap;\nimport java.util.List;\nimport java.util.Map;\n\n@RestController\n@Api(value = \"v1\", tags = \"新蜂商城购物车相关接口\")\npublic class NewBeeMallShoppingCartController {\n\n    @Resource\n    private NewBeeMallShoppingCartService newBeeMallShoppingCartService;\n\n    @GetMapping(\"/shop-cart/page\")\n    @ApiOperation(value = \"购物车列表(每页默认5条)\", notes = \"传参为页码\")\n    public Result<PageResult<List<NewBeeMallShoppingCartItemVO>>> cartItemPageList(Integer pageNumber, @TokenToMallUser MallUserToken loginMallUserToken) {\n        Map params = new HashMap(8);\n        if (pageNumber == null || pageNumber < 1) {\n            pageNumber = 1;\n        }\n        params.put(\"userId\", loginMallUserToken.getUserId());\n        params.put(\"page\", pageNumber);\n        params.put(\"limit\", 5);\n        //封装分页请求参数\n        PageQueryUtil pageUtil = new PageQueryUtil(params);\n        return ResultGenerator.genSuccessResult(newBeeMallShoppingCartService.getMyShoppingCartItems(pageUtil));\n    }\n\n    @GetMapping(\"/shop-cart\")\n    @ApiOperation(value = \"购物车列表(网页移动端不分页)\", notes = \"\")\n    public Result<List<NewBeeMallShoppingCartItemVO>> cartItemList(@TokenToMallUser MallUserToken loginMallUserToken) {\n        return ResultGenerator.genSuccessResult(newBeeMallShoppingCartService.getMyShoppingCartItems(loginMallUserToken.getUserId()));\n    }\n\n    @PostMapping(\"/shop-cart\")\n    @ApiOperation(value = \"添加商品到购物车接口\", notes = \"传参为商品id、数量\")\n    public Result saveNewBeeMallShoppingCartItem(@RequestBody SaveCartItemParam saveCartItemParam,\n                                                 @TokenToMallUser MallUserToken loginMallUserToken) {\n        String saveResult = newBeeMallShoppingCartService.saveNewBeeMallCartItem(saveCartItemParam, loginMallUserToken.getUserId());\n        //添加成功\n        if (ServiceResultEnum.SUCCESS.getResult().equals(saveResult)) {\n            return ResultGenerator.genSuccessResult();\n        }\n        //添加失败\n        return ResultGenerator.genFailResult(saveResult);\n    }\n\n    @PutMapping(\"/shop-cart\")\n    @ApiOperation(value = \"修改购物项数据\", notes = \"传参为购物项id、数量\")\n    public Result updateNewBeeMallShoppingCartItem(@RequestBody UpdateCartItemParam updateCartItemParam,\n                                                   @TokenToMallUser MallUserToken loginMallUserToken) {\n        String updateResult = newBeeMallShoppingCartService.updateNewBeeMallCartItem(updateCartItemParam, loginMallUserToken.getUserId());\n        //修改成功\n        if (ServiceResultEnum.SUCCESS.getResult().equals(updateResult)) {\n            return ResultGenerator.genSuccessResult();\n        }\n        //修改失败\n        return ResultGenerator.genFailResult(updateResult);\n    }\n\n    @DeleteMapping(\"/shop-cart/{newBeeMallShoppingCartItemId}\")\n    @ApiOperation(value = \"删除购物项\", notes = \"传参为购物项id\")\n    public Result updateNewBeeMallShoppingCartItem(@PathVariable(\"newBeeMallShoppingCartItemId\") Long newBeeMallShoppingCartItemId,\n                                                   @TokenToMallUser MallUserToken loginMallUserToken) {\n        NewBeeMallShoppingCartItem newBeeMallCartItemById = newBeeMallShoppingCartService.getNewBeeMallCartItemById(newBeeMallShoppingCartItemId);\n        if (!loginMallUserToken.getUserId().equals(newBeeMallCartItemById.getUserId())) {\n            return ResultGenerator.genFailResult(ServiceResultEnum.REQUEST_FORBIDEN_ERROR.getResult());\n        }\n        Boolean deleteResult = newBeeMallShoppingCartService.deleteById(newBeeMallShoppingCartItemId, loginMallUserToken.getUserId());\n        //删除成功\n        if (deleteResult) {\n            return ResultGenerator.genSuccessResult();\n        }\n        //删除失败\n        return ResultGenerator.genFailResult(ServiceResultEnum.OPERATE_ERROR.getResult());\n    }\n\n    @GetMapping(\"/shop-cart/settle\")\n    @ApiOperation(value = \"根据购物项id数组查询购物项明细\", notes = \"确认订单页面使用\")\n    public Result<List<NewBeeMallShoppingCartItemVO>> toSettle(Long[] cartItemIds, @TokenToMallUser MallUserToken loginMallUserToken) {\n        if (cartItemIds.length < 1) {\n            NewBeeMallException.fail(\"参数异常\");\n        }\n        int priceTotal = 0;\n        List<NewBeeMallShoppingCartItemVO> itemsForSettle = newBeeMallShoppingCartService.getCartItemsForSettle(Arrays.asList(cartItemIds), loginMallUserToken.getUserId());\n        if (CollectionUtils.isEmpty(itemsForSettle)) {\n            //无数据则抛出异常\n            NewBeeMallException.fail(\"参数异常\");\n        } else {\n            //总价\n            for (NewBeeMallShoppingCartItemVO newBeeMallShoppingCartItemVO : itemsForSettle) {\n                priceTotal += newBeeMallShoppingCartItemVO.getGoodsCount() * newBeeMallShoppingCartItemVO.getSellingPrice();\n            }\n            if (priceTotal < 1) {\n                NewBeeMallException.fail(\"价格异常\");\n            }\n        }\n        return ResultGenerator.genSuccessResult(itemsForSettle);\n    }\n\n    @GetMapping(\"/shop-cart/listByCartItemIds\")\n    @ApiOperation(value = \"购物车列表\", notes = \"\")\n    public Result<List<NewBeeMallShoppingCartItem>> cartItemListByIds(@RequestParam(\"cartItemIds\") List<Long> cartItemIds) {\n        if (CollectionUtils.isEmpty(cartItemIds)) {\n            return ResultGenerator.genFailResult(\"error param\");\n        }\n        return ResultGenerator.genSuccessResult(newBeeMallShoppingCartService.getCartItemsByCartIds(cartItemIds));\n    }\n\n    @DeleteMapping(\"/shop-cart/deleteByCartItemIds\")\n    @ApiOperation(value = \"批量删除购物项\", notes = \"\")\n    public Result<Boolean> deleteByCartItemIds(@RequestParam(\"cartItemIds\") List<Long> cartItemIds, HttpServletRequest request) {\n        System.out.println(\"RootContext.getXID()=\"+ RootContext.getXID());\n        if (CollectionUtils.isEmpty(cartItemIds)) {\n            return ResultGenerator.genFailResult(\"error param\");\n        }\n        return ResultGenerator.genSuccessResult(newBeeMallShoppingCartService.deleteCartItemsByCartIds(cartItemIds) > 0);\n    }\n}\n"
  },
  {
    "path": "newbee-mall-cloud-shop-cart-service/newbee-mall-cloud-shop-cart-web/src/main/java/ltd/shopcart/cloud/newbee/controller/param/SaveCartItemParam.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.shopcart.cloud.newbee.controller.param;\n\nimport io.swagger.annotations.ApiModelProperty;\nimport lombok.Data;\n\nimport java.io.Serializable;\n\n/**\n * 添加购物项param\n */\n@Data\npublic class SaveCartItemParam implements Serializable {\n\n    @ApiModelProperty(\"商品数量\")\n    private Integer goodsCount;\n\n    @ApiModelProperty(\"商品id\")\n    private Long goodsId;\n}\n"
  },
  {
    "path": "newbee-mall-cloud-shop-cart-service/newbee-mall-cloud-shop-cart-web/src/main/java/ltd/shopcart/cloud/newbee/controller/param/UpdateCartItemParam.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.shopcart.cloud.newbee.controller.param;\n\nimport io.swagger.annotations.ApiModelProperty;\nimport lombok.Data;\n\nimport java.io.Serializable;\n\n/**\n * 修改购物项param\n */\n@Data\npublic class UpdateCartItemParam implements Serializable {\n\n    @ApiModelProperty(\"购物项id\")\n    private Long cartItemId;\n\n    @ApiModelProperty(\"商品数量\")\n    private Integer goodsCount;\n}\n"
  },
  {
    "path": "newbee-mall-cloud-shop-cart-service/newbee-mall-cloud-shop-cart-web/src/main/java/ltd/shopcart/cloud/newbee/controller/vo/NewBeeMallShoppingCartItemVO.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.shopcart.cloud.newbee.controller.vo;\n\nimport io.swagger.annotations.ApiModelProperty;\nimport lombok.Data;\n\nimport java.io.Serializable;\n\n/**\n * 购物车页面购物项VO\n */\n@Data\npublic class NewBeeMallShoppingCartItemVO implements Serializable {\n\n    @ApiModelProperty(\"购物项id\")\n    private Long cartItemId;\n\n    @ApiModelProperty(\"商品id\")\n    private Long goodsId;\n\n    @ApiModelProperty(\"商品数量\")\n    private Integer goodsCount;\n\n    @ApiModelProperty(\"商品名称\")\n    private String goodsName;\n\n    @ApiModelProperty(\"商品图片\")\n    private String goodsCoverImg;\n\n    @ApiModelProperty(\"商品价格\")\n    private Integer sellingPrice;\n}\n"
  },
  {
    "path": "newbee-mall-cloud-shop-cart-service/newbee-mall-cloud-shop-cart-web/src/main/java/ltd/shopcart/cloud/newbee/dao/NewBeeMallShoppingCartItemMapper.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.shopcart.cloud.newbee.dao;\n\nimport ltd.common.cloud.newbee.dto.PageQueryUtil;\nimport ltd.shopcart.cloud.newbee.entity.NewBeeMallShoppingCartItem;\nimport org.apache.ibatis.annotations.Param;\n\nimport java.util.List;\n\npublic interface NewBeeMallShoppingCartItemMapper {\n    int deleteByPrimaryKey(Long cartItemId);\n\n    int insert(NewBeeMallShoppingCartItem record);\n\n    int insertSelective(NewBeeMallShoppingCartItem record);\n\n    NewBeeMallShoppingCartItem selectByPrimaryKey(Long cartItemId);\n\n    NewBeeMallShoppingCartItem selectByUserIdAndGoodsId(@Param(\"newBeeMallUserId\") Long newBeeMallUserId, @Param(\"goodsId\") Long goodsId);\n\n    List<NewBeeMallShoppingCartItem> selectByUserId(@Param(\"newBeeMallUserId\") Long newBeeMallUserId, @Param(\"number\") int number);\n\n    List<NewBeeMallShoppingCartItem> selectByUserIdAndCartItemIds(@Param(\"newBeeMallUserId\") Long newBeeMallUserId, @Param(\"cartItemIds\") List<Long> cartItemIds);\n\n    List<NewBeeMallShoppingCartItem> selectByCartItemIds(@Param(\"cartItemIds\") List<Long> cartItemIds);\n\n    int selectCountByUserId(Long newBeeMallUserId);\n\n    int updateByPrimaryKeySelective(NewBeeMallShoppingCartItem record);\n\n    int updateByPrimaryKey(NewBeeMallShoppingCartItem record);\n\n    int deleteBatch(List<Long> ids);\n\n    List<NewBeeMallShoppingCartItem> findMyNewBeeMallCartItems(PageQueryUtil pageUtil);\n\n    int getTotalMyNewBeeMallCartItems(PageQueryUtil pageUtil);\n}"
  },
  {
    "path": "newbee-mall-cloud-shop-cart-service/newbee-mall-cloud-shop-cart-web/src/main/java/ltd/shopcart/cloud/newbee/entity/NewBeeMallShoppingCartItem.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.shopcart.cloud.newbee.entity;\n\nimport lombok.Data;\n\nimport java.util.Date;\n\n@Data\npublic class NewBeeMallShoppingCartItem {\n    private Long cartItemId;\n\n    private Long userId;\n\n    private Long goodsId;\n\n    private Integer goodsCount;\n\n    private Byte isDeleted;\n\n    private Date createTime;\n\n    private Date updateTime;\n}"
  },
  {
    "path": "newbee-mall-cloud-shop-cart-service/newbee-mall-cloud-shop-cart-web/src/main/java/ltd/shopcart/cloud/newbee/service/NewBeeMallShoppingCartService.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.shopcart.cloud.newbee.service;\n\nimport ltd.common.cloud.newbee.dto.PageQueryUtil;\nimport ltd.common.cloud.newbee.dto.PageResult;\nimport ltd.shopcart.cloud.newbee.controller.param.SaveCartItemParam;\nimport ltd.shopcart.cloud.newbee.controller.param.UpdateCartItemParam;\nimport ltd.shopcart.cloud.newbee.controller.vo.NewBeeMallShoppingCartItemVO;\nimport ltd.shopcart.cloud.newbee.entity.NewBeeMallShoppingCartItem;\n\nimport java.util.List;\n\npublic interface NewBeeMallShoppingCartService {\n\n    /**\n     * 保存商品至购物车中\n     *\n     * @param saveCartItemParam\n     * @param userId\n     * @return\n     */\n    String saveNewBeeMallCartItem(SaveCartItemParam saveCartItemParam, Long userId);\n\n    /**\n     * 修改购物车中的属性\n     *\n     * @param updateCartItemParam\n     * @param userId\n     * @return\n     */\n    String updateNewBeeMallCartItem(UpdateCartItemParam updateCartItemParam, Long userId);\n\n    /**\n     * 获取购物项详情\n     *\n     * @param newBeeMallShoppingCartItemId\n     * @return\n     */\n    NewBeeMallShoppingCartItem getNewBeeMallCartItemById(Long newBeeMallShoppingCartItemId);\n\n    /**\n     * 删除购物车中的商品\n     *\n     * @param shoppingCartItemId\n     * @param userId\n     * @return\n     */\n    Boolean deleteById(Long shoppingCartItemId, Long userId);\n\n    /**\n     * 获取我的购物车中的列表数据\n     *\n     * @param newBeeMallUserId\n     * @return\n     */\n    List<NewBeeMallShoppingCartItemVO> getMyShoppingCartItems(Long newBeeMallUserId);\n\n    /**\n     * 根据userId和cartItemIds获取对应的购物项记录\n     *\n     * @param cartItemIds\n     * @param newBeeMallUserId\n     * @return\n     */\n    List<NewBeeMallShoppingCartItemVO> getCartItemsForSettle(List<Long> cartItemIds, Long newBeeMallUserId);\n\n\n    /**\n     * 根据cartItemIds获取对应的购物项记录\n     *\n     * @param cartItemIds\n     * @return\n     */\n    List<NewBeeMallShoppingCartItem> getCartItemsByCartIds(List<Long> cartItemIds);\n\n    /**\n     * 批量删除购物项记录\n     *\n     * @param cartItemIds\n     * @return\n     */\n    int deleteCartItemsByCartIds(List<Long> cartItemIds);\n\n    /**\n     * 我的购物车(分页数据)\n     *\n     * @param pageUtil\n     * @return\n     */\n    PageResult getMyShoppingCartItems(PageQueryUtil pageUtil);\n}\n"
  },
  {
    "path": "newbee-mall-cloud-shop-cart-service/newbee-mall-cloud-shop-cart-web/src/main/java/ltd/shopcart/cloud/newbee/service/impl/NewBeeMallShoppingCartServiceImpl.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.shopcart.cloud.newbee.service.impl;\n\nimport ltd.common.cloud.newbee.enums.ServiceResultEnum;\nimport ltd.common.cloud.newbee.dto.PageQueryUtil;\nimport ltd.common.cloud.newbee.dto.PageResult;\nimport ltd.common.cloud.newbee.dto.Result;\nimport ltd.common.cloud.newbee.exception.NewBeeMallException;\nimport ltd.common.cloud.newbee.util.BeanUtil;\nimport ltd.goods.cloud.newbee.dto.NewBeeMallGoodsDTO;\nimport ltd.goods.cloud.newbee.openfeign.NewBeeCloudGoodsServiceFeign;\nimport ltd.shopcart.cloud.newbee.controller.param.SaveCartItemParam;\nimport ltd.shopcart.cloud.newbee.controller.param.UpdateCartItemParam;\nimport ltd.shopcart.cloud.newbee.controller.vo.NewBeeMallShoppingCartItemVO;\nimport ltd.shopcart.cloud.newbee.dao.NewBeeMallShoppingCartItemMapper;\nimport ltd.shopcart.cloud.newbee.entity.NewBeeMallShoppingCartItem;\nimport ltd.shopcart.cloud.newbee.service.NewBeeMallShoppingCartService;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\nimport org.springframework.util.CollectionUtils;\n\nimport java.util.*;\nimport java.util.function.Function;\nimport java.util.stream.Collectors;\n\n@Service\npublic class NewBeeMallShoppingCartServiceImpl implements NewBeeMallShoppingCartService {\n\n    @Autowired\n    private NewBeeMallShoppingCartItemMapper newBeeMallShoppingCartItemMapper;\n\n    @Autowired\n    private NewBeeCloudGoodsServiceFeign goodsService;\n\n    @Override\n    public String saveNewBeeMallCartItem(SaveCartItemParam saveCartItemParam, Long userId) {\n        NewBeeMallShoppingCartItem temp = newBeeMallShoppingCartItemMapper.selectByUserIdAndGoodsId(userId, saveCartItemParam.getGoodsId());\n        if (temp != null) {\n            //已存在则修改该记录\n            NewBeeMallException.fail(ServiceResultEnum.SHOPPING_CART_ITEM_EXIST_ERROR.getResult());\n        }\n        Result<NewBeeMallGoodsDTO> goodsDetailResult = goodsService.getGoodsDetail(saveCartItemParam.getGoodsId());\n        //商品为空\n        if (goodsDetailResult == null || goodsDetailResult.getResultCode() != 200) {\n            return ServiceResultEnum.GOODS_NOT_EXIST.getResult();\n        }\n        int totalItem = newBeeMallShoppingCartItemMapper.selectCountByUserId(userId);\n        //超出单个商品的最大数量\n        if (saveCartItemParam.getGoodsCount() < 1) {\n            return ServiceResultEnum.SHOPPING_CART_ITEM_NUMBER_ERROR.getResult();\n        }\n        //超出单个商品的最大数量\n        if (saveCartItemParam.getGoodsCount() > 5) {\n            return ServiceResultEnum.SHOPPING_CART_ITEM_LIMIT_NUMBER_ERROR.getResult();\n        }\n        //超出最大数量\n        if (totalItem > 20) {\n            return ServiceResultEnum.SHOPPING_CART_ITEM_TOTAL_NUMBER_ERROR.getResult();\n        }\n        NewBeeMallShoppingCartItem newBeeMallShoppingCartItem = new NewBeeMallShoppingCartItem();\n        BeanUtil.copyProperties(saveCartItemParam, newBeeMallShoppingCartItem);\n        newBeeMallShoppingCartItem.setUserId(userId);\n        //保存记录\n        if (newBeeMallShoppingCartItemMapper.insertSelective(newBeeMallShoppingCartItem) > 0) {\n            return ServiceResultEnum.SUCCESS.getResult();\n        }\n        return ServiceResultEnum.DB_ERROR.getResult();\n    }\n\n    @Override\n    public String updateNewBeeMallCartItem(UpdateCartItemParam updateCartItemParam, Long userId) {\n        NewBeeMallShoppingCartItem newBeeMallShoppingCartItemUpdate = newBeeMallShoppingCartItemMapper.selectByPrimaryKey(updateCartItemParam.getCartItemId());\n        if (newBeeMallShoppingCartItemUpdate == null) {\n            return ServiceResultEnum.DATA_NOT_EXIST.getResult();\n        }\n        if (!newBeeMallShoppingCartItemUpdate.getUserId().equals(userId)) {\n            NewBeeMallException.fail(ServiceResultEnum.REQUEST_FORBIDEN_ERROR.getResult());\n        }\n        //超出单个商品的最大数量\n        if (updateCartItemParam.getGoodsCount() > 5) {\n            return ServiceResultEnum.SHOPPING_CART_ITEM_LIMIT_NUMBER_ERROR.getResult();\n        }\n        //当前登录账号的userId与待修改的cartItem中userId不同，返回错误\n        if (!newBeeMallShoppingCartItemUpdate.getUserId().equals(userId)) {\n            return ServiceResultEnum.NO_PERMISSION_ERROR.getResult();\n        }\n        //数值相同，则不执行数据操作\n        if (updateCartItemParam.getGoodsCount().equals(newBeeMallShoppingCartItemUpdate.getGoodsCount())) {\n            return ServiceResultEnum.SUCCESS.getResult();\n        }\n        newBeeMallShoppingCartItemUpdate.setGoodsCount(updateCartItemParam.getGoodsCount());\n        newBeeMallShoppingCartItemUpdate.setUpdateTime(new Date());\n        //修改记录\n        if (newBeeMallShoppingCartItemMapper.updateByPrimaryKeySelective(newBeeMallShoppingCartItemUpdate) > 0) {\n            return ServiceResultEnum.SUCCESS.getResult();\n        }\n        return ServiceResultEnum.DB_ERROR.getResult();\n    }\n\n    @Override\n    public NewBeeMallShoppingCartItem getNewBeeMallCartItemById(Long newBeeMallShoppingCartItemId) {\n        NewBeeMallShoppingCartItem newBeeMallShoppingCartItem = newBeeMallShoppingCartItemMapper.selectByPrimaryKey(newBeeMallShoppingCartItemId);\n        if (newBeeMallShoppingCartItem == null) {\n            NewBeeMallException.fail(ServiceResultEnum.DATA_NOT_EXIST.getResult());\n        }\n        return newBeeMallShoppingCartItem;\n    }\n\n    @Override\n    public Boolean deleteById(Long shoppingCartItemId, Long userId) {\n        NewBeeMallShoppingCartItem newBeeMallShoppingCartItem = newBeeMallShoppingCartItemMapper.selectByPrimaryKey(shoppingCartItemId);\n        if (newBeeMallShoppingCartItem == null) {\n            return false;\n        }\n        //userId不同不能删除\n        if (!userId.equals(newBeeMallShoppingCartItem.getUserId())) {\n            return false;\n        }\n        return newBeeMallShoppingCartItemMapper.deleteByPrimaryKey(shoppingCartItemId) > 0;\n    }\n\n    @Override\n    public List<NewBeeMallShoppingCartItemVO> getMyShoppingCartItems(Long newBeeMallUserId) {\n        List<NewBeeMallShoppingCartItemVO> newBeeMallShoppingCartItemVOS = new ArrayList<>();\n        List<NewBeeMallShoppingCartItem> newBeeMallShoppingCartItems = newBeeMallShoppingCartItemMapper.selectByUserId(newBeeMallUserId, 20);\n        return getNewBeeMallShoppingCartItemVOS(newBeeMallShoppingCartItemVOS, newBeeMallShoppingCartItems);\n    }\n\n    @Override\n    public List<NewBeeMallShoppingCartItemVO> getCartItemsForSettle(List<Long> cartItemIds, Long newBeeMallUserId) {\n        List<NewBeeMallShoppingCartItemVO> newBeeMallShoppingCartItemVOS = new ArrayList<>();\n        if (CollectionUtils.isEmpty(cartItemIds)) {\n            NewBeeMallException.fail(\"购物项不能为空\");\n        }\n        List<NewBeeMallShoppingCartItem> newBeeMallShoppingCartItems = newBeeMallShoppingCartItemMapper.selectByUserIdAndCartItemIds(newBeeMallUserId, cartItemIds);\n        if (CollectionUtils.isEmpty(newBeeMallShoppingCartItems)) {\n            NewBeeMallException.fail(\"购物项不能为空\");\n        }\n        if (newBeeMallShoppingCartItems.size() != cartItemIds.size()) {\n            NewBeeMallException.fail(\"参数异常\");\n        }\n        return getNewBeeMallShoppingCartItemVOS(newBeeMallShoppingCartItemVOS, newBeeMallShoppingCartItems);\n    }\n\n    @Override\n    public List<NewBeeMallShoppingCartItem> getCartItemsByCartIds(List<Long> cartItemIds) {\n        return newBeeMallShoppingCartItemMapper.selectByCartItemIds(cartItemIds);\n    }\n\n    @Override\n    public int deleteCartItemsByCartIds(List<Long> cartItemIds) {\n        return newBeeMallShoppingCartItemMapper.deleteBatch(cartItemIds);\n    }\n\n    /**\n     * 数据转换\n     *\n     * @param newBeeMallShoppingCartItemVOS\n     * @param newBeeMallShoppingCartItems\n     * @return\n     */\n    private List<NewBeeMallShoppingCartItemVO> getNewBeeMallShoppingCartItemVOS(List<NewBeeMallShoppingCartItemVO> newBeeMallShoppingCartItemVOS, List<NewBeeMallShoppingCartItem> newBeeMallShoppingCartItems) {\n        if (!CollectionUtils.isEmpty(newBeeMallShoppingCartItems)) {\n            //查询商品信息并做数据转换\n            List<Long> newBeeMallGoodsIds = newBeeMallShoppingCartItems.stream().map(NewBeeMallShoppingCartItem::getGoodsId).collect(Collectors.toList());\n            Result<List<NewBeeMallGoodsDTO>> newBeeMallGoodsDTOResult = goodsService.listByGoodsIds(newBeeMallGoodsIds);\n            //商品为空\n            if (newBeeMallGoodsDTOResult == null || newBeeMallGoodsDTOResult.getResultCode() != 200) {\n                NewBeeMallException.fail(ServiceResultEnum.GOODS_NOT_EXIST.getResult());\n            }\n            Map<Long, NewBeeMallGoodsDTO> newBeeMallGoodsDTOMap = new HashMap<>();\n            List<NewBeeMallGoodsDTO> newBeeMallGoodsDTOS = newBeeMallGoodsDTOResult.getData();\n            if (!CollectionUtils.isEmpty(newBeeMallGoodsDTOS)) {\n                newBeeMallGoodsDTOMap = newBeeMallGoodsDTOS.stream().collect(Collectors.toMap(NewBeeMallGoodsDTO::getGoodsId, Function.identity(), (entity1, entity2) -> entity1));\n            }\n            for (NewBeeMallShoppingCartItem newBeeMallShoppingCartItem : newBeeMallShoppingCartItems) {\n                NewBeeMallShoppingCartItemVO newBeeMallShoppingCartItemVO = new NewBeeMallShoppingCartItemVO();\n                BeanUtil.copyProperties(newBeeMallShoppingCartItem, newBeeMallShoppingCartItemVO);\n                if (newBeeMallGoodsDTOMap.containsKey(newBeeMallShoppingCartItem.getGoodsId())) {\n                    NewBeeMallGoodsDTO newBeeMallGoodsDtoTemp = newBeeMallGoodsDTOMap.get(newBeeMallShoppingCartItem.getGoodsId());\n                    newBeeMallShoppingCartItemVO.setGoodsCoverImg(newBeeMallGoodsDtoTemp.getGoodsCoverImg());\n                    String goodsName = newBeeMallGoodsDtoTemp.getGoodsName();\n                    // 字符串过长导致文字超出的问题\n                    if (goodsName.length() > 28) {\n                        goodsName = goodsName.substring(0, 28) + \"...\";\n                    }\n                    newBeeMallShoppingCartItemVO.setGoodsName(goodsName);\n                    newBeeMallShoppingCartItemVO.setSellingPrice(newBeeMallGoodsDtoTemp.getSellingPrice());\n                    newBeeMallShoppingCartItemVOS.add(newBeeMallShoppingCartItemVO);\n                }\n            }\n        }\n        return newBeeMallShoppingCartItemVOS;\n    }\n\n    @Override\n    public PageResult getMyShoppingCartItems(PageQueryUtil pageUtil) {\n        List<NewBeeMallShoppingCartItemVO> newBeeMallShoppingCartItemVOS = new ArrayList<>();\n        List<NewBeeMallShoppingCartItem> newBeeMallShoppingCartItems = newBeeMallShoppingCartItemMapper.findMyNewBeeMallCartItems(pageUtil);\n        int total = newBeeMallShoppingCartItemMapper.getTotalMyNewBeeMallCartItems(pageUtil);\n        PageResult pageResult = new PageResult(getNewBeeMallShoppingCartItemVOS(newBeeMallShoppingCartItemVOS, newBeeMallShoppingCartItems), total, pageUtil.getLimit(), pageUtil.getPage());\n        return pageResult;\n    }\n}\n"
  },
  {
    "path": "newbee-mall-cloud-shop-cart-service/newbee-mall-cloud-shop-cart-web/src/main/resources/application.properties",
    "content": "server.port=29030\n# 服务名称\nspring.application.name=newbee-mall-cloud-shop-cart-service\n# Nacos地址\nspring.cloud.nacos.discovery.server-addr=127.0.0.1:8848\n# Nacos登录用户名(默认为nacos，生产环境一定要修改)\nspring.cloud.nacos.username=nacos\n# Nacos登录密码(默认为nacos，生产环境一定要修改)\nspring.cloud.nacos.password=nacos\n\n# datasource config (MySQL)\nspring.datasource.name=newbee-mall-cloud-shop-cart-datasource\nspring.datasource.driverClassName=com.mysql.cj.jdbc.Driver\nspring.datasource.url=jdbc:mysql://localhost:3306/newbee_mall_cloud_cart_db?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=utf8&autoReconnect=true&useSSL=false&allowMultiQueries=true\nspring.datasource.username=root\nspring.datasource.password=123456\n# 指定数据源类型\nspring.datasource.type=com.alibaba.druid.pool.DruidDataSource\n# Druid 数据源设置\n# 初始化时建立数据库连接的个数\nspring.datasource.initialSize=10\n# 最小连接池数量\nspring.datasource.minIdle=5\n# 最大连接池数量\nspring.datasource.maxActive=30\n# 配置获取连接等待超时的时间\nspring.datasource.maxWait=60000\n# 配置间隔多久才进行一次检测，检测需要关闭的空闲连接，单位是毫秒\nspring.datasource.timeBetweenEvictionRunsMillis=60000\n# 配置一个连接在池中最小生存的时间，单位是毫秒\nspring.datasource.minEvictableIdleTimeMillis=300000\n# 用来检测连接是否有效的SQL语句\nspring.datasource.validationQuery=SELECT 1\nspring.datasource.testWhileIdle=true\nspring.datasource.testOnBorrow=false\nspring.datasource.testOnReturn=false\n\n# mybatis config\nmybatis.mapper-locations=classpath:mapper/*Mapper.xml\n\n# sentinel config\nspring.cloud.sentinel.transport.port=8930\nspring.cloud.sentinel.transport.clientIp=127.0.0.1\n# 指定Sentinel控制台地址\nspring.cloud.sentinel.transport.dashboard=127.0.0.1:9113\n\n# openfeign config\nfeign.client.config.default.connectTimeout=2000\nfeign.client.config.default.readTimeout=5000\nfeign.compression.request.enabled=true\nfeign.compression.request.mime-types=text/xml,application/xml,application/json\nfeign.compression.request.min-request-size=1024\nfeign.compression.response.enabled=true \n\n# 演示需要，开启OpenFeign和当前项目中的DEBUG级别日志\n#logging.level.ltd.user.cloud.newbee.openfeign=debug\n#logging.level.ltd.goods.cloud.newbee.openfeign=debug\n#logging.level.ltd.shopcart.cloud.newbee=debug\n\n# Sleuth采样率，取值范围为[0.1,1.0]，值越大收集越及时，但性能影响也越大\nspring.sleuth.sampler.probability=1.0\n# 每秒数据采集量，最多n条/秒Trace\nspring.sleuth.sampler.rate=500\n\nspring.zipkin.base-url=http://localhost:9411\n\n#seata config\n\nseata.enabled=true\nseata.application-id=shopcart-server\n#事务分组配置\nseata.tx-service-group=newbee_cloud_save_order_group\nservice.vgroupMapping.newbee_cloud_save_order_group=default\n\n#连接Nacos服务中心的配置信息\nseata.registry.type=nacos\nseata.registry.nacos.application=seata-server\nseata.registry.nacos.server-addr=127.0.0.1:8848\nseata.registry.nacos.username=nacos\nseata.registry.nacos.password=nacos\nseata.registry.nacos.group=DEFAULT_GROUP\nseata.registry.nacos.cluster=default"
  },
  {
    "path": "newbee-mall-cloud-shop-cart-service/newbee-mall-cloud-shop-cart-web/src/main/resources/logback.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE configuration>\n<configuration>\n    <include resource=\"org/springframework/boot/logging/logback/defaults.xml\"/>\n    <include resource=\"org/springframework/boot/logging/logback/console-appender.xml\"/>\n    <!--应用名称-->\n    <property name=\"APP_NAME\" value=\"newbee-mall-cloud-shop-cart-service-log\"/>\n    <contextName>${APP_NAME}</contextName>\n\n    <!-- 控制台输出 -->\n    <appender name=\"CONSOLE\" class=\"ch.qos.logback.core.ConsoleAppender\">\n        <filter class=\"ch.qos.logback.classic.filter.ThresholdFilter\">\n            <level>INFO</level>\n        </filter>\n        <!-- 日志输出编码 -->\n        <encoder>\n            <pattern>${CONSOLE_LOG_PATTERN}</pattern>\n            <charset>utf8</charset>\n        </encoder>\n    </appender>\n\n    <appender name=\"LOGSTASH\" class=\"net.logstash.logback.appender.LogstashTcpSocketAppender\">\n        <!--可以访问的logstash日志收集端口-->\n        <destination>192.168.110.57:4560</destination>\n        <filter class=\"ch.qos.logback.classic.filter.ThresholdFilter\">\n            <level>INFO</level>\n        </filter>\n        <encoder charset=\"UTF-8\" class=\"net.logstash.logback.encoder.LogstashEncoder\"/>\n    </appender>\n\n    <root level=\"INFO\">\n        <appender-ref ref=\"CONSOLE\"/>\n        <appender-ref ref=\"LOGSTASH\"/>\n    </root>\n</configuration>\n\n"
  },
  {
    "path": "newbee-mall-cloud-shop-cart-service/newbee-mall-cloud-shop-cart-web/src/main/resources/mapper/NewBeeMallShoppingCartItemMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n严肃声明：\n开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\nCopyright (c) 2022 程序员十三 all rights reserved.\n版权所有，侵权必究！\n-->\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"ltd.shopcart.cloud.newbee.dao.NewBeeMallShoppingCartItemMapper\">\n    <resultMap id=\"BaseResultMap\" type=\"ltd.shopcart.cloud.newbee.entity.NewBeeMallShoppingCartItem\">\n        <id column=\"cart_item_id\" jdbcType=\"BIGINT\" property=\"cartItemId\"/>\n        <result column=\"user_id\" jdbcType=\"BIGINT\" property=\"userId\"/>\n        <result column=\"goods_id\" jdbcType=\"BIGINT\" property=\"goodsId\"/>\n        <result column=\"goods_count\" jdbcType=\"INTEGER\" property=\"goodsCount\"/>\n        <result column=\"is_deleted\" jdbcType=\"TINYINT\" property=\"isDeleted\"/>\n        <result column=\"create_time\" jdbcType=\"TIMESTAMP\" property=\"createTime\"/>\n        <result column=\"update_time\" jdbcType=\"TIMESTAMP\" property=\"updateTime\"/>\n    </resultMap>\n    <sql id=\"Base_Column_List\">\n    cart_item_id, user_id, goods_id, goods_count, is_deleted, create_time, update_time\n  </sql>\n    <select id=\"selectByPrimaryKey\" parameterType=\"java.lang.Long\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"Base_Column_List\"/>\n        from tb_newbee_mall_shopping_cart_item\n        where cart_item_id = #{cartItemId,jdbcType=BIGINT} and is_deleted = 0\n    </select>\n    <select id=\"selectByUserIdAndGoodsId\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"Base_Column_List\"/>\n        from tb_newbee_mall_shopping_cart_item\n        where user_id = #{newBeeMallUserId,jdbcType=BIGINT} and goods_id=#{goodsId,jdbcType=BIGINT} and is_deleted = 0\n        limit 1\n    </select>\n    <select id=\"selectByUserId\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"Base_Column_List\"/>\n        from tb_newbee_mall_shopping_cart_item\n        where user_id = #{newBeeMallUserId,jdbcType=BIGINT} and is_deleted = 0\n        limit #{number}\n    </select>\n    <select id=\"findMyNewBeeMallCartItems\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"Base_Column_List\"/>\n        from tb_newbee_mall_shopping_cart_item\n        where user_id = #{userId,jdbcType=BIGINT} and is_deleted = 0\n        <if test=\"start!=null and limit!=null\">\n            limit #{start},#{limit}\n        </if>\n    </select>\n    <select id=\"getTotalMyNewBeeMallCartItems\" resultType=\"int\">\n        select\n        count(*)\n        from tb_newbee_mall_shopping_cart_item\n        where user_id = #{userId,jdbcType=BIGINT} and is_deleted = 0\n    </select>\n    <select id=\"selectByUserIdAndCartItemIds\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"Base_Column_List\"/>\n        from tb_newbee_mall_shopping_cart_item\n        where\n        cart_item_id in\n        <foreach item=\"id\" collection=\"cartItemIds\" open=\"(\" separator=\",\" close=\")\">\n            #{id}\n        </foreach>\n        and user_id = #{newBeeMallUserId,jdbcType=BIGINT} and is_deleted = 0\n    </select>\n    <select id=\"selectByCartItemIds\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"Base_Column_List\"/>\n        from tb_newbee_mall_shopping_cart_item\n        where\n        cart_item_id in\n        <foreach item=\"id\" collection=\"cartItemIds\" open=\"(\" separator=\",\" close=\")\">\n            #{id}\n        </foreach>\n        and is_deleted = 0\n    </select>\n    <select id=\"selectCountByUserId\" resultType=\"int\">\n    select\n    count(*)\n    from tb_newbee_mall_shopping_cart_item\n    where user_id = #{newBeeMallUserId,jdbcType=BIGINT} and is_deleted = 0\n  </select>\n    <update id=\"deleteByPrimaryKey\" parameterType=\"java.lang.Long\">\n    update tb_newbee_mall_shopping_cart_item set is_deleted = 1\n    where cart_item_id = #{cartItemId,jdbcType=BIGINT} and is_deleted = 0\n  </update>\n    <update id=\"deleteBatch\">\n        update tb_newbee_mall_shopping_cart_item\n        set is_deleted=1 where cart_item_id in\n        <foreach item=\"id\" collection=\"list\" open=\"(\" separator=\",\" close=\")\">\n            #{id}\n        </foreach>\n    </update>\n    <insert id=\"insert\" parameterType=\"ltd.shopcart.cloud.newbee.entity.NewBeeMallShoppingCartItem\">\n    insert into tb_newbee_mall_shopping_cart_item (cart_item_id, user_id, goods_id, \n      goods_count, is_deleted, create_time, \n      update_time)\n    values (#{cartItemId,jdbcType=BIGINT}, #{userId,jdbcType=BIGINT}, #{goodsId,jdbcType=BIGINT}, \n      #{goodsCount,jdbcType=INTEGER}, #{isDeleted,jdbcType=TINYINT}, #{createTime,jdbcType=TIMESTAMP}, \n      #{updateTime,jdbcType=TIMESTAMP})\n  </insert>\n    <insert id=\"insertSelective\" parameterType=\"ltd.shopcart.cloud.newbee.entity.NewBeeMallShoppingCartItem\">\n        insert into tb_newbee_mall_shopping_cart_item\n        <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\n            <if test=\"cartItemId != null\">\n                cart_item_id,\n            </if>\n            <if test=\"userId != null\">\n                user_id,\n            </if>\n            <if test=\"goodsId != null\">\n                goods_id,\n            </if>\n            <if test=\"goodsCount != null\">\n                goods_count,\n            </if>\n            <if test=\"isDeleted != null\">\n                is_deleted,\n            </if>\n            <if test=\"createTime != null\">\n                create_time,\n            </if>\n            <if test=\"updateTime != null\">\n                update_time,\n            </if>\n        </trim>\n        <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n            <if test=\"cartItemId != null\">\n                #{cartItemId,jdbcType=BIGINT},\n            </if>\n            <if test=\"userId != null\">\n                #{userId,jdbcType=BIGINT},\n            </if>\n            <if test=\"goodsId != null\">\n                #{goodsId,jdbcType=BIGINT},\n            </if>\n            <if test=\"goodsCount != null\">\n                #{goodsCount,jdbcType=INTEGER},\n            </if>\n            <if test=\"isDeleted != null\">\n                #{isDeleted,jdbcType=TINYINT},\n            </if>\n            <if test=\"createTime != null\">\n                #{createTime,jdbcType=TIMESTAMP},\n            </if>\n            <if test=\"updateTime != null\">\n                #{updateTime,jdbcType=TIMESTAMP},\n            </if>\n        </trim>\n    </insert>\n    <update id=\"updateByPrimaryKeySelective\" parameterType=\"ltd.shopcart.cloud.newbee.entity.NewBeeMallShoppingCartItem\">\n        update tb_newbee_mall_shopping_cart_item\n        <set>\n            <if test=\"userId != null\">\n                user_id = #{userId,jdbcType=BIGINT},\n            </if>\n            <if test=\"goodsId != null\">\n                goods_id = #{goodsId,jdbcType=BIGINT},\n            </if>\n            <if test=\"goodsCount != null\">\n                goods_count = #{goodsCount,jdbcType=INTEGER},\n            </if>\n            <if test=\"isDeleted != null\">\n                is_deleted = #{isDeleted,jdbcType=TINYINT},\n            </if>\n            <if test=\"createTime != null\">\n                create_time = #{createTime,jdbcType=TIMESTAMP},\n            </if>\n            <if test=\"updateTime != null\">\n                update_time = #{updateTime,jdbcType=TIMESTAMP},\n            </if>\n        </set>\n        where cart_item_id = #{cartItemId,jdbcType=BIGINT}\n    </update>\n    <update id=\"updateByPrimaryKey\" parameterType=\"ltd.shopcart.cloud.newbee.entity.NewBeeMallShoppingCartItem\">\n    update tb_newbee_mall_shopping_cart_item\n    set user_id = #{userId,jdbcType=BIGINT},\n      goods_id = #{goodsId,jdbcType=BIGINT},\n      goods_count = #{goodsCount,jdbcType=INTEGER},\n      is_deleted = #{isDeleted,jdbcType=TINYINT},\n      create_time = #{createTime,jdbcType=TIMESTAMP},\n      update_time = #{updateTime,jdbcType=TIMESTAMP}\n    where cart_item_id = #{cartItemId,jdbcType=BIGINT}\n  </update>\n</mapper>"
  },
  {
    "path": "newbee-mall-cloud-shop-cart-service/pom.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--  @author 程序员十三\n      @qq交流群 791509631\n      @email 2449207463@qq.com\n      @link https://github.com/newbee-ltd -->\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd\">\n    <modelVersion>4.0.0</modelVersion>\n    <groupId>ltd.newbee.cloud</groupId>\n    <artifactId>newbee-mall-cloud-shop-cart-service</artifactId>\n    <version>0.0.1-SNAPSHOT</version>\n    <packaging>pom</packaging>\n    <name>newbee-mall-cloud-shop-cart-service</name>\n    <description>购物车模块</description>\n\n    <parent>\n        <groupId>ltd.newbee.cloud</groupId>\n        <artifactId>newbee-mall-cloud</artifactId>\n        <version>0.0.1-SNAPSHOT</version>\n    </parent>\n\n    <properties>\n        <java.version>1.8</java.version>\n    </properties>\n\n    <modules>\n        <module>newbee-mall-cloud-shop-cart-web</module>\n        <module>newbee-mall-cloud-shop-cart-api</module>\n    </modules>\n\n    <dependencies>\n\n    </dependencies>\n    <!--  @author 程序员十三\n      @qq交流群 791509631\n      @email 2449207463@qq.com\n      @link https://github.com/newbee-ltd -->\n</project>\n"
  },
  {
    "path": "newbee-mall-cloud-user-service/newbee-mall-cloud-user-api/pom.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--  @author 程序员十三\n      @qq交流群 791509631\n      @email 2449207463@qq.com\n      @link https://github.com/newbee-ltd -->\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd\">\n    <modelVersion>4.0.0</modelVersion>\n    <groupId>ltd.user.newbee.cloud</groupId>\n    <artifactId>newbee-mall-cloud-user-api</artifactId>\n    <packaging>jar</packaging>\n    <version>0.0.1-SNAPSHOT</version>\n    <name>newbee-mall-cloud-user-api</name>\n    <description>用户服务openfeign</description>\n\n    <parent>\n        <groupId>ltd.newbee.cloud</groupId>\n        <artifactId>newbee-mall-cloud-user-service</artifactId>\n        <version>0.0.1-SNAPSHOT</version>\n    </parent>\n\n    <properties>\n        <java.version>1.8</java.version>\n    </properties>\n\n    <dependencies>\n\n        <dependency>\n            <groupId>org.springframework.cloud</groupId>\n            <artifactId>spring-cloud-starter-openfeign</artifactId>\n        </dependency>\n\n        <dependency>\n            <groupId>ltd.newbee.cloud</groupId>\n            <artifactId>newbee-mall-cloud-common</artifactId>\n            <version>0.0.1-SNAPSHOT</version>\n        </dependency>\n        \n    </dependencies>\n    <!--  @author 程序员十三\n      @qq交流群 791509631\n      @email 2449207463@qq.com\n      @link https://github.com/newbee-ltd -->\n</project>\n"
  },
  {
    "path": "newbee-mall-cloud-user-service/newbee-mall-cloud-user-api/src/main/java/ltd/user/cloud/newbee/dto/MallUserDTO.java",
    "content": "package ltd.user.cloud.newbee.dto;\n\nimport java.io.Serializable;\n\npublic class MallUserDTO implements Serializable {\n    private Long userId;\n\n    private String nickName;\n\n    private String loginName;\n\n    private String introduceSign;\n\n    public Long getUserId() {\n        return userId;\n    }\n\n    public void setUserId(Long userId) {\n        this.userId = userId;\n    }\n\n    public String getNickName() {\n        return nickName;\n    }\n\n    public void setNickName(String nickName) {\n        this.nickName = nickName;\n    }\n\n    public String getLoginName() {\n        return loginName;\n    }\n\n    public void setLoginName(String loginName) {\n        this.loginName = loginName;\n    }\n\n    public String getIntroduceSign() {\n        return introduceSign;\n    }\n\n    public void setIntroduceSign(String introduceSign) {\n        this.introduceSign = introduceSign;\n    }\n}\n"
  },
  {
    "path": "newbee-mall-cloud-user-service/newbee-mall-cloud-user-api/src/main/java/ltd/user/cloud/newbee/openfeign/NewBeeCloudUserServiceFeign.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本系统已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.user.cloud.newbee.openfeign;\n\nimport ltd.user.cloud.newbee.dto.MallUserDTO;\nimport org.springframework.cloud.openfeign.FeignClient;\nimport org.springframework.web.bind.annotation.GetMapping;\nimport org.springframework.web.bind.annotation.PathVariable;\nimport ltd.common.cloud.newbee.dto.Result;\nimport org.springframework.web.bind.annotation.RequestParam;\n\n@FeignClient(value = \"newbee-mall-cloud-user-service\", path = \"/users\")\npublic interface NewBeeCloudUserServiceFeign {\n\n    @GetMapping(value = \"/admin/{token}\")\n    Result getAdminUserByToken(@PathVariable(value = \"token\") String token);\n\n    @GetMapping(value = \"/mall/getDetailByToken\")\n    Result<MallUserDTO> getMallUserByToken(@RequestParam(value = \"token\") String token);\n}\n"
  },
  {
    "path": "newbee-mall-cloud-user-service/newbee-mall-cloud-user-web/pom.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--  @author 程序员十三\n      @qq交流群 791509631\n      @email 2449207463@qq.com\n      @link https://github.com/newbee-ltd -->\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd\">\n    <modelVersion>4.0.0</modelVersion>\n    <groupId>ltd.user.newbee.cloud</groupId>\n    <artifactId>newbee-mall-cloud-user-web</artifactId>\n    <version>0.0.1-SNAPSHOT</version>\n    <name>newbee-mall-cloud-user-web</name>\n    <description>用户服务</description>\n\n    <parent>\n        <groupId>ltd.newbee.cloud</groupId>\n        <artifactId>newbee-mall-cloud-user-service</artifactId>\n        <version>0.0.1-SNAPSHOT</version>\n    </parent>\n\n    <properties>\n        <java.version>1.8</java.version>\n    </properties>\n\n    <dependencies>\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter-web</artifactId>\n        </dependency>\n\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter-test</artifactId>\n            <scope>test</scope>\n        </dependency>\n\n        <dependency>\n            <groupId>com.alibaba.cloud</groupId>\n            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>\n        </dependency>\n\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter-validation</artifactId>\n        </dependency>\n\n        <dependency>\n            <groupId>org.mybatis.spring.boot</groupId>\n            <artifactId>mybatis-spring-boot-starter</artifactId>\n        </dependency>\n\n        <dependency>\n            <groupId>com.alibaba.cloud</groupId>\n            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>\n        </dependency>\n\n        <!-- Sleuth依赖项 -->\n        <dependency>\n            <groupId>org.springframework.cloud</groupId>\n            <artifactId>spring-cloud-starter-sleuth</artifactId>\n        </dependency>\n        <!--Zipkin 依赖-->\n        <dependency>\n            <groupId>org.springframework.cloud</groupId>\n            <artifactId>spring-cloud-sleuth-zipkin</artifactId>\n        </dependency>\n\n        <dependency>\n            <groupId>net.logstash.logback</groupId>\n            <artifactId>logstash-logback-encoder</artifactId>\n            <version>${logstash-logback-encoder.version}</version>\n        </dependency>\n\n        <dependency>\n            <groupId>org.projectlombok</groupId>\n            <artifactId>lombok</artifactId>\n            <version>${lombok.version}</version>\n            <scope>provided</scope>\n        </dependency>\n\n        <dependency>\n            <groupId>io.springfox</groupId>\n            <artifactId>springfox-boot-starter</artifactId>\n        </dependency>\n\n        <dependency>\n            <groupId>mysql</groupId>\n            <artifactId>mysql-connector-java</artifactId>\n            <scope>runtime</scope>\n        </dependency>\n\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter-data-redis</artifactId>\n        </dependency>\n\n        <dependency>\n            <groupId>ltd.newbee.cloud</groupId>\n            <artifactId>newbee-mall-cloud-common</artifactId>\n            <version>0.0.1-SNAPSHOT</version>\n        </dependency>\n\n    </dependencies>\n    <!--  @author 程序员十三\n      @qq交流群 791509631\n      @email 2449207463@qq.com\n      @link https://github.com/newbee-ltd -->\n</project>\n"
  },
  {
    "path": "newbee-mall-cloud-user-service/newbee-mall-cloud-user-web/src/main/java/ltd/user/cloud/newbee/NewBeeMallCloudUserServiceApplication.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本系统已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.user.cloud.newbee;\n\nimport org.mybatis.spring.annotation.MapperScan;\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigure.SpringBootApplication;\nimport org.springframework.cloud.client.discovery.EnableDiscoveryClient;\n\n/**\n * @author 程序员十三\n * @qq交流群 791509631\n * @email 2449207463@qq.com\n * @link https://github.com/newbee-ltd\n */\n@SpringBootApplication\n@EnableDiscoveryClient\n@MapperScan(\"ltd.user.cloud.newbee.dao\")\npublic class NewBeeMallCloudUserServiceApplication {\n\n    public static void main(String[] args) {\n        System.setProperty(\"nacos.logging.default.config.enabled\",\"false\");\n        SpringApplication.run(NewBeeMallCloudUserServiceApplication.class, args);\n    }\n\n}\n"
  },
  {
    "path": "newbee-mall-cloud-user-service/newbee-mall-cloud-user-web/src/main/java/ltd/user/cloud/newbee/config/RedisConfig.java",
    "content": "package ltd.user.cloud.newbee.config;\n\nimport org.springframework.boot.autoconfigure.AutoConfigureAfter;\nimport org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration;\nimport org.springframework.cache.CacheManager;\nimport org.springframework.cache.annotation.CachingConfigurerSupport;\nimport org.springframework.cache.annotation.EnableCaching;\nimport org.springframework.cache.interceptor.KeyGenerator;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\nimport org.springframework.data.redis.cache.RedisCacheManager;\nimport org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;\nimport org.springframework.data.redis.core.RedisTemplate;\nimport org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;\nimport org.springframework.data.redis.serializer.StringRedisSerializer;\n\nimport javax.annotation.Resource;\nimport java.io.Serializable;\nimport java.lang.reflect.Method;\nimport java.util.HashSet;\nimport java.util.Set;\n\n@Configuration\n@EnableCaching\n@AutoConfigureAfter(RedisAutoConfiguration.class)\npublic class RedisConfig extends CachingConfigurerSupport {\n\n    @Resource\n    private LettuceConnectionFactory lettuceConnectionFactory;\n\n    public RedisConfig(){}\n\n    @Bean\n    public RedisTemplate<String, Serializable> redisCacheTemplate(LettuceConnectionFactory redisConnectionFactory){\n        RedisTemplate<String,Serializable> template = new RedisTemplate<String,Serializable>();\n        template.setKeySerializer(new StringRedisSerializer());\n        template.setValueSerializer(new GenericJackson2JsonRedisSerializer());\n        template.setHashKeySerializer(new StringRedisSerializer());\n        template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());\n        template.setConnectionFactory(redisConnectionFactory);\n        return template;\n    }\n\n    @Bean\n    public CacheManager cacheManager() {\n        RedisCacheManager.RedisCacheManagerBuilder builder = RedisCacheManager.RedisCacheManagerBuilder\n                .fromConnectionFactory(lettuceConnectionFactory);\n        @SuppressWarnings(\"serial\")\n        Set<String> cacheNames = new HashSet<String>() {\n            {\n                add(\"codeNameCache\");\n            }\n        };\n        builder.initialCacheNames(cacheNames);\n        return builder.build();\n    }\n\n    @Bean\n    public KeyGenerator keyGenerator() {\n        return new KeyGenerator() {\n            @Override\n            public Object generate(Object target, Method method, Object... params) {\n                StringBuffer stringBuffer = new StringBuffer();\n                stringBuffer.append(target.getClass().getName());\n                stringBuffer.append(method.getName());\n                for (Object obj : params) {\n                    stringBuffer.append(obj.toString());\n                }\n                return stringBuffer.toString();\n            }\n        };\n    }\n}\n\n"
  },
  {
    "path": "newbee-mall-cloud-user-service/newbee-mall-cloud-user-web/src/main/java/ltd/user/cloud/newbee/config/UserServiceExceptionHandler.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.user.cloud.newbee.config;\n\nimport ltd.common.cloud.newbee.enums.ServiceResultEnum;\nimport ltd.common.cloud.newbee.dto.Result;\nimport ltd.common.cloud.newbee.exception.NewBeeMallException;\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport org.springframework.validation.BindException;\nimport org.springframework.validation.BindingResult;\nimport org.springframework.web.bind.MethodArgumentNotValidException;\nimport org.springframework.web.bind.annotation.ExceptionHandler;\nimport org.springframework.web.bind.annotation.RestControllerAdvice;\n\nimport javax.servlet.http.HttpServletRequest;\nimport java.util.Objects;\n\n/**\n * 全局异常处理\n */\n@RestControllerAdvice\npublic class UserServiceExceptionHandler {\n\n    private static final Logger log = LoggerFactory.getLogger(UserServiceExceptionHandler.class);\n\n    @ExceptionHandler(BindException.class)\n    public Object bindException(BindException e) {\n        log.error(\"UserServiceExceptionHandler:\",e);\n        Result result = new Result();\n        result.setResultCode(510);\n        BindingResult bindingResult = e.getBindingResult();\n        result.setMessage(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());\n        return result;\n    }\n\n    @ExceptionHandler(MethodArgumentNotValidException.class)\n    public Object bindException(MethodArgumentNotValidException e) {\n        log.error(\"UserServiceExceptionHandler:\",e);\n        Result result = new Result();\n        result.setResultCode(510);\n        BindingResult bindingResult = e.getBindingResult();\n        result.setMessage(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());\n        return result;\n    }\n\n    @ExceptionHandler(Exception.class)\n    public Object handleException(Exception e, HttpServletRequest req) {\n        log.error(\"UserServiceExceptionHandler:\",e);\n        Result result = new Result();\n        result.setResultCode(500);\n        //区分是否为自定义异常\n        if (e instanceof NewBeeMallException) {\n            result.setMessage(e.getMessage());\n            if (e.getMessage().equals(ServiceResultEnum.ADMIN_NOT_LOGIN_ERROR.getResult()) || e.getMessage().equals(ServiceResultEnum.ADMIN_TOKEN_EXPIRE_ERROR.getResult())) {\n                result.setResultCode(419);\n            }\n            if (e.getMessage().equals(ServiceResultEnum.NOT_LOGIN_ERROR.getResult()) || e.getMessage().equals(ServiceResultEnum.TOKEN_EXPIRE_ERROR.getResult())) {\n                result.setResultCode(416);\n            }\n        } else {\n            e.printStackTrace();\n            result.setMessage(\"未知异常，请查看控制台日志并检查配置文件。\");\n        }\n        return result;\n\n    }\n}\n"
  },
  {
    "path": "newbee-mall-cloud-user-service/newbee-mall-cloud-user-web/src/main/java/ltd/user/cloud/newbee/config/UserServiceWebMvcConfigurer.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.user.cloud.newbee.config;\n\nimport com.alibaba.cloud.sentinel.SentinelProperties;\nimport com.alibaba.csp.sentinel.adapter.spring.webmvc.SentinelWebInterceptor;\nimport ltd.user.cloud.newbee.config.handler.TokenToAdminUserMethodArgumentResolver;\nimport ltd.user.cloud.newbee.config.handler.TokenToMallUserMethodArgumentResolver;\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.context.annotation.Configuration;\nimport org.springframework.web.method.support.HandlerMethodArgumentResolver;\nimport org.springframework.web.servlet.HandlerInterceptor;\nimport org.springframework.web.servlet.config.annotation.InterceptorRegistry;\nimport org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;\nimport org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;\n\nimport java.util.List;\nimport java.util.Optional;\n\n@Configuration\npublic class UserServiceWebMvcConfigurer extends WebMvcConfigurationSupport {\n\n    private static final Logger log = LoggerFactory.getLogger(UserServiceWebMvcConfigurer.class);\n\n    @Autowired\n    private SentinelProperties sentinelProperties;\n    @Autowired\n    private Optional<SentinelWebInterceptor> sentinelWebInterceptorOptional;\n\n    @Autowired\n    private TokenToAdminUserMethodArgumentResolver tokenToAdminUserMethodArgumentResolver;\n\n    @Autowired\n    private TokenToMallUserMethodArgumentResolver tokenToMallUserMethodArgumentResolver;\n\n    /**\n     * @param argumentResolvers\n     * @tip @TokenToAdminUser 注解处理方法\n     */\n    public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {\n        argumentResolvers.add(tokenToAdminUserMethodArgumentResolver);\n        argumentResolvers.add(tokenToMallUserMethodArgumentResolver);\n    }\n\n    @Override\n    public void addResourceHandlers(ResourceHandlerRegistry registry) {\n        registry.\n                addResourceHandler(\"/swagger-ui/**\")\n                .addResourceLocations(\"classpath:/META-INF/resources/webjars/springfox-swagger-ui/\")\n                .resourceChain(false);\n    }\n\n    public void addInterceptors(InterceptorRegistry registry) {\n        if (this.sentinelWebInterceptorOptional.isPresent()) {\n            SentinelProperties.Filter filterConfig = this.sentinelProperties.getFilter();\n            registry.addInterceptor((HandlerInterceptor) this.sentinelWebInterceptorOptional.get()).order(filterConfig.getOrder()).addPathPatterns(filterConfig.getUrlPatterns());\n            log.info(\"[Sentinel Starter] register SentinelWebInterceptor with urlPatterns: {}.\", filterConfig.getUrlPatterns());\n        }\n    }\n}\n"
  },
  {
    "path": "newbee-mall-cloud-user-service/newbee-mall-cloud-user-web/src/main/java/ltd/user/cloud/newbee/config/UserSwagger3Config.java",
    "content": "package ltd.user.cloud.newbee.config;\n\nimport ltd.common.cloud.newbee.pojo.AdminUserToken;\nimport ltd.common.cloud.newbee.pojo.MallUserToken;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\nimport springfox.documentation.builders.ApiInfoBuilder;\nimport springfox.documentation.builders.PathSelectors;\nimport springfox.documentation.builders.RequestHandlerSelectors;\nimport springfox.documentation.builders.RequestParameterBuilder;\nimport springfox.documentation.oas.annotations.EnableOpenApi;\nimport springfox.documentation.schema.ScalarType;\nimport springfox.documentation.service.ApiInfo;\nimport springfox.documentation.service.ParameterType;\nimport springfox.documentation.service.RequestParameter;\nimport springfox.documentation.spi.DocumentationType;\nimport springfox.documentation.spring.web.plugins.Docket;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\n@Configuration\n@EnableOpenApi\npublic class UserSwagger3Config {\n\n    @Bean\n    public Docket api() {\n        return new Docket(DocumentationType.OAS_30)\n                .apiInfo(apiInfo())\n                .ignoredParameterTypes(AdminUserToken.class, MallUserToken.class)\n                .select()\n                .apis(RequestHandlerSelectors.basePackage(\"ltd.user.cloud.newbee.controller\"))\n                .paths(PathSelectors.any())\n                .build()\n                .globalRequestParameters(getGlobalRequestParameters());\n    }\n\n    //生成全局通用参数\n    private List<RequestParameter> getGlobalRequestParameters() {\n        List<RequestParameter> parameters = new ArrayList<>();\n        parameters.add(new RequestParameterBuilder()\n                .name(\"token\")\n                .description(\"登录认证token\")\n                .required(false) // 非必传\n                .in(ParameterType.HEADER) //请求头中的参数，其它类型可以点进ParameterType类中查看\n                .query(q -> q.model(m -> m.scalarModel(ScalarType.STRING)))\n                .build());\n        return parameters;\n    }\n\n    private ApiInfo apiInfo() {\n        return new ApiInfoBuilder()\n                .title(\"newbee-mall-cloud-user-service接口文档\")\n                .description(\"swagger接口文档\")\n                .version(\"2.0\")\n                .build();\n    }\n}"
  },
  {
    "path": "newbee-mall-cloud-user-service/newbee-mall-cloud-user-web/src/main/java/ltd/user/cloud/newbee/config/annotation/TokenToAdminUser.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.user.cloud.newbee.config.annotation;\n\nimport java.lang.annotation.*;\n\n@Target({ElementType.PARAMETER})\n@Retention(RetentionPolicy.RUNTIME)\n@Documented\npublic @interface TokenToAdminUser {\n\n    /**\n     * 当前用户在request中的名字\n     *\n     * @return\n     */\n    String value() default \"adminUser\";\n\n}\n"
  },
  {
    "path": "newbee-mall-cloud-user-service/newbee-mall-cloud-user-web/src/main/java/ltd/user/cloud/newbee/config/annotation/TokenToMallUser.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.user.cloud.newbee.config.annotation;\n\nimport java.lang.annotation.*;\n\n@Target({ElementType.PARAMETER})\n@Retention(RetentionPolicy.RUNTIME)\n@Documented\npublic @interface TokenToMallUser {\n\n    /**\n     * 当前用户在request中的名字\n     *\n     * @return\n     */\n    String value() default \"user\";\n\n}\n"
  },
  {
    "path": "newbee-mall-cloud-user-service/newbee-mall-cloud-user-web/src/main/java/ltd/user/cloud/newbee/config/handler/TokenToAdminUserMethodArgumentResolver.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.user.cloud.newbee.config.handler;\n\nimport ltd.common.cloud.newbee.enums.ServiceResultEnum;\nimport ltd.common.cloud.newbee.exception.NewBeeMallException;\nimport ltd.user.cloud.newbee.config.annotation.TokenToAdminUser;\nimport ltd.common.cloud.newbee.pojo.AdminUserToken;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.core.MethodParameter;\nimport org.springframework.data.redis.core.RedisTemplate;\nimport org.springframework.data.redis.core.ValueOperations;\nimport org.springframework.stereotype.Component;\nimport org.springframework.web.bind.support.WebDataBinderFactory;\nimport org.springframework.web.context.request.NativeWebRequest;\nimport org.springframework.web.method.support.HandlerMethodArgumentResolver;\nimport org.springframework.web.method.support.ModelAndViewContainer;\n\n@Component\npublic class TokenToAdminUserMethodArgumentResolver implements HandlerMethodArgumentResolver {\n\n    @Autowired\n    private RedisTemplate redisTemplate;\n\n    public TokenToAdminUserMethodArgumentResolver() {\n    }\n\n    public boolean supportsParameter(MethodParameter parameter) {\n        if (parameter.hasParameterAnnotation(TokenToAdminUser.class)) {\n            return true;\n        }\n        return false;\n    }\n\n    public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) {\n        if (parameter.getParameterAnnotation(TokenToAdminUser.class) instanceof TokenToAdminUser) {\n            String token = webRequest.getHeader(\"token\");\n            if (null != token && !\"\".equals(token) && token.length() == 32) {\n                ValueOperations<String, AdminUserToken> opsForAdminUserToken = redisTemplate.opsForValue();\n                AdminUserToken adminUserToken = opsForAdminUserToken.get(token);\n                if (adminUserToken == null) {\n                    NewBeeMallException.fail(ServiceResultEnum.ADMIN_NOT_LOGIN_ERROR.getResult());\n                }\n                return adminUserToken;\n            } else {\n                NewBeeMallException.fail(ServiceResultEnum.ADMIN_NOT_LOGIN_ERROR.getResult());\n            }\n        }\n        return null;\n    }\n\n}\n"
  },
  {
    "path": "newbee-mall-cloud-user-service/newbee-mall-cloud-user-web/src/main/java/ltd/user/cloud/newbee/config/handler/TokenToMallUserMethodArgumentResolver.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.user.cloud.newbee.config.handler;\n\nimport ltd.common.cloud.newbee.enums.ServiceResultEnum;\nimport ltd.common.cloud.newbee.exception.NewBeeMallException;\nimport ltd.common.cloud.newbee.pojo.AdminUserToken;\nimport ltd.common.cloud.newbee.pojo.MallUserToken;\nimport ltd.user.cloud.newbee.config.annotation.TokenToMallUser;\nimport ltd.user.cloud.newbee.dao.MallUserMapper;\nimport ltd.user.cloud.newbee.entity.MallUser;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.core.MethodParameter;\nimport org.springframework.data.redis.core.RedisTemplate;\nimport org.springframework.data.redis.core.ValueOperations;\nimport org.springframework.stereotype.Component;\nimport org.springframework.web.bind.support.WebDataBinderFactory;\nimport org.springframework.web.context.request.NativeWebRequest;\nimport org.springframework.web.method.support.HandlerMethodArgumentResolver;\nimport org.springframework.web.method.support.ModelAndViewContainer;\n\nimport javax.servlet.http.HttpServletRequest;\nimport java.io.IOException;\n\n@Component\npublic class TokenToMallUserMethodArgumentResolver implements HandlerMethodArgumentResolver {\n\n    @Autowired\n    private RedisTemplate redisTemplate;\n    @Autowired\n    private MallUserMapper mallUserMapper;\n\n    public TokenToMallUserMethodArgumentResolver() {\n    }\n\n    public boolean supportsParameter(MethodParameter parameter) {\n        if (parameter.hasParameterAnnotation(TokenToMallUser.class)) {\n            return true;\n        }\n        return false;\n    }\n\n    public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) {\n        if (parameter.getParameterAnnotation(TokenToMallUser.class) instanceof TokenToMallUser) {\n            String token = webRequest.getHeader(\"token\");\n            if (null != token && !\"\".equals(token) && token.length() == 32) {\n                ValueOperations<String, MallUserToken> opsForMallUserToken = redisTemplate.opsForValue();\n                MallUserToken mallUserToken = opsForMallUserToken.get(token);\n                if (mallUserToken == null ) {\n                    NewBeeMallException.fail(ServiceResultEnum.TOKEN_EXPIRE_ERROR.getResult());\n                }\n                MallUser mallUser = mallUserMapper.selectByPrimaryKey(mallUserToken.getUserId());\n                if (mallUser == null) {\n                    NewBeeMallException.fail(ServiceResultEnum.USER_NULL_ERROR.getResult());\n                }\n                if (mallUser.getLockedFlag().intValue() == 1) {\n                    NewBeeMallException.fail(ServiceResultEnum.LOGIN_USER_LOCKED_ERROR.getResult());\n                }\n                return mallUserToken;\n            } else {\n                NewBeeMallException.fail(ServiceResultEnum.NOT_LOGIN_ERROR.getResult());\n            }\n        }\n        return null;\n    }\n\n    public static byte[] getRequestPostBytes(HttpServletRequest request)\n            throws IOException {\n        int contentLength = request.getContentLength();\n        if (contentLength < 0) {\n            return null;\n        }\n        byte buffer[] = new byte[contentLength];\n        for (int i = 0; i < contentLength; ) {\n            int readlen = request.getInputStream().read(buffer, i,\n                    contentLength - i);\n            if (readlen == -1) {\n                break;\n            }\n            i += readlen;\n        }\n        return buffer;\n    }\n\n}\n"
  },
  {
    "path": "newbee-mall-cloud-user-service/newbee-mall-cloud-user-web/src/main/java/ltd/user/cloud/newbee/controller/NewBeeMallCloudAdminUserController.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本系统已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.user.cloud.newbee.controller;\n\nimport io.swagger.annotations.Api;\nimport io.swagger.annotations.ApiOperation;\nimport ltd.common.cloud.newbee.dto.Result;\nimport ltd.common.cloud.newbee.dto.ResultGenerator;\nimport ltd.user.cloud.newbee.config.annotation.TokenToAdminUser;\nimport ltd.user.cloud.newbee.controller.param.AdminLoginParam;\nimport ltd.user.cloud.newbee.controller.param.UpdateAdminNameParam;\nimport ltd.user.cloud.newbee.controller.param.UpdateAdminPasswordParam;\nimport ltd.user.cloud.newbee.entity.AdminUser;\nimport ltd.common.cloud.newbee.pojo.AdminUserToken;\nimport ltd.user.cloud.newbee.service.AdminUserService;\n\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport org.springframework.util.StringUtils;\nimport org.springframework.web.bind.annotation.*;\n\nimport javax.annotation.Resource;\nimport javax.validation.Valid;\n\n@Api(value = \"v1\", tags = \"新蜂商城管理员操作相关接口\")\n@RestController\npublic class NewBeeMallCloudAdminUserController {\n\n    private static final Logger logger = LoggerFactory.getLogger(NewBeeMallCloudAdminUserController.class);\n\n    @Resource\n    private AdminUserService adminUserService;\n\n    @ApiOperation(value = \"登录接口\", notes = \"返回token\")\n    @RequestMapping(value = \"/users/admin/login\", method = RequestMethod.POST)\n    public Result<String> login(@RequestBody @Valid AdminLoginParam adminLoginParam) {\n        String loginResult = adminUserService.login(adminLoginParam.getUserName(), adminLoginParam.getPasswordMd5());\n        logger.info(\"manage login api,adminName={},loginResult={}\", adminLoginParam.getUserName(), loginResult);\n\n        //登录成功\n        if (StringUtils.hasText(loginResult) && loginResult.length() == 32) {\n            Result result = ResultGenerator.genSuccessResult();\n            result.setData(loginResult);\n            return result;\n        }\n        //登录失败\n        return ResultGenerator.genFailResult(loginResult);\n    }\n\n    @ApiOperation(value = \"获取管理员信息接口\")\n    @RequestMapping(value = \"/users/admin/profile\", method = RequestMethod.POST)\n    public Result profile(@TokenToAdminUser AdminUserToken adminUser) {\n        logger.info(\"adminUser:{}\", adminUser.toString());\n        AdminUser adminUserEntity = adminUserService.getUserDetailById(adminUser.getAdminUserId());\n        if (adminUserEntity != null) {\n            adminUserEntity.setLoginPassword(\"******\");\n            Result result = ResultGenerator.genSuccessResult();\n            result.setData(adminUserEntity);\n            return result;\n        }\n        return ResultGenerator.genFailResult(\"无此用户数据\");\n    }\n\n    @ApiOperation(value = \"修改管理员密码接口\")\n    @RequestMapping(value = \"/users/admin/password\", method = RequestMethod.PUT)\n    public Result passwordUpdate(@RequestBody @Valid UpdateAdminPasswordParam adminPasswordParam, @TokenToAdminUser AdminUserToken adminUser) {\n        logger.info(\"adminUser:{}\", adminUser.toString());\n        if (adminUserService.updatePassword(adminUser.getAdminUserId(), adminPasswordParam.getOriginalPassword(), adminPasswordParam.getNewPassword())) {\n            return ResultGenerator.genSuccessResult();\n        } else {\n            return ResultGenerator.genFailResult(\"DB ERROR\");\n        }\n    }\n\n    @ApiOperation(value = \"修改管理员信息接口\")\n    @RequestMapping(value = \"/users/admin/name\", method = RequestMethod.PUT)\n    public Result nameUpdate(@RequestBody @Valid UpdateAdminNameParam adminNameParam, @TokenToAdminUser AdminUserToken adminUser) {\n        logger.info(\"adminUser:{}\", adminUser.toString());\n        if (adminUserService.updateName(adminUser.getAdminUserId(), adminNameParam.getLoginUserName(), adminNameParam.getNickName())) {\n            return ResultGenerator.genSuccessResult();\n        } else {\n            return ResultGenerator.genFailResult(\"DB ERROR\");\n        }\n    }\n\n    @ApiOperation(value = \"管理员退出登录的接口\")\n    @RequestMapping(value = \"/users/admin/logout\", method = RequestMethod.DELETE)\n    public Result logout(@TokenToAdminUser AdminUserToken adminUser) {\n        logger.info(\"adminUser:{}\", adminUser.toString());\n        adminUserService.logout(adminUser.getToken());\n        return ResultGenerator.genSuccessResult();\n    }\n\n    @ApiOperation(value = \"根据token获取管理员信息的接口\", notes = \"OpenFeign调用\")\n    @RequestMapping(value = \"/users/admin/{token}\", method = RequestMethod.GET)\n    public Result<AdminUser> getAdminUserByToken(@PathVariable(\"token\") String token) {\n        AdminUser adminUser = adminUserService.getUserDetailByToken(token);\n        if (adminUser != null) {\n            adminUser.setLoginPassword(\"******\");\n            Result result = ResultGenerator.genSuccessResult();\n            result.setData(adminUser);\n            return result;\n        }\n        return ResultGenerator.genFailResult(\"无此用户数据\");\n    }\n\n\n}"
  },
  {
    "path": "newbee-mall-cloud-user-service/newbee-mall-cloud-user-web/src/main/java/ltd/user/cloud/newbee/controller/NewBeeMallCloudPersonalController.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.user.cloud.newbee.controller;\n\nimport io.swagger.annotations.Api;\nimport io.swagger.annotations.ApiOperation;\nimport io.swagger.annotations.ApiParam;\nimport ltd.common.cloud.newbee.enums.ServiceResultEnum;\nimport ltd.common.cloud.newbee.dto.Result;\nimport ltd.common.cloud.newbee.dto.ResultGenerator;\nimport ltd.common.cloud.newbee.pojo.MallUserToken;\nimport ltd.common.cloud.newbee.util.BeanUtil;\nimport ltd.common.cloud.newbee.util.NumberUtil;\nimport ltd.user.cloud.newbee.config.annotation.TokenToMallUser;\nimport ltd.user.cloud.newbee.controller.param.MallUserLoginParam;\nimport ltd.user.cloud.newbee.controller.param.MallUserRegisterParam;\nimport ltd.user.cloud.newbee.controller.param.MallUserUpdateParam;\nimport ltd.user.cloud.newbee.controller.vo.NewBeeMallUserVO;\nimport ltd.user.cloud.newbee.entity.MallUser;\nimport ltd.user.cloud.newbee.service.NewBeeMallUserService;\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport org.springframework.util.StringUtils;\nimport org.springframework.web.bind.annotation.*;\n\nimport javax.annotation.Resource;\nimport javax.validation.Valid;\n\n@RestController\n@Api(value = \"v1\", tags = \"新蜂商城用户操作相关接口\")\n@RequestMapping(\"/users/mall\")\npublic class NewBeeMallCloudPersonalController {\n\n    @Resource\n    private NewBeeMallUserService newBeeMallUserService;\n\n    private static final Logger logger = LoggerFactory.getLogger(NewBeeMallCloudPersonalController.class);\n\n    @PostMapping(\"/login\")\n    @ApiOperation(value = \"登录接口\", notes = \"返回token\")\n    public Result<String> login(@RequestBody @Valid MallUserLoginParam mallUserLoginParam) {\n        if (!NumberUtil.isPhone(mallUserLoginParam.getLoginName())){\n            return ResultGenerator.genFailResult(ServiceResultEnum.LOGIN_NAME_IS_NOT_PHONE.getResult());\n        }\n        String loginResult = newBeeMallUserService.login(mallUserLoginParam.getLoginName(), mallUserLoginParam.getPasswordMd5());\n\n        logger.info(\"login api,loginName={},loginResult={}\", mallUserLoginParam.getLoginName(), loginResult);\n\n        //登录成功\n        if (StringUtils.hasText(loginResult) && loginResult.length() == 32) {\n            Result result = ResultGenerator.genSuccessResult();\n            result.setData(loginResult);\n            return result;\n        }\n        //登录失败\n        return ResultGenerator.genFailResult(loginResult);\n    }\n\n\n    @PostMapping(\"/logout\")\n    @ApiOperation(value = \"登出接口\", notes = \"清除token\")\n    public Result<String> logout(@TokenToMallUser MallUserToken loginMallUserToken) {\n        Boolean logoutResult = newBeeMallUserService.logout(loginMallUserToken.getToken());\n\n        logger.info(\"logout api,loginMallUser={}\", loginMallUserToken.getUserId());\n\n        //登出成功\n        if (logoutResult) {\n            return ResultGenerator.genSuccessResult();\n        }\n        //登出失败\n        return ResultGenerator.genFailResult(\"logout error\");\n    }\n\n\n    @PostMapping(\"/register\")\n    @ApiOperation(value = \"用户注册\", notes = \"\")\n    public Result register(@RequestBody @Valid MallUserRegisterParam mallUserRegisterParam) {\n        if (!NumberUtil.isPhone(mallUserRegisterParam.getLoginName())){\n            return ResultGenerator.genFailResult(ServiceResultEnum.LOGIN_NAME_IS_NOT_PHONE.getResult());\n        }\n        String registerResult = newBeeMallUserService.register(mallUserRegisterParam.getLoginName(), mallUserRegisterParam.getPassword());\n\n        logger.info(\"register api,loginName={},loginResult={}\", mallUserRegisterParam.getLoginName(), registerResult);\n\n        //注册成功\n        if (ServiceResultEnum.SUCCESS.getResult().equals(registerResult)) {\n            return ResultGenerator.genSuccessResult();\n        }\n        //注册失败\n        return ResultGenerator.genFailResult(registerResult);\n    }\n\n    @PutMapping(\"/update\")\n    @ApiOperation(value = \"修改用户信息\", notes = \"\")\n    public Result updateInfo(@RequestBody @ApiParam(\"用户信息\") MallUserUpdateParam mallUserUpdateParam, @TokenToMallUser MallUserToken loginMallUserToken) {\n        Boolean flag = newBeeMallUserService.updateUserInfo(mallUserUpdateParam, loginMallUserToken.getUserId());\n        if (flag) {\n            //返回成功\n            Result result = ResultGenerator.genSuccessResult();\n            return result;\n        } else {\n            //返回失败\n            Result result = ResultGenerator.genFailResult(\"修改失败\");\n            return result;\n        }\n    }\n\n    @GetMapping(\"/detail\")\n    @ApiOperation(value = \"获取用户信息\", notes = \"\")\n    public Result<NewBeeMallUserVO> getUserDetail(@TokenToMallUser MallUserToken loginMallUserToken) {\n        NewBeeMallUserVO mallUserVO = new NewBeeMallUserVO();\n        MallUser userDetailByToken = newBeeMallUserService.getUserDetailByToken(loginMallUserToken.getToken());\n        BeanUtil.copyProperties(userDetailByToken, mallUserVO);\n        return ResultGenerator.genSuccessResult(mallUserVO);\n    }\n\n    @RequestMapping(value = \"/getDetailByToken\", method = RequestMethod.GET)\n    public Result getMallUserByToken(@RequestParam(\"token\") String token) {\n        MallUser userDetailByToken = newBeeMallUserService.getUserDetailByToken(token);\n        if (userDetailByToken != null) {\n            Result result = ResultGenerator.genSuccessResult();\n            result.setData(userDetailByToken);\n            return result;\n        }\n        return ResultGenerator.genFailResult(\"无此用户数据\");\n    }\n}\n"
  },
  {
    "path": "newbee-mall-cloud-user-service/newbee-mall-cloud-user-web/src/main/java/ltd/user/cloud/newbee/controller/param/AdminLoginParam.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.user.cloud.newbee.controller.param;\n\nimport io.swagger.annotations.ApiModelProperty;\nimport lombok.Data;\n\nimport javax.validation.constraints.NotEmpty;\nimport java.io.Serializable;\n\n@Data\npublic class AdminLoginParam implements Serializable {\n\n    @ApiModelProperty(\"登录名\")\n    @NotEmpty(message = \"登录名不能为空\")\n    private String userName;\n\n    @ApiModelProperty(\"用户密码(需要MD5加密)\")\n    @NotEmpty(message = \"密码不能为空\")\n    private String passwordMd5;\n}\n"
  },
  {
    "path": "newbee-mall-cloud-user-service/newbee-mall-cloud-user-web/src/main/java/ltd/user/cloud/newbee/controller/param/MallUserLoginParam.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.user.cloud.newbee.controller.param;\n\nimport io.swagger.annotations.ApiModelProperty;\nimport lombok.Data;\n\nimport javax.validation.constraints.NotEmpty;\nimport java.io.Serializable;\n\n/**\n * 用户登录param\n */\n@Data\npublic class MallUserLoginParam implements Serializable {\n\n    @ApiModelProperty(\"登录名\")\n    @NotEmpty(message = \"登录名不能为空\")\n    private String loginName;\n\n    @ApiModelProperty(\"用户密码(需要MD5加密)\")\n    @NotEmpty(message = \"密码不能为空\")\n    private String passwordMd5;\n}\n"
  },
  {
    "path": "newbee-mall-cloud-user-service/newbee-mall-cloud-user-web/src/main/java/ltd/user/cloud/newbee/controller/param/MallUserRegisterParam.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.user.cloud.newbee.controller.param;\n\nimport io.swagger.annotations.ApiModelProperty;\nimport lombok.Data;\n\nimport javax.validation.constraints.NotEmpty;\nimport java.io.Serializable;\n\n/**\n * 用户注册param\n */\n@Data\npublic class MallUserRegisterParam implements Serializable {\n\n    @ApiModelProperty(\"登录名\")\n    @NotEmpty(message = \"登录名不能为空\")\n    private String loginName;\n\n    @ApiModelProperty(\"用户密码\")\n    @NotEmpty(message = \"密码不能为空\")\n    private String password;\n}\n"
  },
  {
    "path": "newbee-mall-cloud-user-service/newbee-mall-cloud-user-web/src/main/java/ltd/user/cloud/newbee/controller/param/MallUserUpdateParam.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.user.cloud.newbee.controller.param;\n\nimport io.swagger.annotations.ApiModelProperty;\nimport lombok.Data;\n\nimport java.io.Serializable;\n\n/**\n * 用户修改param\n */\n@Data\npublic class MallUserUpdateParam implements Serializable {\n\n    @ApiModelProperty(\"用户昵称\")\n    private String nickName;\n\n    @ApiModelProperty(\"用户密码(需要MD5加密)\")\n    private String passwordMd5;\n\n    @ApiModelProperty(\"个性签名\")\n    private String introduceSign;\n\n}\n"
  },
  {
    "path": "newbee-mall-cloud-user-service/newbee-mall-cloud-user-web/src/main/java/ltd/user/cloud/newbee/controller/param/UpdateAdminNameParam.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.user.cloud.newbee.controller.param;\n\nimport lombok.Data;\n\nimport javax.validation.constraints.NotEmpty;\n\n@Data\npublic class UpdateAdminNameParam {\n\n    @NotEmpty(message = \"loginUserName不能为空\")\n    private String loginUserName;\n\n    @NotEmpty(message = \"nickName不能为空\")\n    private String nickName;\n}\n"
  },
  {
    "path": "newbee-mall-cloud-user-service/newbee-mall-cloud-user-web/src/main/java/ltd/user/cloud/newbee/controller/param/UpdateAdminPasswordParam.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.user.cloud.newbee.controller.param;\n\nimport lombok.Data;\n\nimport javax.validation.constraints.NotEmpty;\n\n@Data\npublic class UpdateAdminPasswordParam {\n\n    @NotEmpty(message = \"originalPassword不能为空\")\n    private String originalPassword;\n\n    @NotEmpty(message = \"newPassword不能为空\")\n    private String newPassword;\n}\n"
  },
  {
    "path": "newbee-mall-cloud-user-service/newbee-mall-cloud-user-web/src/main/java/ltd/user/cloud/newbee/controller/vo/NewBeeMallUserVO.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.user.cloud.newbee.controller.vo;\n\nimport io.swagger.annotations.ApiModelProperty;\nimport lombok.Data;\n\nimport java.io.Serializable;\n\n@Data\npublic class NewBeeMallUserVO implements Serializable {\n\n    @ApiModelProperty(\"用户昵称\")\n    private String nickName;\n\n    @ApiModelProperty(\"用户登录名\")\n    private String loginName;\n\n    @ApiModelProperty(\"个性签名\")\n    private String introduceSign;\n}\n"
  },
  {
    "path": "newbee-mall-cloud-user-service/newbee-mall-cloud-user-web/src/main/java/ltd/user/cloud/newbee/dao/AdminUserMapper.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本系统已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.user.cloud.newbee.dao;\n\nimport ltd.user.cloud.newbee.entity.AdminUser;\nimport org.apache.ibatis.annotations.Param;\n\npublic interface AdminUserMapper {\n\n    int insert(AdminUser record);\n\n    int insertSelective(AdminUser record);\n\n    /**\n     * 登陆方法\n     *\n     * @param userName\n     * @param password\n     * @return\n     */\n    AdminUser login(@Param(\"userName\") String userName, @Param(\"password\") String password);\n\n    AdminUser selectByPrimaryKey(Long adminUserId);\n\n    int updateByPrimaryKeySelective(AdminUser record);\n\n    int updateByPrimaryKey(AdminUser record);\n}"
  },
  {
    "path": "newbee-mall-cloud-user-service/newbee-mall-cloud-user-web/src/main/java/ltd/user/cloud/newbee/dao/MallUserMapper.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.user.cloud.newbee.dao;\n\nimport ltd.common.cloud.newbee.dto.PageQueryUtil;\nimport ltd.user.cloud.newbee.entity.MallUser;\nimport org.apache.ibatis.annotations.Param;\n\nimport java.util.List;\n\npublic interface MallUserMapper {\n    int deleteByPrimaryKey(Long userId);\n\n    int insert(MallUser record);\n\n    int insertSelective(MallUser record);\n\n    MallUser selectByPrimaryKey(Long userId);\n\n    MallUser selectByLoginName(String loginName);\n\n    MallUser selectByLoginNameAndPasswd(@Param(\"loginName\") String loginName, @Param(\"password\") String password);\n\n    int updateByPrimaryKeySelective(MallUser record);\n\n    int updateByPrimaryKey(MallUser record);\n\n    List<MallUser> findMallUserList(PageQueryUtil pageUtil);\n\n    int getTotalMallUsers(PageQueryUtil pageUtil);\n\n    int lockUserBatch(@Param(\"ids\") Long[] ids, @Param(\"lockStatus\") int lockStatus);\n}"
  },
  {
    "path": "newbee-mall-cloud-user-service/newbee-mall-cloud-user-web/src/main/java/ltd/user/cloud/newbee/entity/AdminUser.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本系统已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.user.cloud.newbee.entity;\n\nimport lombok.Data;\n\n@Data\npublic class AdminUser {\n    private Long adminUserId;\n\n    private String loginUserName;\n\n    private String loginPassword;\n\n    private String nickName;\n\n    private Byte locked;\n}"
  },
  {
    "path": "newbee-mall-cloud-user-service/newbee-mall-cloud-user-web/src/main/java/ltd/user/cloud/newbee/entity/MallUser.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.user.cloud.newbee.entity;\n\nimport com.fasterxml.jackson.annotation.JsonFormat;\nimport lombok.Data;\n\nimport java.util.Date;\n\n@Data\npublic class MallUser {\n    private Long userId;\n\n    private String nickName;\n\n    private String loginName;\n\n    private String passwordMd5;\n\n    private String introduceSign;\n\n    private Byte isDeleted;\n\n    private Byte lockedFlag;\n\n    @JsonFormat(pattern = \"yyyy-MM-dd HH:mm:ss\", timezone = \"GMT+8\")\n    private Date createTime;\n}"
  },
  {
    "path": "newbee-mall-cloud-user-service/newbee-mall-cloud-user-web/src/main/java/ltd/user/cloud/newbee/service/AdminUserService.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本系统已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.user.cloud.newbee.service;\n\nimport ltd.user.cloud.newbee.entity.AdminUser;\n\npublic interface AdminUserService {\n\n    /**\n     * 登录\n     * @param userName\n     * @param password\n     * @return\n     */\n    String login(String userName, String password);\n\n    /**\n     * 获取用户信息\n     *\n     * @param loginUserId\n     * @return\n     */\n    AdminUser getUserDetailById(Long loginUserId);\n\n    /**\n     * 获取用户信息 by token\n     *\n     * @param token\n     * @return\n     */\n    AdminUser getUserDetailByToken(String token);\n\n    /**\n     * 修改当前登录用户的密码\n     *\n     * @param loginUserId\n     * @param originalPassword\n     * @param newPassword\n     * @return\n     */\n    Boolean updatePassword(Long loginUserId, String originalPassword, String newPassword);\n\n    /**\n     * 修改当前登录用户的名称信息\n     *\n     * @param loginUserId\n     * @param loginUserName\n     * @param nickName\n     * @return\n     */\n    Boolean updateName(Long loginUserId, String loginUserName, String nickName);\n\n    /**\n     * 登出接口\n     * @param token\n     * @return\n     */\n    Boolean logout(String token);\n\n\n}\n"
  },
  {
    "path": "newbee-mall-cloud-user-service/newbee-mall-cloud-user-web/src/main/java/ltd/user/cloud/newbee/service/NewBeeMallUserService.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.user.cloud.newbee.service;\n\nimport ltd.common.cloud.newbee.dto.PageQueryUtil;\nimport ltd.common.cloud.newbee.dto.PageResult;\nimport ltd.user.cloud.newbee.controller.param.MallUserUpdateParam;\nimport ltd.user.cloud.newbee.entity.AdminUser;\nimport ltd.user.cloud.newbee.entity.MallUser;\n\npublic interface NewBeeMallUserService {\n\n    /**\n     * 用户注册\n     *\n     * @param loginName\n     * @param password\n     * @return\n     */\n    String register(String loginName, String password);\n\n\n    /**\n     * 登录\n     *\n     * @param loginName\n     * @param passwordMD5\n     * @return\n     */\n    String login(String loginName, String passwordMD5);\n\n    /**\n     * 用户信息修改\n     *\n     * @param mallUser\n     * @return\n     */\n    Boolean updateUserInfo(MallUserUpdateParam mallUser, Long userId);\n\n    /**\n     * 获取用户信息 by token\n     *\n     * @param token\n     * @return\n     */\n    MallUser getUserDetailByToken(String token);\n\n    /**\n     * 登出接口\n     * @param token\n     * @return\n     */\n    Boolean logout(String token);\n\n    /**\n     * 用户禁用与解除禁用(0-未锁定 1-已锁定)\n     *\n     * @param ids\n     * @param lockStatus\n     * @return\n     */\n    Boolean lockUsers(Long[] ids, int lockStatus);\n\n    /**\n     * 后台分页\n     *\n     * @param pageUtil\n     * @return\n     */\n    PageResult getNewBeeMallUsersPage(PageQueryUtil pageUtil);\n}\n"
  },
  {
    "path": "newbee-mall-cloud-user-service/newbee-mall-cloud-user-web/src/main/java/ltd/user/cloud/newbee/service/impl/AdminUserServiceImpl.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本系统已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.user.cloud.newbee.service.impl;\n\nimport ltd.common.cloud.newbee.util.NumberUtil;\nimport ltd.common.cloud.newbee.util.SystemUtil;\nimport ltd.user.cloud.newbee.dao.AdminUserMapper;\nimport ltd.user.cloud.newbee.entity.AdminUser;\nimport ltd.common.cloud.newbee.pojo.AdminUserToken;\nimport ltd.user.cloud.newbee.service.AdminUserService;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.data.redis.core.RedisTemplate;\nimport org.springframework.data.redis.core.ValueOperations;\nimport org.springframework.stereotype.Service;\n\nimport javax.annotation.Resource;\nimport java.util.concurrent.TimeUnit;\n\n@Service\npublic class AdminUserServiceImpl implements AdminUserService {\n\n    @Resource\n    private AdminUserMapper adminUserMapper;\n\n    @Autowired\n    private RedisTemplate redisTemplate;\n\n    @Override\n    public String login(String userName, String password) {\n        AdminUser loginAdminUser = adminUserMapper.login(userName, password);\n        if (loginAdminUser != null) {\n            //登录后即执行修改token的操作\n            String token = getNewToken(System.currentTimeMillis() + \"\", loginAdminUser.getAdminUserId());\n            AdminUserToken adminUserToken = new AdminUserToken();\n            adminUserToken.setAdminUserId(loginAdminUser.getAdminUserId());\n            adminUserToken.setToken(token);\n            ValueOperations<String, AdminUserToken> setToken = redisTemplate.opsForValue();\n            setToken.set(token, adminUserToken, 2 * 24 * 60 * 60, TimeUnit.SECONDS);//过期时间 48 小时\n            return token;\n        }\n        return \"登录失败\";\n    }\n\n\n    /**\n     * 获取token值\n     *\n     * @param timeStr\n     * @param userId\n     * @return\n     */\n    private String getNewToken(String timeStr, Long userId) {\n        String src = timeStr + userId + NumberUtil.genRandomNum(6);\n        return SystemUtil.genToken(src);\n    }\n\n\n    @Override\n    public AdminUser getUserDetailById(Long loginUserId) {\n        return adminUserMapper.selectByPrimaryKey(loginUserId);\n    }\n\n    @Override\n    public AdminUser getUserDetailByToken(String token) {\n        ValueOperations<String, AdminUserToken> opsForAdminUserToken = redisTemplate.opsForValue();\n        AdminUserToken adminUserToken = opsForAdminUserToken.get(token);\n        if (adminUserToken != null) {\n            return adminUserMapper.selectByPrimaryKey(adminUserToken.getAdminUserId());\n        }\n        return null;\n    }\n\n    @Override\n    public Boolean updatePassword(Long loginUserId, String originalPassword, String newPassword) {\n        AdminUser adminUser = adminUserMapper.selectByPrimaryKey(loginUserId);\n        //当前用户非空才可以进行更改\n        if (adminUser != null) {\n            //比较原密码是否正确\n            if (originalPassword.equals(adminUser.getLoginPassword())) {\n                //设置新密码并修改\n                adminUser.setLoginPassword(newPassword);\n                if (adminUserMapper.updateByPrimaryKeySelective(adminUser) > 0) {\n                    //修改成功且清空当前token则返回true\n                    return true;\n                }\n            }\n        }\n        return false;\n    }\n\n    @Override\n    public Boolean updateName(Long loginUserId, String loginUserName, String nickName) {\n        AdminUser adminUser = adminUserMapper.selectByPrimaryKey(loginUserId);\n        //当前用户非空才可以进行更改\n        if (adminUser != null) {\n            //设置新名称并修改\n            adminUser.setLoginUserName(loginUserName);\n            adminUser.setNickName(nickName);\n            if (adminUserMapper.updateByPrimaryKeySelective(adminUser) > 0) {\n                //修改成功则返回true\n                return true;\n            }\n        }\n        return false;\n    }\n\n    @Override\n    public Boolean logout(String token) {\n        redisTemplate.delete(token);\n        return true;\n    }\n}\n"
  },
  {
    "path": "newbee-mall-cloud-user-service/newbee-mall-cloud-user-web/src/main/java/ltd/user/cloud/newbee/service/impl/NewBeeMallUserServiceImpl.java",
    "content": "/**\n * 严肃声明：\n * 开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n * 本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n * 可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\n * Copyright (c) 2022 程序员十三 all rights reserved.\n * 版权所有，侵权必究！\n */\npackage ltd.user.cloud.newbee.service.impl;\n\nimport ltd.common.cloud.newbee.enums.ServiceResultEnum;\nimport ltd.common.cloud.newbee.dto.PageQueryUtil;\nimport ltd.common.cloud.newbee.dto.PageResult;\nimport ltd.common.cloud.newbee.exception.NewBeeMallException;\nimport ltd.common.cloud.newbee.pojo.MallUserToken;\nimport ltd.common.cloud.newbee.util.MD5Util;\nimport ltd.common.cloud.newbee.util.NumberUtil;\nimport ltd.common.cloud.newbee.util.SystemUtil;\nimport ltd.user.cloud.newbee.controller.param.MallUserUpdateParam;\nimport ltd.user.cloud.newbee.dao.MallUserMapper;\nimport ltd.user.cloud.newbee.entity.MallUser;\nimport ltd.user.cloud.newbee.service.NewBeeMallUserService;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.data.redis.core.RedisTemplate;\nimport org.springframework.data.redis.core.ValueOperations;\nimport org.springframework.stereotype.Service;\n\nimport java.util.List;\nimport java.util.concurrent.TimeUnit;\n\n@Service\npublic class NewBeeMallUserServiceImpl implements NewBeeMallUserService {\n\n    @Autowired\n    private MallUserMapper mallUserMapper;\n\n    @Autowired\n    private RedisTemplate redisTemplate;\n\n    @Override\n    public String register(String loginName, String password) {\n        if (mallUserMapper.selectByLoginName(loginName) != null) {\n            return ServiceResultEnum.SAME_LOGIN_NAME_EXIST.getResult();\n        }\n        MallUser registerUser = new MallUser();\n        registerUser.setLoginName(loginName);\n        registerUser.setNickName(loginName);\n        registerUser.setIntroduceSign(\"随新所欲，蜂富多彩\");\n        String passwordMD5 = MD5Util.MD5Encode(password, \"UTF-8\");\n        registerUser.setPasswordMd5(passwordMD5);\n        if (mallUserMapper.insertSelective(registerUser) > 0) {\n            return ServiceResultEnum.SUCCESS.getResult();\n        }\n        return ServiceResultEnum.DB_ERROR.getResult();\n    }\n\n    @Override\n    public String login(String loginName, String passwordMD5) {\n        MallUser user = mallUserMapper.selectByLoginNameAndPasswd(loginName, passwordMD5);\n        if (user != null) {\n            if (user.getLockedFlag() == 1) {\n                return ServiceResultEnum.LOGIN_USER_LOCKED_ERROR.getResult();\n            }\n            //登录后即执行修改token的操作\n            String token = getNewToken(System.currentTimeMillis() + \"\", user.getUserId());\n            MallUserToken mallUserToken = new MallUserToken();\n            mallUserToken.setUserId(user.getUserId());\n            mallUserToken.setToken(token);\n            ValueOperations<String, MallUserToken> setToken = redisTemplate.opsForValue();\n            setToken.set(token, mallUserToken, 7 * 24 * 60 * 60, TimeUnit.SECONDS);//过期时间7天\n            return token;\n\n        }\n        return ServiceResultEnum.LOGIN_ERROR.getResult();\n    }\n\n    /**\n     * 获取token值\n     *\n     * @param timeStr\n     * @param userId\n     * @return\n     */\n    private String getNewToken(String timeStr, Long userId) {\n        String src = timeStr + userId + NumberUtil.genRandomNum(4);\n        return SystemUtil.genToken(src);\n    }\n\n    @Override\n    public Boolean updateUserInfo(MallUserUpdateParam mallUser, Long userId) {\n        MallUser user = mallUserMapper.selectByPrimaryKey(userId);\n        if (user == null) {\n            NewBeeMallException.fail(ServiceResultEnum.DATA_NOT_EXIST.getResult());\n        }\n        user.setNickName(mallUser.getNickName());\n        //若密码为空字符，则表明用户不打算修改密码，使用原密码保存\n        if (!MD5Util.MD5Encode(\"\", \"UTF-8\").equals(mallUser.getPasswordMd5())) {\n            user.setPasswordMd5(mallUser.getPasswordMd5());\n        }\n        user.setIntroduceSign(mallUser.getIntroduceSign());\n        if (mallUserMapper.updateByPrimaryKeySelective(user) > 0) {\n            return true;\n        }\n        return false;\n    }\n\n    @Override\n    public MallUser getUserDetailByToken(String token) {\n        ValueOperations<String, MallUserToken> opsForMallUserToken = redisTemplate.opsForValue();\n        MallUserToken mallUserToken = opsForMallUserToken.get(token);\n        if (mallUserToken != null) {\n            MallUser mallUser = mallUserMapper.selectByPrimaryKey(mallUserToken.getUserId());\n            if (mallUser == null) {\n                NewBeeMallException.fail(ServiceResultEnum.DATA_NOT_EXIST.getResult());\n            }\n            if (mallUser.getLockedFlag().intValue() == 1) {\n                NewBeeMallException.fail(ServiceResultEnum.LOGIN_USER_LOCKED_ERROR.getResult());\n            }\n            return mallUser;\n        }\n        NewBeeMallException.fail(ServiceResultEnum.DATA_NOT_EXIST.getResult());\n        return null;\n    }\n\n    @Override\n    public Boolean logout(String token) {\n        redisTemplate.delete(token);\n        return true;\n    }\n\n    @Override\n    public PageResult getNewBeeMallUsersPage(PageQueryUtil pageUtil) {\n        List<MallUser> mallUsers = mallUserMapper.findMallUserList(pageUtil);\n        int total = mallUserMapper.getTotalMallUsers(pageUtil);\n        PageResult pageResult = new PageResult(mallUsers, total, pageUtil.getLimit(), pageUtil.getPage());\n        return pageResult;\n    }\n\n    @Override\n    public Boolean lockUsers(Long[] ids, int lockStatus) {\n        if (ids.length < 1) {\n            return false;\n        }\n        return mallUserMapper.lockUserBatch(ids, lockStatus) > 0;\n    }\n}\n"
  },
  {
    "path": "newbee-mall-cloud-user-service/newbee-mall-cloud-user-web/src/main/resources/application.properties",
    "content": "server.port=29000\n# 服务名称\nspring.application.name=newbee-mall-cloud-user-service\n# Nacos地址\nspring.cloud.nacos.discovery.server-addr=127.0.0.1:8848\n# Nacos登录用户名(默认为nacos，生产环境一定要修改)\nspring.cloud.nacos.username=nacos\n# Nacos登录密码(默认为nacos，生产环境一定要修改)\nspring.cloud.nacos.password=nacos\n\n# datasource config (MySQL)\nspring.datasource.name=newbee-mall-cloud-user-datasource\nspring.datasource.driverClassName=com.mysql.cj.jdbc.Driver\nspring.datasource.url=jdbc:mysql://localhost:3306/newbee_mall_cloud_user_db?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=utf8&autoReconnect=true&useSSL=false&allowMultiQueries=true\nspring.datasource.username=root\nspring.datasource.password=123456\nspring.datasource.hikari.minimum-idle=5\nspring.datasource.hikari.maximum-pool-size=15\nspring.datasource.hikari.auto-commit=true\nspring.datasource.hikari.idle-timeout=60000\nspring.datasource.hikari.pool-name=hikariCP\nspring.datasource.hikari.max-lifetime=600000\nspring.datasource.hikari.connection-timeout=30000\nspring.datasource.hikari.connection-test-query=SELECT 1\n\n# mybatis config\nmybatis.mapper-locations=classpath:mapper/*Mapper.xml\n\n# sentinel config\nspring.cloud.sentinel.transport.port=8900\nspring.cloud.sentinel.transport.clientIp=127.0.0.1\n# 指定Sentinel控制台地址\nspring.cloud.sentinel.transport.dashboard=127.0.0.1:9113\n\n##Redis 配置\n# Redis数据库索引（默认为0）\nspring.redis.database=13\n# Redis服务器地址\nspring.redis.host=127.0.0.1\n# Redis服务器连接端口\nspring.redis.port=6379\n# Redis服务器连接密码\nspring.redis.password=123456789\n# 连接池最大连接数（使用负值表示没有限制）\nspring.redis.jedis.pool.max-active=8\n# 连接池最大阻塞等待时间（使用负值表示没有限制）\nspring.redis.jedis.pool.max-wait=-1\n# 连接池中的最大空闲连接\nspring.redis.jedis.pool.max-idle=8\n# 连接池中的最小空闲连接\nspring.redis.jedis.pool.min-idle=0\n# 连接超时时间（毫秒）\nspring.redis.timeout=5000\n\n# 演示需要，开启当前项目中的 debug 级别日志\nlogging.level.ltd.user.cloud.newbee=debug\n\n# Sleuth采样率，取值范围为[0.1,1.0]，值越大收集越及时，但性能影响也越大\nspring.sleuth.sampler.probability=1.0\n# 每秒数据采集量，最多n条/秒Trace\nspring.sleuth.sampler.rate=500\n\nspring.zipkin.base-url=http://localhost:9411"
  },
  {
    "path": "newbee-mall-cloud-user-service/newbee-mall-cloud-user-web/src/main/resources/logback.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE configuration>\n<configuration>\n    <include resource=\"org/springframework/boot/logging/logback/defaults.xml\"/>\n    <include resource=\"org/springframework/boot/logging/logback/console-appender.xml\"/>\n    <!--应用名称-->\n    <property name=\"APP_NAME\" value=\"newbee-mall-cloud-user-service-log\"/>\n    <contextName>${APP_NAME}</contextName>\n\n    <!-- 控制台输出 -->\n    <appender name=\"CONSOLE\" class=\"ch.qos.logback.core.ConsoleAppender\">\n        <filter class=\"ch.qos.logback.classic.filter.ThresholdFilter\">\n            <level>INFO</level>\n        </filter>\n        <!-- 日志输出编码 -->\n        <encoder>\n            <pattern>${CONSOLE_LOG_PATTERN}</pattern>\n            <charset>utf8</charset>\n        </encoder>\n    </appender>\n\n    <appender name=\"LOGSTASH\" class=\"net.logstash.logback.appender.LogstashTcpSocketAppender\">\n        <!--可以访问的logstash日志收集端口-->\n        <destination>192.168.110.57:4560</destination>\n        <filter class=\"ch.qos.logback.classic.filter.ThresholdFilter\">\n            <level>INFO</level>\n        </filter>\n        <encoder charset=\"UTF-8\" class=\"net.logstash.logback.encoder.LogstashEncoder\"/>\n    </appender>\n\n    <root level=\"INFO\">\n        <appender-ref ref=\"CONSOLE\"/>\n        <appender-ref ref=\"LOGSTASH\"/>\n    </root>\n</configuration>\n"
  },
  {
    "path": "newbee-mall-cloud-user-service/newbee-mall-cloud-user-web/src/main/resources/mapper/AdminUserMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n严肃声明：\n开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\nCopyright (c) 2022 程序员十三 all rights reserved.\n版权所有，侵权必究！\n-->\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"ltd.user.cloud.newbee.dao.AdminUserMapper\">\n    <resultMap id=\"BaseResultMap\" type=\"ltd.user.cloud.newbee.entity.AdminUser\">\n        <id column=\"admin_user_id\" jdbcType=\"BIGINT\" property=\"adminUserId\" />\n        <result column=\"login_user_name\" jdbcType=\"VARCHAR\" property=\"loginUserName\" />\n        <result column=\"login_password\" jdbcType=\"VARCHAR\" property=\"loginPassword\" />\n        <result column=\"nick_name\" jdbcType=\"VARCHAR\" property=\"nickName\" />\n        <result column=\"locked\" jdbcType=\"TINYINT\" property=\"locked\" />\n    </resultMap>\n    <sql id=\"Base_Column_List\">\n        admin_user_id, login_user_name, login_password, nick_name, locked\n    </sql>\n\n    <select id=\"login\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"Base_Column_List\" />\n        from tb_newbee_mall_admin_user\n        where login_user_name = #{userName,jdbcType=VARCHAR} AND login_password=#{password,jdbcType=VARCHAR} AND locked = 0\n    </select>\n\n    <select id=\"selectByPrimaryKey\" parameterType=\"java.lang.Long\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"Base_Column_List\" />\n        from tb_newbee_mall_admin_user\n        where admin_user_id = #{adminUserId,jdbcType=BIGINT}\n    </select>\n    <insert id=\"insert\" parameterType=\"ltd.user.cloud.newbee.entity.AdminUser\">\n        insert into tb_newbee_mall_admin_user (admin_user_id, login_user_name, login_password,\n        nick_name, locked)\n        values (#{adminUserId,jdbcType=BIGINT}, #{loginUserName,jdbcType=VARCHAR}, #{loginPassword,jdbcType=VARCHAR},\n        #{nickName,jdbcType=VARCHAR}, #{locked,jdbcType=TINYINT})\n    </insert>\n    <insert id=\"insertSelective\" parameterType=\"ltd.user.cloud.newbee.entity.AdminUser\">\n        insert into tb_newbee_mall_admin_user\n        <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\n            <if test=\"adminUserId != null\">\n                admin_user_id,\n            </if>\n            <if test=\"loginUserName != null\">\n                login_user_name,\n            </if>\n            <if test=\"loginPassword != null\">\n                login_password,\n            </if>\n            <if test=\"nickName != null\">\n                nick_name,\n            </if>\n            <if test=\"locked != null\">\n                locked,\n            </if>\n        </trim>\n        <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n            <if test=\"adminUserId != null\">\n                #{adminUserId,jdbcType=BIGINT},\n            </if>\n            <if test=\"loginUserName != null\">\n                #{loginUserName,jdbcType=VARCHAR},\n            </if>\n            <if test=\"loginPassword != null\">\n                #{loginPassword,jdbcType=VARCHAR},\n            </if>\n            <if test=\"nickName != null\">\n                #{nickName,jdbcType=VARCHAR},\n            </if>\n            <if test=\"locked != null\">\n                #{locked,jdbcType=TINYINT},\n            </if>\n        </trim>\n    </insert>\n    <update id=\"updateByPrimaryKeySelective\" parameterType=\"ltd.user.cloud.newbee.entity.AdminUser\">\n        update tb_newbee_mall_admin_user\n        <set>\n            <if test=\"loginUserName != null\">\n                login_user_name = #{loginUserName,jdbcType=VARCHAR},\n            </if>\n            <if test=\"loginPassword != null\">\n                login_password = #{loginPassword,jdbcType=VARCHAR},\n            </if>\n            <if test=\"nickName != null\">\n                nick_name = #{nickName,jdbcType=VARCHAR},\n            </if>\n            <if test=\"locked != null\">\n                locked = #{locked,jdbcType=TINYINT},\n            </if>\n        </set>\n        where admin_user_id = #{adminUserId,jdbcType=BIGINT}\n    </update>\n    <update id=\"updateByPrimaryKey\" parameterType=\"ltd.user.cloud.newbee.entity.AdminUser\">\n        update tb_newbee_mall_admin_user\n        set login_user_name = #{loginUserName,jdbcType=VARCHAR},\n        login_password = #{loginPassword,jdbcType=VARCHAR},\n        nick_name = #{nickName,jdbcType=VARCHAR},\n        locked = #{locked,jdbcType=TINYINT}\n        where admin_user_id = #{adminUserId,jdbcType=BIGINT}\n    </update>\n</mapper>"
  },
  {
    "path": "newbee-mall-cloud-user-service/newbee-mall-cloud-user-web/src/main/resources/mapper/MallUserMapper.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n严肃声明：\n开源版本请务必保留此注释头信息，若删除我方将保留所有法律责任追究！\n本软件已申请软件著作权，受国家版权局知识产权以及国家计算机软件著作权保护！\n可正常分享和学习源码，不得用于违法犯罪活动，违者必究！\nCopyright (c) 2022 程序员十三 all rights reserved.\n版权所有，侵权必究！\n-->\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n<mapper namespace=\"ltd.user.cloud.newbee.dao.MallUserMapper\">\n    <resultMap id=\"BaseResultMap\" type=\"ltd.user.cloud.newbee.entity.MallUser\">\n        <id column=\"user_id\" jdbcType=\"BIGINT\" property=\"userId\"/>\n        <result column=\"nick_name\" jdbcType=\"VARCHAR\" property=\"nickName\"/>\n        <result column=\"login_name\" jdbcType=\"VARCHAR\" property=\"loginName\"/>\n        <result column=\"password_md5\" jdbcType=\"VARCHAR\" property=\"passwordMd5\"/>\n        <result column=\"introduce_sign\" jdbcType=\"VARCHAR\" property=\"introduceSign\"/>\n        <result column=\"is_deleted\" jdbcType=\"TINYINT\" property=\"isDeleted\"/>\n        <result column=\"locked_flag\" jdbcType=\"TINYINT\" property=\"lockedFlag\"/>\n        <result column=\"create_time\" jdbcType=\"TIMESTAMP\" property=\"createTime\"/>\n    </resultMap>\n    <sql id=\"Base_Column_List\">\n    user_id, nick_name, login_name, password_md5, introduce_sign, is_deleted,\n    locked_flag, create_time\n  </sql>\n\n    <select id=\"findMallUserList\" parameterType=\"Map\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"Base_Column_List\"/>\n        from tb_newbee_mall_user\n        where 1=1\n        <if test=\"loginName!=null and loginName!=''\">\n            and login_name = #{loginName}\n        </if>\n        order by create_time desc\n        <if test=\"start!=null and limit!=null\">\n            limit #{start},#{limit}\n        </if>\n    </select>\n\n    <select id=\"getTotalMallUsers\" parameterType=\"Map\" resultType=\"int\">\n        select count(*) from tb_newbee_mall_user\n        where 1=1\n        <if test=\"loginName!=null and loginName!=''\">\n            and login_name = #{loginName}\n        </if>\n    </select>\n\n    <select id=\"selectByPrimaryKey\" parameterType=\"java.lang.Long\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"Base_Column_List\"/>\n        from tb_newbee_mall_user\n        where user_id = #{userId,jdbcType=BIGINT} and is_deleted = 0\n    </select>\n    <select id=\"selectByLoginName\" parameterType=\"java.lang.String\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"Base_Column_List\"/>\n        from tb_newbee_mall_user\n        where login_name = #{loginName} and is_deleted = 0\n    </select>\n    <select id=\"selectByLoginNameAndPasswd\" resultMap=\"BaseResultMap\">\n        select\n        <include refid=\"Base_Column_List\"/>\n        from tb_newbee_mall_user\n        where login_name = #{loginName} and password_md5 = #{password} and is_deleted = 0\n    </select>\n    <update id=\"deleteByPrimaryKey\" parameterType=\"java.lang.Long\">\n    update tb_newbee_mall_user set is_deleted = 1\n    where user_id = #{userId,jdbcType=BIGINT} and is_deleted = 0\n  </update>\n    <insert id=\"insert\" parameterType=\"ltd.user.cloud.newbee.entity.MallUser\">\n    insert into tb_newbee_mall_user (user_id, nick_name, login_name, \n      password_md5, introduce_sign,\n      is_deleted, locked_flag, create_time\n      )\n    values (#{userId,jdbcType=BIGINT}, #{nickName,jdbcType=VARCHAR}, #{loginName,jdbcType=VARCHAR}, \n      #{passwordMd5,jdbcType=VARCHAR}, #{introduceSign,jdbcType=VARCHAR},\n      #{isDeleted,jdbcType=TINYINT}, #{lockedFlag,jdbcType=TINYINT}, #{createTime,jdbcType=TIMESTAMP}\n      )\n  </insert>\n    <insert id=\"insertSelective\" parameterType=\"ltd.user.cloud.newbee.entity.MallUser\">\n        insert into tb_newbee_mall_user\n        <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\n            <if test=\"userId != null\">\n                user_id,\n            </if>\n            <if test=\"nickName != null\">\n                nick_name,\n            </if>\n            <if test=\"loginName != null\">\n                login_name,\n            </if>\n            <if test=\"passwordMd5 != null\">\n                password_md5,\n            </if>\n            <if test=\"introduceSign != null\">\n                introduce_sign,\n            </if>\n            <if test=\"isDeleted != null\">\n                is_deleted,\n            </if>\n            <if test=\"lockedFlag != null\">\n                locked_flag,\n            </if>\n            <if test=\"createTime != null\">\n                create_time,\n            </if>\n        </trim>\n        <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n            <if test=\"userId != null\">\n                #{userId,jdbcType=BIGINT},\n            </if>\n            <if test=\"nickName != null\">\n                #{nickName,jdbcType=VARCHAR},\n            </if>\n            <if test=\"loginName != null\">\n                #{loginName,jdbcType=VARCHAR},\n            </if>\n            <if test=\"passwordMd5 != null\">\n                #{passwordMd5,jdbcType=VARCHAR},\n            </if>\n            <if test=\"introduceSign != null\">\n                #{introduceSign,jdbcType=VARCHAR},\n            </if>\n            <if test=\"isDeleted != null\">\n                #{isDeleted,jdbcType=TINYINT},\n            </if>\n            <if test=\"lockedFlag != null\">\n                #{lockedFlag,jdbcType=TINYINT},\n            </if>\n            <if test=\"createTime != null\">\n                #{createTime,jdbcType=TIMESTAMP},\n            </if>\n        </trim>\n    </insert>\n    <update id=\"updateByPrimaryKeySelective\" parameterType=\"ltd.user.cloud.newbee.entity.MallUser\">\n        update tb_newbee_mall_user\n        <set>\n            <if test=\"nickName != null\">\n                nick_name = #{nickName,jdbcType=VARCHAR},\n            </if>\n            <if test=\"loginName != null\">\n                login_name = #{loginName,jdbcType=VARCHAR},\n            </if>\n            <if test=\"passwordMd5 != null\">\n                password_md5 = #{passwordMd5,jdbcType=VARCHAR},\n            </if>\n            <if test=\"introduceSign != null\">\n                introduce_sign = #{introduceSign,jdbcType=VARCHAR},\n            </if>\n            <if test=\"isDeleted != null\">\n                is_deleted = #{isDeleted,jdbcType=TINYINT},\n            </if>\n            <if test=\"lockedFlag != null\">\n                locked_flag = #{lockedFlag,jdbcType=TINYINT},\n            </if>\n            <if test=\"createTime != null\">\n                create_time = #{createTime,jdbcType=TIMESTAMP},\n            </if>\n        </set>\n        where user_id = #{userId,jdbcType=BIGINT}\n    </update>\n    <update id=\"updateByPrimaryKey\" parameterType=\"ltd.user.cloud.newbee.entity.MallUser\">\n    update tb_newbee_mall_user\n    set nick_name = #{nickName,jdbcType=VARCHAR},\n      login_name = #{loginName,jdbcType=VARCHAR},\n      password_md5 = #{passwordMd5,jdbcType=VARCHAR},\n      introduce_sign = #{introduceSign,jdbcType=VARCHAR},\n      is_deleted = #{isDeleted,jdbcType=TINYINT},\n      locked_flag = #{lockedFlag,jdbcType=TINYINT},\n      create_time = #{createTime,jdbcType=TIMESTAMP}\n    where user_id = #{userId,jdbcType=BIGINT}\n  </update>\n    <update id=\"lockUserBatch\">\n        update tb_newbee_mall_user\n        set locked_flag=#{lockStatus} where user_id in\n        <foreach item=\"id\" collection=\"ids\" open=\"(\" separator=\",\" close=\")\">\n            #{id}\n        </foreach>\n    </update>\n</mapper>"
  },
  {
    "path": "newbee-mall-cloud-user-service/pom.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--  @author 程序员十三\n      @qq交流群 791509631\n      @email 2449207463@qq.com\n      @link https://github.com/newbee-ltd -->\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd\">\n    <modelVersion>4.0.0</modelVersion>\n    <groupId>ltd.newbee.cloud</groupId>\n    <artifactId>newbee-mall-cloud-user-service</artifactId>\n    <version>0.0.1-SNAPSHOT</version>\n    <packaging>pom</packaging>\n    <name>newbee-mall-cloud-user-service</name>\n    <description>用户模块</description>\n\n    <parent>\n        <groupId>ltd.newbee.cloud</groupId>\n        <artifactId>newbee-mall-cloud</artifactId>\n        <version>0.0.1-SNAPSHOT</version>\n    </parent>\n\n    <properties>\n        <java.version>1.8</java.version>\n    </properties>\n\n    <modules>\n        <module>newbee-mall-cloud-user-web</module>\n        <module>newbee-mall-cloud-user-api</module>\n    </modules>\n\n    <dependencies>\n    </dependencies>\n    <!--  @author 程序员十三\n      @qq交流群 791509631\n      @email 2449207463@qq.com\n      @link https://github.com/newbee-ltd -->\n</project>\n"
  },
  {
    "path": "pom.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--  @author 程序员十三\n      @qq交流群 791509631\n      @email 2449207463@qq.com\n      @link https://github.com/newbee-ltd -->\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd\">\n    <modelVersion>4.0.0</modelVersion>\n    <groupId>ltd.newbee.cloud</groupId>\n    <artifactId>newbee-mall-cloud</artifactId>\n    <version>0.0.1-SNAPSHOT</version>\n    <name>newbee-mall-cloud</name>\n    <packaging>pom</packaging>\n    <description>新蜂商城微服务版本(Spring Cloud Alibaba)</description>\n\n    <modules>\n        <module>newbee-mall-cloud-order-service</module>\n        <module>newbee-mall-cloud-shop-cart-service</module>\n        <module>newbee-mall-cloud-recommend-service</module>\n        <module>newbee-mall-cloud-goods-service</module>\n        <module>newbee-mall-cloud-user-service</module>\n        <module>newbee-mall-cloud-gateway-mall</module>\n        <module>newbee-mall-cloud-gateway-admin</module>\n        <module>newbee-mall-cloud-common</module>\n    </modules>\n\n    <properties>\n        <spring.boot.version>2.6.3</spring.boot.version>\n        <spring.cloud.dependencies.version>2021.0.1</spring.cloud.dependencies.version>\n        <spring.cloud.alibaba.version>2021.0.1.0</spring.cloud.alibaba.version>\n        <mybatis.starter.version>2.2.2</mybatis.starter.version>\n        <swagger.version>3.0.0</swagger.version>\n        <lombok.version>1.18.16</lombok.version>\n        <java.version>1.8</java.version>\n        <logstash-logback-encoder.version>7.0.1</logstash-logback-encoder.version>\n        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>\n        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>\n    </properties>\n\n    <dependencyManagement>\n        <dependencies>\n            <dependency>\n                <groupId>org.springframework.cloud</groupId>\n                <artifactId>spring-cloud-dependencies</artifactId>\n                <version>${spring.cloud.dependencies.version}</version>\n                <type>pom</type>\n                <scope>import</scope>\n            </dependency>\n\n            <dependency>\n                <groupId>org.springframework.boot</groupId>\n                <artifactId>spring-boot-dependencies</artifactId>\n                <version>${spring.boot.version}</version>\n                <type>pom</type>\n                <scope>import</scope>\n            </dependency>\n\n            <dependency>\n                <groupId>com.alibaba.cloud</groupId>\n                <artifactId>spring-cloud-alibaba-dependencies</artifactId>\n                <version>${spring.cloud.alibaba.version}</version>\n                <type>pom</type>\n                <scope>import</scope>\n            </dependency>\n\n            <dependency>\n                <groupId>org.springframework.boot</groupId>\n                <artifactId>spring-boot-starter-web</artifactId>\n                <version>${spring.boot.version}</version>\n            </dependency>\n\n            <dependency>\n                <groupId>org.springframework.boot</groupId>\n                <artifactId>spring-boot-starter-test</artifactId>\n                <version>${spring.boot.version}</version>\n            </dependency>\n\n            <dependency>\n                <groupId>org.mybatis.spring.boot</groupId>\n                <artifactId>mybatis-spring-boot-starter</artifactId>\n                <version>${mybatis.starter.version}</version>\n            </dependency>\n\n            <dependency>\n                <groupId>io.springfox</groupId>\n                <artifactId>springfox-boot-starter</artifactId>\n                <version>${swagger.version}</version>\n            </dependency>\n\n            <dependency>\n                <groupId>org.projectlombok</groupId>\n                <artifactId>lombok</artifactId>\n                <version>${lombok.version}</version>\n                <scope>provided</scope>\n            </dependency>\n\n        </dependencies>\n    </dependencyManagement>\n\n    <build>\n        <plugins>\n            <plugin>\n                <groupId>org.apache.maven.plugins</groupId>\n                <artifactId>maven-compiler-plugin</artifactId>\n                <version>3.8.0</version>\n                <configuration>\n                    <source>${java.version}</source>\n                    <target>${java.version}</target>\n                    <encoding>UTF-8</encoding>\n                </configuration>\n            </plugin>\n            <plugin>\n                <groupId>org.springframework.boot</groupId>\n                <artifactId>spring-boot-maven-plugin</artifactId>\n                <version>${spring.boot.version}</version>                \n            </plugin>\n        </plugins>\n    </build>\n\n    <repositories>\n        <repository>\n            <id>central</id>\n            <url>https://maven.aliyun.com/repository/central</url>\n            <name>aliyun</name>\n        </repository>\n    </repositories>\n\n    <!--  @author 程序员十三\n      @qq交流群 791509631\n      @email 2449207463@qq.com\n      @link https://github.com/newbee-ltd -->\n</project>\n"
  },
  {
    "path": "static-files/newbee_mall_cloud_cart_db.sql",
    "content": "# 创建购物车服务所需数据\n\nCREATE DATABASE /*!32312 IF NOT EXISTS*/`newbee_mall_cloud_cart_db` /*!40100 DEFAULT CHARACTER SET utf8 */;\n\nUSE `newbee_mall_cloud_cart_db`;\n\nDROP TABLE IF EXISTS `tb_newbee_mall_shopping_cart_item`;\n\nCREATE TABLE `tb_newbee_mall_shopping_cart_item` (\n                                                     `cart_item_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '购物项主键id',\n                                                     `user_id` bigint(20) NOT NULL COMMENT '用户主键id',\n                                                     `goods_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '关联商品id',\n                                                     `goods_count` int(11) NOT NULL DEFAULT '1' COMMENT '数量(最大为5)',\n                                                     `is_deleted` tinyint(4) NOT NULL DEFAULT '0' COMMENT '删除标识字段(0-未删除 1-已删除)',\n                                                     `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',\n                                                     `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最新修改时间',\n                                                     PRIMARY KEY (`cart_item_id`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;\n\n-- for AT mode you must to init this sql for you business database. the seata server not need it.\nCREATE TABLE IF NOT EXISTS `undo_log`\n(\n    `branch_id`     BIGINT       NOT NULL COMMENT 'branch transaction id',\n    `xid`           VARCHAR(128) NOT NULL COMMENT 'global transaction id',\n    `context`       VARCHAR(128) NOT NULL COMMENT 'undo_log context,such as serialization',\n    `rollback_info` LONGBLOB     NOT NULL COMMENT 'rollback info',\n    `log_status`    INT(11)      NOT NULL COMMENT '0:normal status,1:defense status',\n    `log_created`   DATETIME(6)  NOT NULL COMMENT 'create datetime',\n    `log_modified`  DATETIME(6)  NOT NULL COMMENT 'modify datetime',\n    UNIQUE KEY `ux_undo_log` (`xid`, `branch_id`)\n    ) ENGINE = InnoDB\n    AUTO_INCREMENT = 1\n    DEFAULT CHARSET = utf8mb4 COMMENT ='AT transaction mode undo table';"
  },
  {
    "path": "static-files/newbee_mall_cloud_goods_db.sql",
    "content": "# 创建商品服务所需数据\nCREATE DATABASE /*!32312 IF NOT EXISTS*/`newbee_mall_cloud_goods_db` /*!40100 DEFAULT CHARACTER SET utf8 */;\n\nUSE `newbee_mall_cloud_goods_db`;\n\n# 创建商品分类表\n\nDROP TABLE IF EXISTS `tb_newbee_mall_goods_category`;\n\nCREATE TABLE `tb_newbee_mall_goods_category` (\n                                                 `category_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '分类id',\n                                                 `category_level` tinyint(4) NOT NULL DEFAULT '0' COMMENT '分类级别(1-一级分类 2-二级分类 3-三级分类)',\n                                                 `parent_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '父分类id',\n                                                 `category_name` varchar(50) NOT NULL DEFAULT '' COMMENT '分类名称',\n                                                 `category_rank` int(11) NOT NULL DEFAULT '0' COMMENT '排序值(字段越大越靠前)',\n                                                 `is_deleted` tinyint(4) NOT NULL DEFAULT '0' COMMENT '删除标识字段(0-未删除 1-已删除)',\n                                                 `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',\n                                                 `create_user` int(11) NOT NULL DEFAULT '0' COMMENT '创建者id',\n                                                 `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',\n                                                 `update_user` int(11) DEFAULT '0' COMMENT '修改者id',\n                                                 PRIMARY KEY (`category_id`) USING BTREE\n) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;\n\n# 新增商品分类数据\n\nINSERT INTO tb_newbee_mall_goods_category (category_level, parent_id, category_name, category_rank, is_deleted, create_time, create_user, update_time, update_user)\nVALUES\n(1, 0, '家电 数码 手机', 100, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(1, 0, '女装 男装 穿搭', 99, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(2, 15, '家电', 10, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(2, 15, '数码', 9, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(2, 15, '手机', 8, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(3, 17, '生活电器', 0, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(3, 17, '厨房电器', 0, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(3, 17, '扫地机器人', 0, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(3, 17, '吸尘器', 0, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(3, 17, '取暖器', 0, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(3, 17, '豆浆机', 0, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(3, 17, '暖风机', 0, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(3, 17, '加湿器', 0, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(3, 17, '蓝牙音箱', 0, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(3, 17, '烤箱', 0, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(3, 17, '卷发器', 0, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(3, 17, '空气净化器', 0, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(3, 18, '游戏主机', 0, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(3, 18, '数码精选', 0, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(3, 18, '平板电脑', 0, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(3, 18, '苹果 Apple', 0, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(3, 18, '电脑主机', 0, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(3, 18, '数码相机', 0, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(3, 18, '电玩动漫', 0, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(3, 18, '单反相机', 0, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(3, 18, '键盘鼠标', 0, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(3, 18, '无人机', 0, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(3, 18, '二手电脑', 0, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(3, 18, '二手手机', 0, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(3, 19, 'iPhone 11', 89, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(3, 19, '荣耀手机', 99, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(3, 19, '华为手机', 98, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(3, 19, '苹果 iPhone', 88, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(3, 19, '华为 Mate 20', 79, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(3, 19, '华为 P30', 97, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(3, 19, '华为 P30 Pro', 0, 1, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(3, 19, '小米手机', 0, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(3, 19, '红米', 0, 1, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(3, 19, 'OPPO', 0, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(3, 19, '一加', 0, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(3, 19, '小米 MIX', 0, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(3, 19, 'Reno', 0, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(3, 19, 'vivo', 0, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(3, 19, '手机以旧换新', 0, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(1, 0, '运动 户外 乐器', 97, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(1, 0, '游戏 动漫 影视', 96, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(1, 0, '家具 家饰 家纺', 98, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(1, 0, '美妆 清洁 宠物', 94, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(1, 0, '工具 装修 建材', 93, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(1, 0, 'test12', 0, 1, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(1, 0, '玩具 孕产 用品', 0, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(1, 0, '鞋靴 箱包 配件', 91, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(2, 16, '女装', 10, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(2, 16, '男装', 9, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(2, 16, '穿搭', 8, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(2, 61, '家具', 10, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(2, 61, '家饰', 9, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(2, 61, '家纺', 8, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(2, 59, '运动', 10, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(2, 59, '户外', 9, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(2, 59, '乐器', 8, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(3, 67, '外套', 10, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(3, 70, '沙发', 10, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(3, 73, '跑鞋', 10, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(2, 60, '游戏', 10, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(2, 60, '动漫', 9, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(2, 60, '影视', 8, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(3, 79, 'LOL', 10, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(2, 62, '美妆', 10, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(2, 62, '宠物', 9, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(2, 62, '清洁', 8, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(3, 83, '口红', 10, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(2, 63, '工具', 10, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(2, 63, '装修', 9, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(2, 63, '建材', 8, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(3, 87, '转换器', 10, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(2, 64, '珠宝', 10, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(2, 64, '金饰', 9, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(2, 64, '眼镜', 8, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(3, 91, '钻石', 10, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(2, 66, '鞋靴', 10, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(2, 66, '箱包', 9, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(2, 66, '配件', 8, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(3, 95, '休闲鞋', 10, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(3, 83, '气垫', 0, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(3, 83, '美白', 0, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(3, 83, '隔离霜', 0, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(3, 83, '粉底', 0, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(3, 83, '腮红', 0, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(3, 83, '睫毛膏', 0, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(3, 83, '香水', 0, 1, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(3, 83, '面膜', 0, 1, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(1, 0, '2344', 1, 1, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(1, 0, '测试分类', 50, 1, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(2, 15, 'xxx', 0, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(3, 17, 'wer', 0, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(1, 0, '测试分类2', 255, 1, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(2, 111, '测试分类2-1', 0, 1, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(1, 0, '商品类目1', 200, 1, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(1, 0, '商品类目1', 200, 1, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(2, 65, '玩具', 0, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(3, 115, '机器人', 0, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(1, 0, '测试', 10000, 1, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(1, 1, '你好', 100000, 1, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(1, 1, '1', 22222, 1, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(2, 2, '1', 111111, 0, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(1, 1, '222222', 222222, 1, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(1, 0, '测试', 11111111, 1, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(2, 16, '测试', 222222, 1, '2021-03-08 18:56:00', 0, '2021-03-08 18:56:00', 0),\n(1, 0, '测试分类', 1, 0, '2021-04-15 17:55:55', 0, '2021-04-15 17:55:55', 0);\n\nDROP TABLE IF EXISTS `tb_newbee_mall_goods_info`;\n\n# 创建商品表\n\nCREATE TABLE `tb_newbee_mall_goods_info` (\n                                             `goods_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '商品表主键id',\n                                             `goods_name` varchar(200) NOT NULL DEFAULT '' COMMENT '商品名',\n                                             `goods_intro` varchar(200) NOT NULL DEFAULT '' COMMENT '商品简介',\n                                             `goods_category_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '关联分类id',\n                                             `goods_cover_img` varchar(200) NOT NULL DEFAULT '/admin/dist/img/no-img.png' COMMENT '商品主图',\n                                             `goods_carousel` varchar(500) NOT NULL DEFAULT '/admin/dist/img/no-img.png' COMMENT '商品轮播图',\n                                             `goods_detail_content` text NOT NULL COMMENT '商品详情',\n                                             `original_price` int(11) NOT NULL DEFAULT '1' COMMENT '商品价格',\n                                             `selling_price` int(11) NOT NULL DEFAULT '1' COMMENT '商品实际售价',\n                                             `stock_num` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '商品库存数量',\n                                             `tag` varchar(20) NOT NULL DEFAULT '' COMMENT '商品标签',\n                                             `goods_sell_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '商品上架状态 1-下架 0-上架',\n                                             `create_user` int(11) NOT NULL DEFAULT '0' COMMENT '添加者主键id',\n                                             `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '商品添加时间',\n                                             `update_user` int(11) NOT NULL DEFAULT '0' COMMENT '修改者主键id',\n                                             `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '商品修改时间',\n                                             PRIMARY KEY (`goods_id`) USING BTREE\n) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;\n\n# 新增商品表数据\nINSERT INTO tb_newbee_mall_goods_info\n    (goods_id, goods_name, goods_intro, goods_category_id, goods_cover_img, goods_carousel, goods_detail_content, original_price, selling_price, stock_num, tag, goods_sell_status, create_user, create_time, update_user, update_time)\nVALUES\n(10003, '无印良品 MUJI 基础润肤化妆水', '滋润型 400ml', 0, '/goods-img/87446ec4-e534-4b49-9f7d-9bea34665284.jpg', '/goods-img/87446ec4-e534-4b49-9f7d-9bea34665284.jpg', '<p>商品介绍加载中...</p>', 100, 100, 10000, '', 0, 0, '2019-09-18 13:18:47', 0, '2021-03-15 14:28:56'),\n(10004, '无印良品 MUJI 柔和洁面泡沫', '120g', 0, '/goods-img/45854bdd-2ca5-423c-a609-3d336d9322b4.jpg', '/goods-img/45854bdd-2ca5-423c-a609-3d336d9322b4.jpg', '<p>商品介绍加载中...</p>', 45, 45, 10000, '', 0, 0, '2019-09-18 13:18:47', 0, '2019-09-18 13:18:47'),\n(10005, '无印良品 MUJI 基础润肤乳液', '高保湿型 200ml', 0, '/goods-img/7614ce78-0ebc-4275-a7cc-d16ad5f5f6ed.jpg', '/goods-img/7614ce78-0ebc-4275-a7cc-d16ad5f5f6ed.jpg', '<p>商品介绍加载中...</p>', 83, 83, 10000, '', 0, 0, '2019-09-18 13:18:47', 0, '2019-09-18 13:18:47'),\n(10006, '无印良品 MUJI 基础润肤乳液', '滋润型 400ml', 0, '/goods-img/ef75879d-3d3e-4bab-888d-1e4036491e11.jpg', '/goods-img/ef75879d-3d3e-4bab-888d-1e4036491e11.jpg', '<p>商品介绍加载中...</p>', 100, 100, 10000, '', 0, 0, '2019-09-18 13:18:47', 0, '2019-09-18 13:18:47'),\n(10007, '无印良品 MUJI 基础润肤化妆水', '高保湿型 400ml', 0, '/goods-img/558422d1-640e-442d-a073-2b2bdd95c4ed.jpg', '/goods-img/558422d1-640e-442d-a073-2b2bdd95c4ed.jpg', '<p>商品介绍加载中...</p>', 127, 127, 10000, '', 0, 0, '2019-09-18 13:18:47', 0, '2019-09-18 13:18:47'),\n(10008, '无印良品 MUJI 基础润肤化妆水', '清爽型 200ml', 0, '/goods-img/89660409-78b7-4d47-ae12-f94b3ce9664b.png', '/goods-img/89660409-78b7-4d47-ae12-f94b3ce9664b.png', '<p>商品介绍加载中...</p>', 70, 70, 10000, '', 0, 0, '2019-09-18 13:18:47', 0, '2019-09-18 13:18:47'),\n(10009, '无印良品 MUJI 男式', '无侧缝法兰绒 睡衣 海军蓝 L', 0, '/goods-img/f172c500-21d0-42e3-95ce-aa9b84a2ef49.jpg', '/goods-img/f172c500-21d0-42e3-95ce-aa9b84a2ef49.jpg', '<p>商品介绍加载中...</p>', 398, 199, 10000, '', 0, 0, '2019-09-18 13:18:47', 0, '2019-09-18 13:18:47'),\n(10010, '无印良品 MUJI 基础润肤洁面泡沫', '200ml', 0, '/goods-img/f87bdee1-ed48-4b49-b701-cc44f26a2699.jpg', '/goods-img/f87bdee1-ed48-4b49-b701-cc44f26a2699.jpg', '<p>商品介绍加载中...</p>', 83, 83, 10000, '', 0, 0, '2019-09-18 13:18:47', 0, '2019-09-18 13:18:47'),\n(10011, '无印良品 MUJI 平衡高保湿化妆水', '新蜂精选', 0, '/goods-img/16230038-bf86-4d4e-a11f-954b9ee4bab2.jpg', '/goods-img/16230038-bf86-4d4e-a11f-954b9ee4bab2.jpg', '<p>商品介绍加载中...</p>', 130, 65, 10000, '', 0, 0, '2019-09-18 13:18:47', 0, '2019-09-18 13:18:47'),\n(10012, '无印良品 MUJI 凝胶墨水圆珠笔', '蓝黑色', 0, '/goods-img/a952ecce-32e7-474e-9c1b-943962e0a580.jpg', '/goods-img/a952ecce-32e7-474e-9c1b-943962e0a580.jpg', '<p>商品介绍加载中...</p>', 8, 5, 10000, '', 0, 0, '2019-09-18 13:18:47', 0, '2019-09-18 13:18:47'),\n(10013, '无印良品 MUJI 平衡保湿乳霜', '50g', 0, '/goods-img/904c8aa1-0257-49e8-ad89-f48d2462db21.jpg', '/goods-img/904c8aa1-0257-49e8-ad89-f48d2462db21.jpg', '<p>商品介绍加载中...</p>', 130, 65, 10000, '', 0, 0, '2019-09-18 13:18:47', 0, '2019-09-18 13:18:47'),\n(10014, '无印良品 MUJI 基础润肤乳液', '清爽型 200ml', 0, '/goods-img/d66b6e0e-48d4-4503-8dd6-43b3c71f52a4.png', '/goods-img/d66b6e0e-48d4-4503-8dd6-43b3c71f52a4.png', '<p>商品介绍加载中...</p>', 70, 70, 10000, '', 0, 0, '2019-09-18 13:18:47', 0, '2019-09-18 13:18:47'),\n(10015, '无印良品 MUJI 平衡洁面泡沫', '100g', 0, '/goods-img/d0d8f6d1-1f2d-49f8-9099-0cdd94833581.jpg', '/goods-img/d0d8f6d1-1f2d-49f8-9099-0cdd94833581.jpg', '<p>商品介绍加载中...</p>', 85, 42, 10000, '', 0, 0, '2019-09-18 13:18:47', 0, '2019-09-18 13:18:47'),\n(10016, '无印良品 MUJI 基础润肤乳液', '滋润型 200ml', 0, '/goods-img/e553f566-5dc4-4648-be58-fd7112a47b10.jpg', '/goods-img/e553f566-5dc4-4648-be58-fd7112a47b10.jpg', '<p>商品介绍加载中...</p>', 61, 61, 10000, '', 0, 0, '2019-09-18 13:18:47', 0, '2019-09-18 13:18:47'),\n(10017, '无印良品 MUJI 便携式香薰机', '新蜂精选', 0, '/goods-img/a9c0d929-6f0b-4bc7-819c-e5015f447a9e.jpg', '/goods-img/a9c0d929-6f0b-4bc7-819c-e5015f447a9e.jpg', '<p>商品介绍加载中...</p>', 200, 200, 10000, '', 0, 0, '2019-09-18 13:18:47', 0, '2019-09-18 13:18:47'),\n(10018, '无印良品 MUJI 女式', '粗棉线条纹长袖T恤 白色*横条 L', 0, '/goods-img/38d5f694-2236-415d-80c8-4a1695e92d4e.jpg', '/goods-img/38d5f694-2236-415d-80c8-4a1695e92d4e.jpg', '<p>商品介绍加载中...</p>', 198, 70, 10000, '', 0, 0, '2019-09-18 13:18:47', 0, '2019-09-18 13:18:47'),\n(10019, '无印良品（MUJI） 聚丙烯化妆盒 1/2', '半透明约150x220x86mm', 0, '/goods-img/f6832ed7-cb01-48ab-987f-cd437b21be80.jpg', '/goods-img/f6832ed7-cb01-48ab-987f-cd437b21be80.jpg', '<p>商品介绍加载中...</p>', 30, 30, 10000, '', 0, 0, '2019-09-18 13:18:47', 0, '2019-09-18 13:18:47'),\n(10020, '无印良品 MUJI 聚丙烯', '笔盒 大/约184*64*25㎜', 0, '/goods-img/6c7f7a0d-4d73-406e-adcc-6f666ce4e2c9.jpg', '/goods-img/6c7f7a0d-4d73-406e-adcc-6f666ce4e2c9.jpg', '<p>商品介绍加载中...</p>', 18, 18, 10000, '', 0, 0, '2019-09-18 13:18:47', 0, '2019-09-18 13:18:47'),\n(10021, '无印良品（MUJI） 无针订书机 其他', '新蜂精选', 0, '/goods-img/cf19de8b-e94e-4513-aecd-a0b5c976b738.jpg', '/goods-img/cf19de8b-e94e-4513-aecd-a0b5c976b738.jpg', '<p>商品介绍加载中...</p>', 52, 52, 10000, '', 0, 0, '2019-09-18 13:18:47', 0, '2019-09-18 13:18:47'),\n(10022, '无印良品 MUJI 塑料橡皮', '黑色 小', 0, '/goods-img/d4f3299d-d526-4a81-ae9f-3b53e735075e.jpg', '/goods-img/d4f3299d-d526-4a81-ae9f-3b53e735075e.jpg', '<p>商品介绍加载中...</p>', 4, 4, 10000, '', 0, 0, '2019-09-18 13:18:47', 0, '2019-09-18 13:18:47'),\n(10023, '无印良品 MUJI 大容量基础乳液/高保湿型', '400ml', 0, '/goods-img/ea92b50a-67ba-4279-a71a-4e52e6a3219c.jpg', '/goods-img/ea92b50a-67ba-4279-a71a-4e52e6a3219c.jpg', '<p>商品介绍加载中...</p>', 140, 140, 10000, '', 0, 0, '2019-09-18 13:18:47', 0, '2019-09-18 13:18:47'),\n(10024, '无印良品 MUJI 基础润肤化妆水', '滋润型 400ml', 0, '/goods-img/beb26b1b-7a73-48c2-a9f7-727ad92401f6.jpg', '/goods-img/beb26b1b-7a73-48c2-a9f7-727ad92401f6.jpg', '<p>商品介绍加载中...</p>', 100, 100, 10000, '', 0, 0, '2019-09-18 13:18:52', 0, '2019-09-18 13:18:52'),\n(10025, '无印良品 MUJI 柔和洁面泡沫', '120g', 0, '/goods-img/bf1dc4d1-acc2-40c8-8091-1c6f35988643.jpg', '/goods-img/bf1dc4d1-acc2-40c8-8091-1c6f35988643.jpg', '<p>商品介绍加载中...</p>', 45, 45, 10000, '', 0, 0, '2019-09-18 13:18:52', 0, '2019-09-18 13:18:52'),\n(10026, '无印良品 MUJI 基础润肤乳液', '高保湿型 200ml', 0, '/goods-img/4059caa9-e0b3-4ac3-a494-b9e4c47e0185.jpg', '/goods-img/4059caa9-e0b3-4ac3-a494-b9e4c47e0185.jpg', '<p>商品介绍加载中...</p>', 83, 83, 10000, '', 0, 0, '2019-09-18 13:18:52', 0, '2019-09-18 13:18:52'),\n(10027, '无印良品 MUJI 基础润肤乳液', '滋润型 400ml', 0, '/goods-img/a4a4c981-da0f-4228-bcc7-97d970dc619c.jpg', '/goods-img/a4a4c981-da0f-4228-bcc7-97d970dc619c.jpg', '<p>商品介绍加载中...</p>', 100, 100, 10000, '', 0, 0, '2019-09-18 13:18:52', 0, '2019-09-18 13:18:52'),\n(10028, '无印良品 MUJI 基础润肤化妆水', '高保湿型 400ml', 0, '/goods-img/98b5c5b5-cc75-4dfb-8ec4-0a7f42af6183.jpg', '/goods-img/98b5c5b5-cc75-4dfb-8ec4-0a7f42af6183.jpg', '<p>商品介绍加载中...</p>', 127, 127, 10000, '', 0, 0, '2019-09-18 13:18:52', 0, '2019-09-18 13:18:52'),\n(10029, '无印良品 MUJI 基础润肤化妆水', '清爽型 200ml', 0, '/goods-img/71d1f469-b77b-473a-a31a-78fc97859b3a.png', '/goods-img/71d1f469-b77b-473a-a31a-78fc97859b3a.png', '<p>商品介绍加载中...</p>', 70, 70, 10000, '', 0, 0, '2019-09-18 13:18:52', 0, '2019-09-18 13:18:52'),\n(10030, '无印良品 MUJI 男式', '无侧缝法兰绒 睡衣 海军蓝 L', 0, '/goods-img/68bfbfd9-bc28-429a-ab2c-7fa62205ed7e.jpg', '/goods-img/68bfbfd9-bc28-429a-ab2c-7fa62205ed7e.jpg', '<p>商品介绍加载中...</p>', 398, 199, 10000, '', 0, 0, '2019-09-18 13:18:52', 0, '2019-09-18 13:18:52'),\n(10031, '无印良品 MUJI 基础润肤洁面泡沫', '200ml', 0, '/goods-img/679eb5a8-7689-4620-b072-63daeb8eb73a.jpg', '/goods-img/679eb5a8-7689-4620-b072-63daeb8eb73a.jpg', '<p>商品介绍加载中...</p>', 83, 83, 10000, '', 0, 0, '2019-09-18 13:18:52', 0, '2019-09-18 13:18:52'),\n(10032, '无印良品 MUJI 平衡高保湿化妆水', '新蜂精选', 0, '/goods-img/eb13afc6-8898-4a50-9f93-06dd2593c313.jpg', '/goods-img/eb13afc6-8898-4a50-9f93-06dd2593c313.jpg', '<p>商品介绍加载中...</p>', 130, 65, 10000, '', 0, 0, '2019-09-18 13:18:52', 0, '2019-09-18 13:18:52'),\n(10033, '无印良品 MUJI 凝胶墨水圆珠笔', '蓝黑色', 0, '/goods-img/85a893fe-c971-4f0b-aa0f-4c24b65b1c75.jpg', '/goods-img/85a893fe-c971-4f0b-aa0f-4c24b65b1c75.jpg', '<p>商品介绍加载中...</p>', 8, 5, 10000, '', 0, 0, '2019-09-18 13:18:52', 0, '2019-09-18 13:18:52'),\n(10034, '无印良品 MUJI 平衡保湿乳霜', '50g', 0, '/goods-img/65aed381-cde0-44ed-b345-5ebf1d74a13b.jpg', '/goods-img/65aed381-cde0-44ed-b345-5ebf1d74a13b.jpg', '<p>商品介绍加载中...</p>', 130, 65, 10000, '', 0, 0, '2019-09-18 13:18:52', 0, '2019-09-18 13:18:52'),\n(10035, '无印良品 MUJI 基础润肤乳液', '清爽型 200ml', 0, '/goods-img/1e09e1ed-435b-4f08-84d0-d88308a315ee.png', '/goods-img/1e09e1ed-435b-4f08-84d0-d88308a315ee.png', '<p>商品介绍加载中...</p>', 70, 70, 10000, '', 0, 0, '2019-09-18 13:18:52', 0, '2019-09-18 13:18:52'),\n(10036, '无印良品 MUJI 平衡洁面泡沫', '100g', 0, '/goods-img/dbc2ea2a-ee03-4366-a35e-6ebe66d02399.jpg', '/goods-img/dbc2ea2a-ee03-4366-a35e-6ebe66d02399.jpg', '<p>商品介绍加载中...</p>', 85, 42, 10000, '', 0, 0, '2019-09-18 13:18:52', 0, '2019-09-18 13:18:52'),\n(10037, '无印良品 MUJI 基础润肤乳液', '滋润型 200ml', 0, '/goods-img/9389914c-2860-4a75-b603-53ed5a4e0509.jpg', '/goods-img/9389914c-2860-4a75-b603-53ed5a4e0509.jpg', '<p>商品介绍加载中...</p>', 61, 61, 10000, '', 0, 0, '2019-09-18 13:18:52', 0, '2019-09-18 13:18:52'),\n(10038, '无印良品 MUJI 便携式香薰机', '新蜂精选', 0, '/goods-img/6ab010e2-5f1e-4512-bd22-4c2550915d4c.jpg', '/goods-img/6ab010e2-5f1e-4512-bd22-4c2550915d4c.jpg', '<p>商品介绍加载中...</p>', 200, 200, 10000, '', 0, 0, '2019-09-18 13:18:52', 0, '2019-09-18 13:18:52'),\n(10039, '无印良品 MUJI 女式', '粗棉线条纹长袖T恤 白色*横条 L', 0, '/goods-img/fab00903-7ff6-40ee-a9bc-3fbc2f0f0ffc.jpg', '/goods-img/fab00903-7ff6-40ee-a9bc-3fbc2f0f0ffc.jpg', '<p>商品介绍加载中...</p>', 198, 70, 10000, '', 0, 0, '2019-09-18 13:18:52', 0, '2019-09-18 13:18:52'),\n(10040, '无印良品（MUJI） 聚丙烯化妆盒 1/2', '半透明约150x220x86mm', 0, '/goods-img/ab725751-adb8-452a-86dd-cb3d21da794e.jpg', '/goods-img/ab725751-adb8-452a-86dd-cb3d21da794e.jpg', '<p>商品介绍加载中...</p>', 30, 30, 10000, '', 0, 0, '2019-09-18 13:18:52', 0, '2019-09-18 13:18:52'),\n(10041, '无印良品 MUJI 聚丙烯', '笔盒 大/约184*64*25㎜', 0, '/goods-img/9f623290-928c-498f-89e6-171372b394f2.jpg', '/goods-img/9f623290-928c-498f-89e6-171372b394f2.jpg', '<p>商品介绍加载中...</p>', 18, 18, 10000, '', 0, 0, '2019-09-18 13:18:52', 0, '2019-09-18 13:18:52'),\n(10042, '无印良品（MUJI） 无针订书机 其他', '新蜂精选', 0, '/goods-img/a7221688-3c37-4ac0-b07e-d8bde1525d1e.jpg', '/goods-img/a7221688-3c37-4ac0-b07e-d8bde1525d1e.jpg', '<p>商品介绍加载中...</p>', 52, 52, 10000, '', 0, 0, '2019-09-18 13:18:52', 0, '2019-09-18 13:18:52'),\n(10043, '无印良品 MUJI 塑料橡皮', '黑色 小', 0, '/goods-img/75e26af4-8f15-43f2-9407-50d641f82acb.jpg', '/goods-img/75e26af4-8f15-43f2-9407-50d641f82acb.jpg', '<p>商品介绍加载中...</p>', 4, 4, 10000, '', 0, 0, '2019-09-18 13:18:52', 0, '2019-09-18 13:18:52'),\n(10044, '无印良品 MUJI 大容量基础乳液/高保湿型', '400ml', 0, '/goods-img/69d55773-1b43-497b-af18-90f2cec7c93a.jpg', '/goods-img/69d55773-1b43-497b-af18-90f2cec7c93a.jpg', '<p>商品介绍加载中...</p>', 140, 140, 10000, '', 0, 0, '2019-09-18 13:18:52', 0, '2019-09-18 13:18:52'),\n(10045, '无印良品 MUJI 毛笔', '黑色', 0, '/goods-img/419ddb3c-1793-49c1-8953-77409a5d5bce.jpg', '/goods-img/419ddb3c-1793-49c1-8953-77409a5d5bce.jpg', '<p>商品介绍加载中...</p>', 20, 20, 10000, '', 0, 0, '2019-09-18 13:19:02', 0, '2019-09-18 13:19:02'),\n(10046, '无印良品 MUJI 塑料橡皮', '白色 小', 0, '/goods-img/e53cc7af-f81c-4752-aec8-007e807b2fc1.jpg', '/goods-img/e53cc7af-f81c-4752-aec8-007e807b2fc1.jpg', '<p>商品介绍加载中...</p>', 4, 4, 10000, '', 0, 0, '2019-09-18 13:19:02', 0, '2019-09-18 13:19:02'),\n(10047, '无印良品 MUJI 男式', '无侧缝法兰绒 睡衣 深海军蓝X格子 L', 0, '/goods-img/481e8994-20cb-4f6c-8b77-4eb8509eb3b9.jpg', '/goods-img/481e8994-20cb-4f6c-8b77-4eb8509eb3b9.jpg', '<p>商品介绍加载中...</p>', 398, 199, 10000, '', 0, 0, '2019-09-18 13:19:02', 0, '2019-09-18 13:19:02'),\n(10048, '无印良品 MUJI 荧光笔', '蓝色', 0, '/goods-img/012ebf2d-8c96-4641-8782-eab01c85d98f.jpg', '/goods-img/012ebf2d-8c96-4641-8782-eab01c85d98f.jpg', '<p>商品介绍加载中...</p>', 10, 10, 10000, '', 0, 0, '2019-09-18 13:19:02', 0, '2019-09-18 13:19:02'),\n(10049, '无印良品（MUJI） 钢制指甲刀 小', '新蜂精选', 0, '/goods-img/2c150720-4b3a-4d9e-9ce6-77eb4998e1f1.jpg', '/goods-img/2c150720-4b3a-4d9e-9ce6-77eb4998e1f1.jpg', '<p>商品介绍加载中...</p>', 42, 42, 10000, '', 0, 0, '2019-09-18 13:19:02', 0, '2019-09-18 13:19:02'),\n(10050, '无印良品 MUJI 长条诗笺型笔记表格', '白色 40枚 14行', 0, '/goods-img/e7d2ea3f-6703-4fcc-bbb4-ad9ef43a0ae2.jpg', '/goods-img/e7d2ea3f-6703-4fcc-bbb4-ad9ef43a0ae2.jpg', '<p>商品介绍加载中...</p>', 10, 10, 10000, '', 0, 0, '2019-09-18 13:19:02', 0, '2019-09-18 13:19:02'),\n(10051, '无印良品 MUJI PET喷雾小分装瓶100ml', '新蜂精选', 0, '/goods-img/0ec8c4a7-aedc-464d-9e23-d3e4acafdc73.jpg', '/goods-img/0ec8c4a7-aedc-464d-9e23-d3e4acafdc73.jpg', '<p>商品介绍加载中...</p>', 30, 30, 10000, '', 0, 0, '2019-09-18 13:19:02', 0, '2019-09-18 13:19:02'),\n(10052, '无印良品 MUJI 塑料橡皮', '黑色 大', 0, '/goods-img/ce8ff43c-e8b4-4c52-9de1-c983c97068f6.jpg', '/goods-img/ce8ff43c-e8b4-4c52-9de1-c983c97068f6.jpg', '<p>商品介绍加载中...</p>', 7, 7, 10000, '', 0, 0, '2019-09-18 13:19:02', 0, '2019-09-18 13:19:02'),\n(10053, '无印良品 MUJI 荧光笔', '黄色', 0, '/goods-img/79b38a89-b02a-4fd1-80c4-5cb426028536.jpg', '/goods-img/79b38a89-b02a-4fd1-80c4-5cb426028536.jpg', '<p>商品介绍加载中...</p>', 10, 10, 10000, '', 0, 0, '2019-09-18 13:19:02', 0, '2019-09-18 13:19:02'),\n(10054, '无印良品 MUJI 遮瑕膏', '棒状 自然色', 0, '/goods-img/ffa69c8e-f57f-4ef4-a2a0-3695d538d6c5.jpg', '/goods-img/ffa69c8e-f57f-4ef4-a2a0-3695d538d6c5.jpg', '<p>商品介绍加载中...</p>', 42, 42, 10000, '', 0, 0, '2019-09-18 13:19:02', 0, '2019-09-18 13:19:02'),\n(10055, '无印良品 MUJI 马桶刷/附盒子', '白色', 0, '/goods-img/9dd1cdfb-e7f9-4d3c-98df-933e2bc3f9a8.jpg', '/goods-img/9dd1cdfb-e7f9-4d3c-98df-933e2bc3f9a8.jpg', '<p>商品介绍加载中...</p>', 70, 70, 10000, '', 0, 0, '2019-09-18 13:19:02', 0, '2019-09-18 13:19:02'),\n(10056, '无印良品 MUJI 耐热玻璃_壶_大', '透明', 0, '/goods-img/0bc4f5ac-d601-421d-8131-81958a195705.jpg', '/goods-img/0bc4f5ac-d601-421d-8131-81958a195705.jpg', '<p>商品介绍加载中...</p>', 150, 150, 10000, '', 0, 0, '2019-09-18 13:19:02', 0, '2019-09-18 13:19:02'),\n(10057, '无印良品 MUJI 女式', '平纹短袖衬衫 藏青色 M', 0, '/goods-img/76b6a573-12a0-4c63-b2ae-e7193aff0fc8.jpg', '/goods-img/76b6a573-12a0-4c63-b2ae-e7193aff0fc8.jpg', '<p>商品介绍加载中...</p>', 198, 59, 10000, '', 0, 0, '2019-09-18 13:19:02', 0, '2019-09-18 13:19:02'),\n(10058, '无印良品 MUJI 基础润肤化妆水', '清爽型 50ml', 0, '/goods-img/af7f9b21-d782-4bad-8b1a-d86bbc4d224e.png', '/goods-img/af7f9b21-d782-4bad-8b1a-d86bbc4d224e.png', '<p>商品介绍加载中...</p>', 28, 22, 10000, '', 0, 0, '2019-09-18 13:19:02', 0, '2019-09-18 13:19:02'),\n(10059, '无印良品 MUJI 男式', '无侧缝法兰绒 睡衣 炭灰色 M', 0, '/goods-img/26e0c424-f22d-4d3d-9bd6-a7958a346ff9.jpg', '/goods-img/26e0c424-f22d-4d3d-9bd6-a7958a346ff9.jpg', '<p>商品介绍加载中...</p>', 398, 199, 10000, '', 0, 0, '2019-09-18 13:19:02', 0, '2019-09-18 13:19:02'),\n(10060, '无印良品（MUJI） PET分裝瓶', '新蜂精选', 0, '/goods-img/24bf1630-0339-4c22-ad19-37152c561e71.jpg', '/goods-img/24bf1630-0339-4c22-ad19-37152c561e71.jpg', '<p>商品介绍加载中...</p>', 15, 15, 10000, '', 0, 0, '2019-09-18 13:19:02', 0, '2019-09-18 13:19:02'),\n(10061, '无印良品 MUJI 女式', '无侧缝法兰绒 睡衣 灰色 M', 0, '/goods-img/e8e26306-0521-4843-9e07-70ebd2fa6405.jpg', '/goods-img/e8e26306-0521-4843-9e07-70ebd2fa6405.jpg', '<p>商品介绍加载中...</p>', 398, 199, 10000, '', 0, 0, '2019-09-18 13:19:02', 0, '2019-09-18 13:19:02'),\n(10062, '无印良品（MUJI） PE分裝瓶', '新蜂精选', 0, '/goods-img/9b3af7c2-57f5-48a7-bea5-603b2d145000.jpg', '/goods-img/9b3af7c2-57f5-48a7-bea5-603b2d145000.jpg', '<p>商品介绍加载中...</p>', 10, 10, 10000, '', 0, 0, '2019-09-18 13:19:02', 0, '2019-09-18 13:19:02'),\n(10063, '无印良品 MUJI 基础润肤化妆水', '滋润型 200ml', 0, '/goods-img/7577f3e0-f48b-47a9-96b7-de405a6aaf95.png', '/goods-img/7577f3e0-f48b-47a9-96b7-de405a6aaf95.png', '<p>商品介绍加载中...</p>', 70, 70, 10000, '', 0, 0, '2019-09-18 13:19:02', 0, '2019-09-18 13:19:02'),\n(10064, '无印良品 MUJI 男式', '干爽 凉感珠地网眼编织V领短袖T恤 黑色 L', 0, '/goods-img/cce2af31-07ea-4744-8d01-16dd01d68e5b.jpg', '/goods-img/cce2af31-07ea-4744-8d01-16dd01d68e5b.jpg', '<p>商品介绍加载中...</p>', 98, 29, 10000, '', 0, 0, '2019-09-18 13:19:02', 0, '2019-09-18 13:19:02'),\n(10065, '无印良品（MUJI） 聚丙烯化妆盒 半透明约150x220x169mm', '新蜂精选', 0, '/goods-img/6dc279ac-fef0-401c-8604-b18dc9a9f7ab.jpg', '/goods-img/6dc279ac-fef0-401c-8604-b18dc9a9f7ab.jpg', '<p>商品介绍加载中...</p>', 40, 40, 10000, '', 0, 0, '2019-09-18 13:19:02', 0, '2019-09-18 13:19:02'),\n(10066, '无印良品（MUJI） 散粉小 自然色', '新蜂精选', 0, '/goods-img/94764fac-f4ad-4ee8-8d26-21af0c09ea76.jpg', '/goods-img/94764fac-f4ad-4ee8-8d26-21af0c09ea76.jpg', '<p>商品介绍加载中...</p>', 60, 60, 10000, '', 0, 0, '2019-09-18 13:19:02', 0, '2019-09-18 13:19:02'),\n(10067, '无印良品 MUJI 毛笔', '黑色', 0, '/goods-img/9cd07460-8c0b-49e5-9741-5015a3576e8e.jpg', '/goods-img/9cd07460-8c0b-49e5-9741-5015a3576e8e.jpg', '<p>商品介绍加载中...</p>', 20, 20, 10000, '', 0, 0, '2019-09-18 13:19:07', 0, '2019-09-18 13:19:07'),\n(10068, '无印良品 MUJI 塑料橡皮', '白色 小', 0, '/goods-img/70529ced-527a-4b46-aafa-874107ff9ea5.jpg', '/goods-img/70529ced-527a-4b46-aafa-874107ff9ea5.jpg', '<p>商品介绍加载中...</p>', 4, 4, 10000, '', 0, 0, '2019-09-18 13:19:07', 0, '2019-09-18 13:19:07'),\n(10069, '无印良品 MUJI 男式', '无侧缝法兰绒 睡衣 深海军蓝X格子 L', 0, '/goods-img/174ec60d-7d2b-4043-a7a6-7383c3de1a11.jpg', '/goods-img/174ec60d-7d2b-4043-a7a6-7383c3de1a11.jpg', '<p>商品介绍加载中...</p>', 398, 199, 10000, '', 0, 0, '2019-09-18 13:19:07', 0, '2019-09-18 13:19:07'),\n(10070, '无印良品 MUJI 荧光笔', '蓝色', 0, '/goods-img/eef29d44-17f5-41dd-b0ba-c6f63d7bdac3.jpg', '/goods-img/eef29d44-17f5-41dd-b0ba-c6f63d7bdac3.jpg', '<p>商品介绍加载中...</p>', 10, 10, 10000, '', 0, 0, '2019-09-18 13:19:07', 0, '2019-09-18 13:19:07'),\n(10071, '无印良品（MUJI） 钢制指甲刀 小', '新蜂精选', 0, '/goods-img/f9964432-a9b7-45c2-ac6d-680130c2d7a7.jpg', '/goods-img/f9964432-a9b7-45c2-ac6d-680130c2d7a7.jpg', '<p>商品介绍加载中...</p>', 42, 42, 10000, '', 0, 0, '2019-09-18 13:19:07', 0, '2019-09-18 13:19:07'),\n(10072, '无印良品 MUJI 长条诗笺型笔记表格', '白色 40枚 14行', 0, '/goods-img/da1e4523-adb4-48e4-afa5-313346187690.jpg', '/goods-img/da1e4523-adb4-48e4-afa5-313346187690.jpg', '<p>商品介绍加载中...</p>', 10, 10, 10000, '', 0, 0, '2019-09-18 13:19:07', 0, '2019-09-18 13:19:07'),\n(10073, '无印良品 MUJI PET喷雾小分装瓶100ml', '新蜂精选', 0, '/goods-img/7f1eec3d-d8e5-4a18-a1a9-b81876dcaaf5.jpg', '/goods-img/7f1eec3d-d8e5-4a18-a1a9-b81876dcaaf5.jpg', '<p>商品介绍加载中...</p>', 30, 30, 10000, '', 0, 0, '2019-09-18 13:19:07', 0, '2019-09-18 13:19:07'),\n(10074, '无印良品 MUJI 塑料橡皮', '黑色 大', 0, '/goods-img/1ca16211-2b80-4006-ab60-e1a3cab4218c.jpg', '/goods-img/1ca16211-2b80-4006-ab60-e1a3cab4218c.jpg', '<p>商品介绍加载中...</p>', 7, 7, 10000, '', 0, 0, '2019-09-18 13:19:07', 0, '2019-09-18 13:19:07'),\n(10075, '无印良品 MUJI 荧光笔', '黄色', 0, '/goods-img/56eec806-2af3-4136-a9bf-2333455339e7.jpg', '/goods-img/56eec806-2af3-4136-a9bf-2333455339e7.jpg', '<p>商品介绍加载中...</p>', 10, 10, 10000, '', 0, 0, '2019-09-18 13:19:07', 0, '2019-09-18 13:19:07'),\n(10076, '无印良品 MUJI 遮瑕膏', '棒状 自然色', 0, '/goods-img/593b65a7-feae-45aa-837e-47d58bb27474.jpg', '/goods-img/593b65a7-feae-45aa-837e-47d58bb27474.jpg', '<p>商品介绍加载中...</p>', 42, 42, 10000, '', 0, 0, '2019-09-18 13:19:07', 0, '2019-09-18 13:19:07'),\n(10077, '无印良品 MUJI 马桶刷/附盒子', '白色', 0, '/goods-img/a9983f71-d818-459d-ad59-bbdd26bb533b.jpg', '/goods-img/a9983f71-d818-459d-ad59-bbdd26bb533b.jpg', '<p>商品介绍加载中...</p>', 70, 70, 10000, '', 0, 0, '2019-09-18 13:19:07', 0, '2019-09-18 13:19:07'),\n(10078, '无印良品 MUJI 耐热玻璃_壶_大', '透明', 0, '/goods-img/7f89c29e-d888-4ee0-92af-ca713a7871a4.jpg', '/goods-img/7f89c29e-d888-4ee0-92af-ca713a7871a4.jpg', '<p>商品介绍加载中...</p>', 150, 150, 10000, '', 0, 0, '2019-09-18 13:19:07', 0, '2019-09-18 13:19:07'),\n(10079, '无印良品 MUJI 女式', '平纹短袖衬衫 藏青色 M', 0, '/goods-img/0b1e57bf-b4fd-40df-9832-4749d7d69db9.jpg', '/goods-img/0b1e57bf-b4fd-40df-9832-4749d7d69db9.jpg', '<p>商品介绍加载中...</p>', 198, 59, 10000, '', 0, 0, '2019-09-18 13:19:07', 0, '2019-09-18 13:19:07'),\n(10080, '无印良品 MUJI 基础润肤化妆水', '清爽型 50ml', 0, '/goods-img/9b4af7cf-235a-4742-bdc3-9e8e656f245c.png', '/goods-img/9b4af7cf-235a-4742-bdc3-9e8e656f245c.png', '<p>商品介绍加载中...</p>', 28, 22, 10000, '', 0, 0, '2019-09-18 13:19:07', 0, '2019-09-18 13:19:07'),\n(10081, '无印良品 MUJI 男式', '无侧缝法兰绒 睡衣 炭灰色 M', 0, '/goods-img/8ddfc2de-3da3-4fad-86aa-7c570cb55212.jpg', '/goods-img/8ddfc2de-3da3-4fad-86aa-7c570cb55212.jpg', '<p>商品介绍加载中...</p>', 398, 199, 10000, '', 0, 0, '2019-09-18 13:19:07', 0, '2019-09-18 13:19:07'),\n(10082, '无印良品（MUJI） PET分裝瓶', '新蜂精选', 0, '/goods-img/e62d04e9-3ae2-431c-8538-becda89e0e84.jpg', '/goods-img/e62d04e9-3ae2-431c-8538-becda89e0e84.jpg', '<p>商品介绍加载中...</p>', 15, 15, 10000, '', 0, 0, '2019-09-18 13:19:07', 0, '2019-09-18 13:19:07'),\n(10083, '无印良品 MUJI 女式', '无侧缝法兰绒 睡衣 灰色 M', 0, '/goods-img/3078143f-1cdd-4f66-951b-2cf08af8c826.jpg', '/goods-img/3078143f-1cdd-4f66-951b-2cf08af8c826.jpg', '<p>商品介绍加载中...</p>', 398, 199, 10000, '', 0, 0, '2019-09-18 13:19:07', 0, '2019-09-18 13:19:07'),\n(10084, '无印良品（MUJI） PE分裝瓶', '新蜂精选', 0, '/goods-img/97aa8872-26df-473a-b0d7-f5021776cb52.jpg', '/goods-img/97aa8872-26df-473a-b0d7-f5021776cb52.jpg', '<p>商品介绍加载中...</p>', 10, 10, 10000, '', 0, 0, '2019-09-18 13:19:07', 0, '2019-09-18 13:19:07'),\n(10085, '无印良品 MUJI 基础润肤化妆水', '滋润型 200ml', 0, '/goods-img/954da201-0cbb-45d1-9cd1-17ce4d24cfb4.png', '/goods-img/954da201-0cbb-45d1-9cd1-17ce4d24cfb4.png', '<p>商品介绍加载中...</p>', 70, 70, 10000, '', 0, 0, '2019-09-18 13:19:07', 0, '2019-09-18 13:19:07'),\n(10086, '无印良品 MUJI 男式', '干爽 凉感珠地网眼编织V领短袖T恤 黑色 L', 0, '/goods-img/b584ea09-7aae-422e-8435-fdc38c948434.jpg', '/goods-img/b584ea09-7aae-422e-8435-fdc38c948434.jpg', '<p>商品介绍加载中...</p>', 98, 29, 10000, '', 0, 0, '2019-09-18 13:19:07', 0, '2019-09-18 13:19:07'),\n(10087, '无印良品（MUJI） 聚丙烯化妆盒 半透明约150x220x169mm', '新蜂精选', 0, '/goods-img/a0a45b44-82c9-4a58-a972-304bed0632bb.jpg', '/goods-img/a0a45b44-82c9-4a58-a972-304bed0632bb.jpg', '<p>商品介绍加载中...</p>', 40, 40, 10000, '', 0, 0, '2019-09-18 13:19:07', 0, '2019-09-18 13:19:07'),\n(10088, '无印良品（MUJI） 散粉小 自然色', '新蜂精选', 0, '/goods-img/a1b8ff33-ec01-494e-a1db-fb5158f3c168.jpg', '/goods-img/a1b8ff33-ec01-494e-a1db-fb5158f3c168.jpg', '<p>商品介绍加载中...</p>', 60, 60, 10000, '', 0, 0, '2019-09-18 13:19:07', 0, '2019-09-18 13:19:07'),\n(10089, '无印良品 MUJI 荧光笔', '粉红色', 0, '/goods-img/c5d6d952-c81b-436a-a345-feb4c5a20a7d.jpg', '/goods-img/c5d6d952-c81b-436a-a345-feb4c5a20a7d.jpg', '<p>商品介绍加载中...</p>', 10, 10, 10000, '', 0, 0, '2019-09-18 13:19:17', 0, '2019-09-18 13:19:17'),\n(10090, '无印良品（MUJI） PET小分装瓶100ml', '新蜂精选', 0, '/goods-img/2ffe59f3-559f-4e6f-810d-1b6fa4ac04e1.jpg', '/goods-img/2ffe59f3-559f-4e6f-810d-1b6fa4ac04e1.jpg', '<p>商品介绍加载中...</p>', 30, 30, 10000, '', 0, 0, '2019-09-18 13:19:17', 0, '2019-09-18 13:19:17'),\n(10091, '无印良品 MUJI 基础润肤洁面乳', '150ml', 0, '/goods-img/1f24d75a-0468-471a-a608-bd6788f4c1a1.jpg', '/goods-img/1f24d75a-0468-471a-a608-bd6788f4c1a1.jpg', '<p>商品介绍加载中...</p>', 74, 74, 10000, '', 0, 0, '2019-09-18 13:19:17', 0, '2019-09-18 13:19:17'),\n(10092, '无印良品 MUJI 基础润肤乳霜', '其他 50g', 0, '/goods-img/86e027b3-8868-4fa5-971b-49e827027e3e.jpg', '/goods-img/86e027b3-8868-4fa5-971b-49e827027e3e.jpg', '<p>商品介绍加载中...</p>', 100, 100, 10000, '', 0, 0, '2019-09-18 13:19:17', 0, '2019-09-18 13:19:17'),\n(10093, '无印良品 MUJI 基础润肤洁面泡沫(替换装)', '180ml', 0, '/goods-img/1aea34fa-f45e-4c3c-b73c-da1f92492c95.jpg', '/goods-img/1aea34fa-f45e-4c3c-b73c-da1f92492c95.jpg', '<p>商品介绍加载中...</p>', 69, 69, 10000, '', 0, 0, '2019-09-18 13:19:17', 0, '2019-09-18 13:19:17'),\n(10094, '无印良品 MUJI 保湿洁面啫喱', '100g', 0, '/goods-img/838fc0cb-b98f-4dca-bd68-581138b21a30.jpg', '/goods-img/838fc0cb-b98f-4dca-bd68-581138b21a30.jpg', '<p>商品介绍加载中...</p>', 100, 50, 10000, '', 0, 0, '2019-09-18 13:19:17', 0, '2019-09-18 13:19:17'),\n(10095, '无印良品 MUJI 小型超声波香薰机', '其他', 0, '/goods-img/30f05c92-a303-4b94-bb5e-22f3c65f3c37.jpg', '/goods-img/30f05c92-a303-4b94-bb5e-22f3c65f3c37.jpg', '<p>商品介绍加载中...</p>', 250, 250, 10000, '', 0, 0, '2019-09-18 13:19:17', 0, '2019-09-18 13:19:17'),\n(10096, '无印良品 MUJI 修正带', '其他', 0, '/goods-img/759427b3-b723-4917-b565-c0ae2003bf02.jpg', '/goods-img/759427b3-b723-4917-b565-c0ae2003bf02.jpg', '<p>商品介绍加载中...</p>', 25, 25, 10000, '', 0, 0, '2019-09-18 13:19:17', 0, '2019-09-18 13:19:17'),\n(10097, '无印良品 MUJI 聚丙烯', '笔盒 小/约170*51*20㎜', 0, '/goods-img/734f1604-e687-4cd1-8573-bb00e680e94e.jpg', '/goods-img/734f1604-e687-4cd1-8573-bb00e680e94e.jpg', '<p>商品介绍加载中...</p>', 12, 12, 10000, '', 0, 0, '2019-09-18 13:19:17', 0, '2019-09-18 13:19:17'),\n(10098, '无印良品 MUJI 乳液', '50ml', 0, '/goods-img/4eed1033-7728-477c-a29d-589bfd3ae3ce.jpg', '/goods-img/4eed1033-7728-477c-a29d-589bfd3ae3ce.jpg', '<p>商品介绍加载中...</p>', 55, 27, 10000, '', 0, 0, '2019-09-18 13:19:17', 0, '2019-09-18 13:19:17'),\n(10099, '无印良品 MUJI 男式', '棉水洗 平纹短袖衬衫 白色 L', 0, '/goods-img/d3fa11f3-6cfa-4958-b09c-584a62137b4b.jpg', '/goods-img/d3fa11f3-6cfa-4958-b09c-584a62137b4b.jpg', '<p>商品介绍加载中...</p>', 178, 89, 10000, '', 0, 0, '2019-09-18 13:19:17', 0, '2019-09-18 13:19:17'),\n(10100, '无印良品 MUJI 香/绿意', '12支装/棒状', 0, '/goods-img/829f2d09-1589-4f63-8376-d347c3cec620.jpg', '/goods-img/829f2d09-1589-4f63-8376-d347c3cec620.jpg', '<p>商品介绍加载中...</p>', 32, 32, 10000, '', 0, 0, '2019-09-18 13:19:17', 0, '2019-09-18 13:19:17'),\n(10101, '无印良品 MUJI 润肤乳霜(高保湿型)50g', '50g', 0, '/goods-img/1c70ddcb-ca69-40ed-a263-30880b2e2cac.jpg', '/goods-img/1c70ddcb-ca69-40ed-a263-30880b2e2cac.jpg', '<p>商品介绍加载中...</p>', 159, 159, 10000, '', 0, 0, '2019-09-18 13:19:17', 0, '2019-09-18 13:19:17'),\n(10102, '无印良品 MUJI 柔滑笔芯', '黑色', 0, '/goods-img/1db10d7c-3429-4ef2-ac41-2991af57f442.jpg', '/goods-img/1db10d7c-3429-4ef2-ac41-2991af57f442.jpg', '<p>商品介绍加载中...</p>', 19, 19, 10000, '', 0, 0, '2019-09-18 13:19:17', 0, '2019-09-18 13:19:17'),\n(10103, '无印良品 MUJI 铝制', '挂钩/吸盘式_2个装 大/约宽4.5x高6cm 2个装', 0, '/goods-img/bd0b92b4-c8ca-453a-b572-b3447083bddf.png', '/goods-img/bd0b92b4-c8ca-453a-b572-b3447083bddf.png', '<p>商品介绍加载中...</p>', 25, 25, 10000, '', 0, 0, '2019-09-18 13:19:17', 0, '2019-09-18 13:19:17'),\n(10104, '无印良品 MUJI 修正带', 'POM材质 替芯', 0, '/goods-img/98ce17e1-890e-4eaf-856a-7fce8ffebc4c.jpg', '/goods-img/98ce17e1-890e-4eaf-856a-7fce8ffebc4c.jpg', '<p>商品介绍加载中...</p>', 15, 15, 10000, '', 0, 0, '2019-09-18 13:19:17', 0, '2019-09-18 13:19:17'),\n(10105, '无印良品 MUJI 压克力记录板夹', 'Ａ4用/220×310ｍｍ', 0, '/goods-img/64d4e0b7-cd01-47f6-9081-4c2e7625e4f9.jpg', '/goods-img/64d4e0b7-cd01-47f6-9081-4c2e7625e4f9.jpg', '<p>商品介绍加载中...</p>', 35, 35, 10000, '', 0, 0, '2019-09-18 13:19:17', 0, '2019-09-18 13:19:17'),\n(10106, '无印良品（MUJI） 自然亲肤粉底液 自然透亮色', '新蜂精选', 0, '/goods-img/09576fcd-ea01-4b1d-bed4-be96b71f2c4e.jpg', '/goods-img/09576fcd-ea01-4b1d-bed4-be96b71f2c4e.jpg', '<p>商品介绍加载中...</p>', 75, 75, 10000, '', 0, 0, '2019-09-18 13:19:17', 0, '2019-09-18 13:19:17'),\n(10107, '无印良品 MUJI 荧光笔', '粉红色', 0, '/goods-img/04a8c325-d296-4f0e-ac6d-8cccba4dc90e.jpg', '/goods-img/04a8c325-d296-4f0e-ac6d-8cccba4dc90e.jpg', '<p>商品介绍加载中...</p>', 10, 10, 10000, '', 0, 0, '2019-09-18 13:19:22', 0, '2019-09-18 13:19:22'),\n(10108, '无印良品（MUJI） PET小分装瓶100ml', '新蜂精选', 0, '/goods-img/755a34a3-bc3e-4f04-8943-f79860012e78.jpg', '/goods-img/755a34a3-bc3e-4f04-8943-f79860012e78.jpg', '<p>商品介绍加载中...</p>', 30, 30, 10000, '', 0, 0, '2019-09-18 13:19:22', 0, '2019-09-18 13:19:22'),\n(10109, '无印良品 MUJI 基础润肤洁面乳', '150ml', 0, '/goods-img/e6a986ed-9b83-4649-9e72-3cf676c1f90e.jpg', '/goods-img/e6a986ed-9b83-4649-9e72-3cf676c1f90e.jpg', '<p>商品介绍加载中...</p>', 74, 74, 10000, '', 0, 0, '2019-09-18 13:19:22', 0, '2019-09-18 13:19:22'),\n(10110, '无印良品 MUJI 基础润肤乳霜', '其他 50g', 0, '/goods-img/30036561-a150-4ea7-9106-29bbea278909.jpg', '/goods-img/30036561-a150-4ea7-9106-29bbea278909.jpg', '<p>商品介绍加载中...</p>', 100, 100, 10000, '', 0, 0, '2019-09-18 13:19:22', 0, '2019-09-18 13:19:22'),\n(10111, '无印良品 MUJI 基础润肤洁面泡沫(替换装)', '180ml', 0, '/goods-img/aa37202c-68eb-4c84-b02c-171b3d11c0e8.jpg', '/goods-img/aa37202c-68eb-4c84-b02c-171b3d11c0e8.jpg', '<p>商品介绍加载中...</p>', 69, 69, 10000, '', 0, 0, '2019-09-18 13:19:22', 0, '2019-09-18 13:19:22'),\n(10112, '无印良品 MUJI 保湿洁面啫喱', '100g', 0, '/goods-img/0f724c0f-8888-4b75-8fe1-dc7dd8f2b7bd.jpg', '/goods-img/0f724c0f-8888-4b75-8fe1-dc7dd8f2b7bd.jpg', '<p>商品介绍加载中...</p>', 100, 50, 10000, '', 0, 0, '2019-09-18 13:19:22', 0, '2019-09-18 13:19:22'),\n(10113, '无印良品 MUJI 小型超声波香薰机', '其他', 0, '/goods-img/9608b59d-cbca-4b70-9f05-226fde41c51c.jpg', '/goods-img/9608b59d-cbca-4b70-9f05-226fde41c51c.jpg', '<p>商品介绍加载中...</p>', 250, 250, 10000, '呼吸品质生活', 0, 0, '2019-09-18 13:19:22', 0, '2019-09-18 13:19:22'),\n(10114, '无印良品 MUJI 修正带', '其他', 0, '/goods-img/d91a71e7-aada-4770-91c5-4da21e4b7ed9.jpg', '/goods-img/d91a71e7-aada-4770-91c5-4da21e4b7ed9.jpg', '<p>商品介绍加载中...</p>', 25, 25, 10000, '', 0, 0, '2019-09-18 13:19:22', 0, '2019-09-18 13:19:22'),\n(10115, '无印良品 MUJI 聚丙烯', '笔盒 小/约170*51*20㎜', 0, '/goods-img/d543ba0d-18d8-427a-87ea-99968b319440.jpg', '/goods-img/d543ba0d-18d8-427a-87ea-99968b319440.jpg', '<p>商品介绍加载中...</p>', 12, 12, 10000, '', 0, 0, '2019-09-18 13:19:22', 0, '2019-09-18 13:19:22'),\n(10116, '无印良品 MUJI 乳液', '50ml', 0, '/goods-img/cd6d91b0-69b2-4415-8560-4cbd2690cb50.jpg', '/goods-img/cd6d91b0-69b2-4415-8560-4cbd2690cb50.jpg', '<p>商品介绍加载中...</p>', 55, 27, 10000, '', 0, 0, '2019-09-18 13:19:22', 0, '2019-09-18 13:19:22'),\n(10117, '无印良品 MUJI 男式', '棉水洗 平纹短袖衬衫 白色 L', 0, '/goods-img/b08c94ac-cba2-4468-b3d0-03d9447f5bf2.jpg', '/goods-img/b08c94ac-cba2-4468-b3d0-03d9447f5bf2.jpg', '<p>商品介绍加载中...</p>', 178, 89, 10000, '', 0, 0, '2019-09-18 13:19:22', 0, '2019-09-18 13:19:22'),\n(10118, '无印良品 MUJI 香/绿意', '12支装/棒状', 0, '/goods-img/5a65f952-4141-47f8-8f8e-84120bbf74ea.jpg', '/goods-img/5a65f952-4141-47f8-8f8e-84120bbf74ea.jpg', '<p>商品介绍加载中...</p>', 32, 32, 10000, '', 0, 0, '2019-09-18 13:19:22', 0, '2019-09-18 13:19:22'),\n(10119, '无印良品 MUJI 润肤乳霜(高保湿型)50g', '50g', 0, '/goods-img/503ef53e-d4ac-4c4e-83a7-8a03ead0ecc8.jpg', '/goods-img/503ef53e-d4ac-4c4e-83a7-8a03ead0ecc8.jpg', '<p>商品介绍加载中...</p>', 159, 159, 10000, '', 0, 0, '2019-09-18 13:19:22', 0, '2019-09-18 13:19:22'),\n(10120, '无印良品 MUJI 柔滑笔芯', '黑色', 0, '/goods-img/aa83ce5b-2db1-4ecf-bc4f-f43c437894d7.jpg', '/goods-img/aa83ce5b-2db1-4ecf-bc4f-f43c437894d7.jpg', '<p>商品介绍加载中...</p>', 19, 19, 10000, '', 0, 0, '2019-09-18 13:19:22', 0, '2019-09-18 13:19:22'),\n(10121, '无印良品 MUJI 铝制', '挂钩/吸盘式_2个装 大/约宽4.5x高6cm 2个装', 0, '/goods-img/5c590548-9de3-47a3-8cb9-4d8f040a9635.png', '/goods-img/5c590548-9de3-47a3-8cb9-4d8f040a9635.png', '<p>商品介绍加载中...</p>', 25, 25, 10000, '', 0, 0, '2019-09-18 13:19:22', 0, '2019-09-18 13:19:22'),\n(10122, '无印良品 MUJI 修正带', 'POM材质 替芯', 0, '/goods-img/93181f0b-c069-4542-be91-a63856cd12d1.jpg', '/goods-img/93181f0b-c069-4542-be91-a63856cd12d1.jpg', '<p>商品介绍加载中...</p>', 15, 15, 10000, '', 0, 0, '2019-09-18 13:19:22', 0, '2019-09-18 13:19:22'),\n(10123, '无印良品 MUJI 压克力记录板夹', 'Ａ4用/220×310ｍｍ', 0, '/goods-img/45be1de3-447b-404b-9df8-ddf07fdc8647.jpg', '/goods-img/45be1de3-447b-404b-9df8-ddf07fdc8647.jpg', '<p>商品介绍加载中...</p>', 35, 35, 10000, '', 0, 0, '2019-09-18 13:19:22', 0, '2019-09-18 13:19:22'),\n(10124, '无印良品（MUJI） 自然亲肤粉底液 自然透亮色', '新蜂精选', 0, '/goods-img/7f905827-5765-40bc-a1b8-bedd9f407ced.jpg', '/goods-img/7f905827-5765-40bc-a1b8-bedd9f407ced.jpg', '<p>商品介绍加载中...</p>', 75, 75, 10000, '', 0, 0, '2019-09-18 13:19:22', 0, '2019-09-18 13:19:22'),\n(10125, '无印良品 MUJI PE小分装盒', '透明 30g', 0, '/goods-img/1d7f28bb-6597-48de-a6bb-2561697db883.jpg', '/goods-img/1d7f28bb-6597-48de-a6bb-2561697db883.jpg', '<p>商品介绍加载中...</p>', 10, 10, 10000, '', 0, 0, '2019-09-18 13:19:30', 0, '2019-09-18 13:19:30'),\n(10126, '无印良品 MUJI 保湿化妆液', '新蜂精选', 0, '/goods-img/53a089a9-e1d1-487e-974e-18bb4df41cf3.jpg', '/goods-img/53a089a9-e1d1-487e-974e-18bb4df41cf3.jpg', '<p>商品介绍加载中...</p>', 160, 80, 10000, '', 0, 0, '2019-09-18 13:19:30', 0, '2019-09-18 13:19:30'),\n(10127, '无印良品 MUJI 女式', '棉弹力 高领T恤 深灰色 M', 0, '/goods-img/53a6478b-4fd5-4add-b095-9fd4ad983a7b.jpg', '/goods-img/53a6478b-4fd5-4add-b095-9fd4ad983a7b.jpg', '<p>商品介绍加载中...</p>', 128, 40, 10000, '', 0, 0, '2019-09-18 13:19:30', 0, '2019-09-18 13:19:30'),\n(10128, '无印良品 MUJI 男式', '棉水洗 牛津纽扣领短袖衬衫 白色 L', 0, '/goods-img/561e9e6d-b130-468d-8328-36a5ff70cdfa.jpg', '/goods-img/561e9e6d-b130-468d-8328-36a5ff70cdfa.jpg', '<p>商品介绍加载中...</p>', 178, 89, 10000, '', 0, 0, '2019-09-18 13:19:30', 0, '2019-09-18 13:19:30'),\n(10129, '无印良品 MUJI 基础润肤乳液', '高保湿型 50ml', 0, '/goods-img/01514263-83b4-4ac7-aee3-5e5a2448414f.jpg', '/goods-img/01514263-83b4-4ac7-aee3-5e5a2448414f.jpg', '<p>商品介绍加载中...</p>', 37, 29, 10000, '', 0, 0, '2019-09-18 13:19:30', 0, '2019-09-18 13:19:30'),\n(10130, 'MUJI 羽毛 靠垫', '白色', 0, '/goods-img/23e5ee1d-5bb7-4f2a-b4b5-4fbc9ca3c163.jpg', '/goods-img/23e5ee1d-5bb7-4f2a-b4b5-4fbc9ca3c163.jpg', '<p>商品介绍加载中...</p>', 65, 65, 10000, '', 0, 0, '2019-09-18 13:19:30', 0, '2019-09-18 13:19:30'),\n(10131, '无印良品（MUJI） 可携带用小卷尺 白色', '新蜂精选', 0, '/goods-img/a4d3a61e-b0d3-4c58-85d6-fddf1de85f66.jpg', '/goods-img/a4d3a61e-b0d3-4c58-85d6-fddf1de85f66.jpg', '<p>商品介绍加载中...</p>', 28, 28, 10000, '', 0, 0, '2019-09-18 13:19:30', 0, '2019-09-18 13:19:30'),\n(10132, '无印良品 MUJI 笔记本/5mm方格', '暗灰色 B5/30张/线装', 0, '/goods-img/38c25b00-a4fb-4893-aa8e-34ff76963397.jpg', '/goods-img/38c25b00-a4fb-4893-aa8e-34ff76963397.jpg', '<p>商品介绍加载中...</p>', 9, 9, 10000, '', 0, 0, '2019-09-18 13:19:30', 0, '2019-09-18 13:19:30'),\n(10133, '无印良品 MUJI 低重心铅笔', '白色', 0, '/goods-img/dc497882-61ea-4d4f-98fe-d2b2500eda01.jpg', '/goods-img/dc497882-61ea-4d4f-98fe-d2b2500eda01.jpg', '<p>商品介绍加载中...</p>', 47, 47, 10000, '', 0, 0, '2019-09-18 13:19:30', 0, '2019-09-18 13:19:30'),\n(10134, '无印良品（MUJI） 手动碎纸机', '新蜂精选', 0, '/goods-img/f6e1ce14-a590-4736-9d36-df5628bc4188.jpg', '/goods-img/f6e1ce14-a590-4736-9d36-df5628bc4188.jpg', '<p>商品介绍加载中...</p>', 75, 75, 10000, '', 0, 0, '2019-09-18 13:19:30', 0, '2019-09-18 13:19:30'),\n(10135, '无印良品 MUJI 女式', '无袖衫 燕麦色 XL', 0, '/goods-img/c2e30c9b-ce49-4824-824a-b7d3ae173340.jpg', '/goods-img/c2e30c9b-ce49-4824-824a-b7d3ae173340.jpg', '<p>商品介绍加载中...</p>', 178, 53, 10000, '', 0, 0, '2019-09-18 13:19:30', 0, '2019-09-18 13:19:30'),\n(10136, '无印良品 MUJI 女式', '粗棉线长袖T恤 生成色 L', 0, '/goods-img/4b1b98d5-359f-4025-85e3-f357b6e9724a.jpg', '/goods-img/4b1b98d5-359f-4025-85e3-f357b6e9724a.jpg', '<p>商品介绍加载中...</p>', 198, 70, 10000, '', 0, 0, '2019-09-18 13:19:30', 0, '2019-09-18 13:19:30'),\n(10137, '无印良品 MUJI 塑料浴室座椅/小', '原色', 0, '/goods-img/37053615-750d-486e-b218-358a7c1adb21.jpg', '/goods-img/37053615-750d-486e-b218-358a7c1adb21.jpg', '<p>商品介绍加载中...</p>', 85, 85, 10000, '', 0, 0, '2019-09-18 13:19:30', 0, '2019-09-18 13:19:30'),\n(10138, '无印良品（MUJI） 树脂携带型订书机 白色', '新蜂精选', 0, '/goods-img/21dd6bd9-c4bc-4e17-8fed-23775cebf361.jpg', '/goods-img/21dd6bd9-c4bc-4e17-8fed-23775cebf361.jpg', '<p>商品介绍加载中...</p>', 42, 42, 10000, '', 0, 0, '2019-09-18 13:19:30', 0, '2019-09-18 13:19:30'),\n(10139, '无印良品 MUJI 基础润肤乳液', '滋润型', 0, '/goods-img/b8978340-ff72-4b5a-a9d3-4b5610982764.jpg', '/goods-img/b8978340-ff72-4b5a-a9d3-4b5610982764.jpg', '<p>商品介绍加载中...</p>', 28, 22, 10000, '', 0, 0, '2019-09-18 13:19:30', 0, '2019-09-18 13:19:30'),\n(10140, '无印良品（MUJI） 控色隔离霜30g 浅蓝色', '新蜂精选', 0, '/goods-img/b2969d29-b073-48f3-aa9a-b8aeb08a98d6.jpg', '/goods-img/b2969d29-b073-48f3-aa9a-b8aeb08a98d6.jpg', '<p>商品介绍加载中...</p>', 65, 65, 10000, '', 0, 0, '2019-09-18 13:19:30', 0, '2019-09-18 13:19:30'),\n(10141, '无印良品 MUJI 女式', '粗棉线条纹长袖T恤 黑*横条 L', 0, '/goods-img/a905c374-3411-4ddd-9b84-7ecbc9b50620.jpg', '/goods-img/a905c374-3411-4ddd-9b84-7ecbc9b50620.jpg', '<p>商品介绍加载中...</p>', 198, 70, 10000, '', 0, 0, '2019-09-18 13:19:30', 0, '2019-09-18 13:19:30'),\n(10142, '无印良品 MUJI PE小分装盒', '透明 30g', 0, '/goods-img/2750405a-2e01-463d-a059-54644c67f7cc.jpg', '/goods-img/2750405a-2e01-463d-a059-54644c67f7cc.jpg', '<p>商品介绍加载中...</p>', 10, 10, 10000, '', 0, 0, '2019-09-18 13:19:35', 0, '2019-09-18 13:19:35'),\n(10143, '无印良品 MUJI 保湿化妆液', '新蜂精选', 0, '/goods-img/17656dd7-c0fb-431d-810a-5eb29d07c011.jpg', '/goods-img/17656dd7-c0fb-431d-810a-5eb29d07c011.jpg', '<p>商品介绍加载中...</p>', 160, 80, 10000, '', 0, 0, '2019-09-18 13:19:35', 0, '2019-09-18 13:19:35'),\n(10144, '无印良品 MUJI 女式', '棉弹力 高领T恤 深灰色 M', 0, '/goods-img/780e716a-7be8-4d94-b8b6-833b4d97e148.jpg', '/goods-img/780e716a-7be8-4d94-b8b6-833b4d97e148.jpg', '<p>商品介绍加载中...</p>', 128, 40, 10000, '', 0, 0, '2019-09-18 13:19:35', 0, '2019-09-18 13:19:35'),\n(10145, '无印良品 MUJI 男式', '棉水洗 牛津纽扣领短袖衬衫 白色 L', 0, '/goods-img/94f5b471-1148-4320-aa8a-68573706fd91.jpg', '/goods-img/94f5b471-1148-4320-aa8a-68573706fd91.jpg', '<p>商品介绍加载中...</p>', 178, 89, 10000, '', 0, 0, '2019-09-18 13:19:35', 0, '2019-09-18 13:19:35'),\n(10146, '无印良品 MUJI 基础润肤乳液', '高保湿型 50ml', 0, '/goods-img/a12dcb9c-bb36-4df9-b517-1578a03fe062.jpg', '/goods-img/a12dcb9c-bb36-4df9-b517-1578a03fe062.jpg', '<p>商品介绍加载中...</p>', 37, 29, 10000, '', 0, 0, '2019-09-18 13:19:35', 0, '2019-09-18 13:19:35'),\n(10147, 'MUJI 羽毛 靠垫', '白色', 0, '/goods-img/0f701215-b782-40c7-8bbd-97b51be56461.jpg', '/goods-img/0f701215-b782-40c7-8bbd-97b51be56461.jpg', '<p>商品介绍加载中...</p>', 65, 65, 10000, '悠享惬意', 0, 0, '2019-09-18 13:19:35', 0, '2019-09-18 13:19:35'),\n(10148, '无印良品（MUJI） 可携带用小卷尺 白色', '新蜂精选', 0, '/goods-img/737afa41-1905-4dbc-ab33-95f8489dde5b.jpg', '/goods-img/737afa41-1905-4dbc-ab33-95f8489dde5b.jpg', '<p>商品介绍加载中...</p>', 28, 28, 10000, '', 0, 0, '2019-09-18 13:19:35', 0, '2019-09-18 13:19:35'),\n(10149, '无印良品 MUJI 笔记本/5mm方格', '暗灰色 B5/30张/线装', 0, '/goods-img/c6632420-ad7e-451b-a2a9-b02299653db1.jpg', '/goods-img/c6632420-ad7e-451b-a2a9-b02299653db1.jpg', '<p>商品介绍加载中...</p>', 9, 9, 10000, '', 0, 0, '2019-09-18 13:19:35', 0, '2019-09-18 13:19:35'),\n(10150, '无印良品 MUJI 低重心铅笔', '白色', 0, '/goods-img/060e3ace-71ca-44a2-9ded-73a05f186fcf.jpg', '/goods-img/060e3ace-71ca-44a2-9ded-73a05f186fcf.jpg', '<p>商品介绍加载中...</p>', 47, 47, 10000, '', 0, 0, '2019-09-18 13:19:35', 0, '2019-09-18 13:19:35'),\n(10151, '无印良品（MUJI） 手动碎纸机', '新蜂精选', 0, '/goods-img/58d831e4-07f4-44e2-a994-1a7d585452a1.jpg', '/goods-img/58d831e4-07f4-44e2-a994-1a7d585452a1.jpg', '<p>商品介绍加载中...</p>', 75, 75, 10000, '', 0, 0, '2019-09-18 13:19:35', 0, '2019-09-18 13:19:35'),\n(10152, '无印良品 MUJI 女式', '无袖衫 燕麦色 XL', 0, '/goods-img/f2aaadc0-ddda-4736-9826-2dbb2c533ea0.jpg', '/goods-img/f2aaadc0-ddda-4736-9826-2dbb2c533ea0.jpg', '<p>商品介绍加载中...</p>', 178, 53, 10000, '', 0, 0, '2019-09-18 13:19:35', 0, '2019-09-18 13:19:35'),\n(10153, '无印良品 MUJI 女式', '粗棉线长袖T恤 生成色 L', 0, '/goods-img/09c87218-d645-48e7-bbd5-54af5e77bf4b.jpg', '/goods-img/09c87218-d645-48e7-bbd5-54af5e77bf4b.jpg', '<p>商品介绍加载中...</p>', 198, 70, 10000, '', 0, 0, '2019-09-18 13:19:35', 0, '2019-09-18 13:19:35'),\n(10154, '无印良品 MUJI 塑料浴室座椅', '原色', 0, '/goods-img/15395057-94e9-4545-a8ee-8aee025f40c5.jpg', '/goods-img/15395057-94e9-4545-a8ee-8aee025f40c5.jpg', '<p>商品介绍加载中...</p>', 85, 85, 10000, '无印良品', 0, 0, '2019-09-18 13:19:35', 0, '2019-09-18 13:19:35'),\n(10155, '无印良品（MUJI） 树脂携带型订书机 白色', '新蜂精选', 0, '/goods-img/3b40971a-3f32-45cf-a99a-aada90ee8e33.jpg', '/goods-img/3b40971a-3f32-45cf-a99a-aada90ee8e33.jpg', '<p>商品介绍加载中...</p>', 42, 42, 10000, '', 0, 0, '2019-09-18 13:19:35', 0, '2019-09-18 13:19:35'),\n(10156, '无印良品 MUJI 基础润肤乳液', '滋润型', 0, '/goods-img/f65ef709-8fa8-4a3f-8abd-75a9b0492b14.jpg', '/goods-img/f65ef709-8fa8-4a3f-8abd-75a9b0492b14.jpg', '<p>商品介绍加载中...</p>', 28, 22, 10000, '', 0, 0, '2019-09-18 13:19:35', 0, '2019-09-18 13:19:35'),\n(10157, '无印良品（MUJI） 控色隔离霜30g 浅蓝色', '新蜂精选', 0, '/goods-img/66311489-b28b-41c3-ac34-540293df6e42.jpg', '/goods-img/66311489-b28b-41c3-ac34-540293df6e42.jpg', '<p>商品介绍加载中...</p>', 65, 65, 10000, '', 0, 0, '2019-09-18 13:19:35', 0, '2019-09-18 13:19:35'),\n(10158, '无印良品 女式粗棉线条纹长袖T恤', '黑*横条 L', 20, '/goods-img/5488564b-8335-4b0c-a5a4-52f3f03ee728.jpg', '/goods-img/5488564b-8335-4b0c-a5a4-52f3f03ee728.jpg', '<p>商品介绍加载中...</p>', 198, 70, 10000, '无印良品', 0, 0, '2019-09-18 13:19:35', 0, '2019-09-18 17:50:19'),\n(10159, 'Apple AirPods 配充电盒', '苹果蓝牙耳机', 0, '/goods-img/53c9f268-7cd4-4fac-909c-2dc066625655.jpg', '/goods-img/53c9f268-7cd4-4fac-909c-2dc066625655.jpg', '详情加载中...', 1246, 1246, 10000, '', 0, 0, '2019-09-18 13:21:28', 0, '2019-09-18 13:21:28'),\n(10160, '小米 Redmi AirDots', '真无线蓝牙耳机|分体式耳机 |收纳充电盒 |蓝牙5.0 |按键防触控操作', 51, '/goods-img/c47403f1-b706-453b-88d8-2bfdee0316be.jpg', '/goods-img/c47403f1-b706-453b-88d8-2bfdee0316be.jpg', '详情加载中...', 129, 129, 10000, '为自由发声', 0, 0, '2019-09-18 13:21:28', 0, '2019-09-18 13:21:28'),\n(10161, '荣耀原装三键线控带麦半入耳式耳机AM116(尊爵版)适用于华为荣耀手机', '新蜂精选', 0, '/goods-img/183481c3-47ff-4b2e-926f-b02b926ac02c.jpg', '/goods-img/183481c3-47ff-4b2e-926f-b02b926ac02c.jpg', '<p>商品介绍加载中...</p>', 69, 49, 10000, '', 0, 0, '2019-09-18 13:21:28', 0, '2019-09-18 13:21:28'),\n(10162, '诺基亚（NOKIA）BH-705 银白色 5.0真无线蓝牙耳机迷你运动跑步音乐商务入耳式安卓苹果手机蓝牙耳机', '新蜂精选', 0, '/goods-img/5e0d089b-fa91-410d-8ff2-9534eb6f627f.jpg', '/goods-img/5e0d089b-fa91-410d-8ff2-9534eb6f627f.jpg', '详情加载中...', 499, 499, 10000, '', 0, 0, '2019-09-18 13:21:28', 0, '2019-09-18 13:21:28'),\n(10163, '华为耳机原装半入耳式有线mate9p10plus8x荣耀v20v10nova2s9iv9p9play 【标准版】华为AM115 白色-热卖款', '新蜂精选', 0, '/goods-img/79e2b467-a075-46ef-ab43-aa0535f8e4c9.jpg', '/goods-img/79e2b467-a075-46ef-ab43-aa0535f8e4c9.jpg', '<p>商品介绍加载中...</p>', 69, 39, 10000, '', 0, 0, '2019-09-18 13:21:28', 0, '2019-09-18 13:21:28'),\n(10164, 'Beats X 蓝牙无线', '入耳式耳机 带麦可通话 -桀骜黑红（十周年版） MRQA2PA/A', 0, '/goods-img/911531a4-39a6-4771-b26e-2ba4db1ebcda.jpg', '/goods-img/911531a4-39a6-4771-b26e-2ba4db1ebcda.jpg', '<p>商品介绍加载中...</p>', 1168, 799, 10000, '', 0, 0, '2019-09-18 13:21:28', 0, '2019-09-18 13:21:28'),\n(10165, '华为（ HUAWEI） 华为无线耳机', '真无线蓝牙耳机 双耳蓝牙音乐耳机 Freebuds 2 无线耳机 陶瓷白', 0, '/goods-img/e70a4f29-2269-466a-984e-01e018206c2e.jpg', '/goods-img/e70a4f29-2269-466a-984e-01e018206c2e.jpg', '详情加载中...', 899, 799, 10000, '', 0, 0, '2019-09-18 13:21:28', 0, '2019-09-18 13:21:28'),\n(10166, '【自营仓次日达】moloke真无线蓝牙耳机双耳适用于苹果华为小米 运动跑步入耳式oppo迷你商务耳机 【1:1尊享版】自动弹窗+无线充电+可触控（热卖）', '新蜂精选', 51, '/goods-img/70dc1586-13bd-4b4c-92a9-fe20aa1d531f.jpg', '/goods-img/70dc1586-13bd-4b4c-92a9-fe20aa1d531f.jpg', '<p>商品介绍加载中...</p>', 359, 199, 10000, '', 0, 0, '2019-09-18 13:21:28', 0, '2019-09-18 13:21:28'),\n(10167, 'Beats Powerbeats Pro', '完全无线高性能耳机 真无线蓝牙运动耳机 象牙白', 0, '/goods-img/04441cd4-81c8-4ad9-a067-9d15422e508f.jpg', '/goods-img/04441cd4-81c8-4ad9-a067-9d15422e508f.jpg', '详情加载中...', 1888, 1888, 10000, '', 0, 0, '2019-09-18 13:21:28', 0, '2019-09-18 13:21:28'),\n(10168, '纽曼（Newmine）NM-LK06 全兼容线控音乐手机耳机 白色', '新蜂精选', 0, '/goods-img/ad53ea23-6974-4e44-b62d-eab498ce1d63.jpg', '/goods-img/ad53ea23-6974-4e44-b62d-eab498ce1d63.jpg', '<p>商品介绍加载中...</p>', 9, 9, 10000, '', 0, 0, '2019-09-18 13:21:28', 0, '2019-09-18 13:21:28'),\n(10169, '索尼（SONY）重低音立体声耳机MDR-XB55AP 黑色', '新蜂精选', 0, '/goods-img/01e1998d-f183-4e99-b8ba-7715727cf90b.jpg', '/goods-img/01e1998d-f183-4e99-b8ba-7715727cf90b.jpg', '*黑色实物偏灰，请以实物为准 Bass Booster低音增强器技术可呈现紧实深邃低频。 12 毫米驱动单元和110dB/mW 的高灵敏度，呈现高质感音效。 人体工学设计的倾斜入耳方式，让耳塞能够深入耳朵内部，呈现出色的隔音效果，同时带来舒适的佩戴感和高音质的享受。 耳塞能够深入耳朵内部，呈现出色的隔音效果，同时为您带来舒适的佩戴感和高音质的享受。 采用混合两种硬度硅胶的耳塞套： 核心部分使用硬质材料保持音质，减少因耳塞变形导致的声音失真； 外围部分柔软材料提高了耳塞密闭性，让您能长时间舒适佩戴。 *线控的可用性及操作因智能手机而异 耳机线表面细小沟壑，减少容易引起缠绕的摩擦，使导线不容易纠结在一起，方便欣赏音乐和携带。 防缠绕耳机线 盲点设计 便携袋 防尘滤网 导线滑块 4种尺寸耳塞套 摘下耳机的耳塞套，可见保护单元的网罩，用来防止异物和灰尘堵塞单元，使耳机经久耐听。 在左耳外壳和耳机线的连接处设有浮点，凭手指触摸就能判别左右耳，方便操作。 随机附赠收纳袋一只，保护你心爱的耳机。 利用导线滑块来调整左右耳机线的长度，也能够减少收纳耳机时容易出现的缠线现象 提供4对不同尺寸（SS、S、M、L）的耳塞套（M号出厂时已安装至耳机上），根据你的耳洞大小自由更换，获得良好的隔音效果，佩戴舒适。 ● 立体声耳机 ● 混合硅胶耳塞（SS/S/M/L 每种尺寸2个) *M号出厂时安装至本耳机。 ● 便携袋(×1) *EXTRA BASS 和 EXTRABASS 是索尼公司的商标', 229, 185, 10000, '', 0, 0, '2019-09-18 13:21:28', 0, '2019-09-18 13:21:28'),\n(10170, '索尼（SONY）WI-1000X Hi-Res颈挂式 入耳式', '无线蓝牙耳机 高音质降噪耳机 手机通话 黑色', 0, '/goods-img/1631a30b-287c-41da-bbbe-1a9b1b8d1552.jpg', '/goods-img/1631a30b-287c-41da-bbbe-1a9b1b8d1552.jpg', '详情加载中...', 2399, 1499, 10000, '', 0, 0, '2019-09-18 13:21:28', 0, '2019-09-18 13:21:28'),\n(10171, '小米耳机 圈铁Pro 入耳式有线运动音乐耳机耳麦', '新蜂精选', 51, '/goods-img/f3d269a4-5317-4b30-b164-1311f6c1f058.jpg', '/goods-img/f3d269a4-5317-4b30-b164-1311f6c1f058.jpg', '使用双动圈 + 动铁 三单元发声 ／ 均衡自然声音 高保真石墨烯振膜 ／ 25 道工序打磨 ／ 弹力磨砂线材 Pro 小米圈铁耳机 孕育万物的天空和大地，时刻传达着声音的释放与组合，更是寻找灵感的源头，鸟鸣、流水、雷响、风啸不同的声音互相交融，共同演奏出自然的本真。 小米圈铁耳机 Pro 使用双“动圈”单元+“动铁”单元，将三个单元共同融入到同一个耳机中，双“动圈”的醇厚低音，让声音更加扎实稳重，石墨烯材料的加入，则让声音的细节更为丰富。“动铁”的高音透亮，稳定自然，感受三频均衡的本色声音。随着声音的流淌，仿佛置身自然，听见这些细节，让声音一开始就感动内心。 双动圈+动铁，三单元发声，听见更多细节 为了可以真正实现高、中、低三频均衡，小米圈铁耳机 Pro  加入了双“动圈”单元，大动圈负责中低频，小动圈负责高频。在“动铁”单元的配合下，耳机的低频下潜深，中频声音扎实，而高频的细节展现更为丰富。那些刚刚好的声音，听在耳里，都在心里。 三频更均衡，声音更自然 我们听到的绝大多数乐器、人声，都在中低频段。为了让这部分声音更均衡、有感染力，我们都交由采用了石墨烯振膜的双动圈单元来负责，中低频更扎实，兼具丰富细节表现力。 石墨烯是目前自然界已知材料中轻薄、强度更高的材料，对声音的传导速度快，将它用作振膜材质，高频延展性能更好，细节丰富，声音清澈自然，更富穿透力。同时强度又是钢铁的100倍， 可以尽可能还原出电流信号， 真正发出高保真的好声音。 石墨烯振膜，让双动圈更有实力 小米圈铁耳机 Pro 的“动铁”单元依然采用自主研发的 \"衔铁＋驱动杆\" 结构，让声音细腻真实，更为稳定，在电容分频器的作用下，让高中低音衔接更好，失真更少。不论当你听何种音乐，细腻的感情都会被准确还原，听每首歌就像读每个故事，时刻感动自己。 动铁单元设计，高频解析好，细节不失真 好的音乐人将情感与生活用真实的方式，转化为音乐传递给每个人，每首歌都是一个故事，铭刻在各自的记忆中，为了让故事更好的表达，小米圈铁耳机 Pro 在科学客观调音的基础上，再次邀请到荣获 4 次格莱美大奖的 Luca Bignardi，为小米圈铁耳机 Pro 进行主观调音，为的就是让每个喜爱音乐的人能够真切的感受到每一个故事，跟随内心，娓娓道来... 多种科学调音，让声音更鲜活，更温暖 当耳机真正为声音服务时，设计将不再只是修饰耳机外观的道具，它将会成为辅助声音的一部分，小米圈铁耳机 Pro 采用圆润的设计风格，45° 斜角入耳设计，在满足舒适的同时更保证了声音的完整呈现。精密金属音腔设计，让音乐沉于耳畔，更有声音质感，弹力 TPE 磨砂线材的选用，让耳机线更为坚固耐用，确保耳机长久使用。一副好耳机，让声音和外表一起美好。 全新的外观设计，和声音一起美好 好的设计需要灵感，而灵感源于生活，为了锁住声音的灵感，小米圈铁耳机 Pro 将耳塞设计成45°斜角式入耳，贴合耳道，满足佩戴舒适感的同时尽可能减少外界声音干扰，毫无保留地听自己爱的音乐。 45°斜角入耳，舒适佩戴 小米圈铁耳机 Pro 的线控麦克风从耳机整体设计风格出发，金属磨砂弹头造型，精致小巧，指压按键圆润舒适，听歌的同时，更能感知指尖上的金属质感。 小米圈铁耳机 Pro 的耳机线材选取 TPE 材质，作为一种具有橡胶的高弹性材质， 触感柔软、耐温等特性，用它做成耳机线，将更为抗拉、耐用并且不易缠绕。让好音乐的陪伴更长久。 小米圈铁耳机 Pro 的耳塞选取奶嘴级硅胶材质，触感柔软顺滑，减少了耳塞对皮肤的刺激，让肌肤倍感亲密，同时提供四对不同尺寸的耳塞套，让佩戴者根据不同需求选择，带上它，向自己喜爱的音乐问好！ 用匠心打磨每一件产品，即使过程艰难复杂，也依然充满斗志，小米圈铁耳机 Pro 的诞生过程就是这样。25 道工序打造的金属音腔，每一处细节都精心打磨，一体成型钻石切割、细密 CD 纹雕刻、锆石喷砂、阳极氧化，千锤百炼，不放过每个细节，将金属打磨成入耳的艺术品，这就是小米圈铁耳机 Pro 对音乐执着，对好产品更要执着。 小米圈铁耳机 Pro 是铝合金音腔，采用了 CNC 钻石切割一刀成型工艺，加工精度高达0.01mm，这种工艺在对铝合金加工前都要进行工艺分析，选择合适的刀具及切削用量，将打磨成型，让耳机具有更细腻润泽的手感。 小米圈铁耳机 Pro 运用精密的 CD 纹处理，纹理细至 0.14mm，散发金属光泽，就像耳机的指纹一样。如此的精密打磨，只为让小米圈铁耳机 Pro 更具质感，让金属更光辉熠熠。 选用精细锆石喷砂，赋予小米圈铁耳机 Pro 细致均匀的外观，有效保证了耳机表面硬度，不易刮伤。出厂时，会在小米圈铁耳机 Pro 表层增加阳极处理，保证了美观程度和耐磨性，6μ的阳极厚度，坚固、耐磨，做传达好声音的艺术品。 拥有超过 700 项高于行业标准的苛刻测试，每一种测试都见证了小米圈铁耳机 Pro 的高品质， 从音乐品质到设计创新，再到匠心工艺，集合好耳机的所有亮点，都只为带给用户更好的音乐体验和使用感受，好的声音，一定需要千锤百炼 。', 149, 149, 10000, '', 0, 0, '2019-09-18 13:21:28', 0, '2019-09-18 13:21:28'),\n(10172, 'Bose QuietControl 30', '无线耳机 QC30耳塞式蓝牙降噪耳麦', 0, '/goods-img/966a8b32-f547-457c-9161-009d3113d584.jpg', '/goods-img/966a8b32-f547-457c-9161-009d3113d584.jpg', '<p>商品介绍加载中...</p>', 2498, 2498, 10000, '', 0, 0, '2019-09-18 13:21:28', 0, '2019-09-18 13:21:28'),\n(10173, 'Beats Solo3 Wireless', '头戴式 蓝牙无线耳机 手机耳机 游戏耳机 - 桀骜黑红（十周年版） MRQC2PA/A', 0, '/goods-img/72218e28-fc58-4aa0-b3cd-c1f2c764d25e.jpg', '/goods-img/72218e28-fc58-4aa0-b3cd-c1f2c764d25e.jpg', '<p>商品介绍加载中...</p>', 2268, 1698, 10000, '', 0, 0, '2019-09-18 13:21:28', 0, '2019-09-18 13:21:28'),\n(10174, '索尼（SONY）WH-1000XM3 高解析度无线蓝牙降噪 头戴式耳机（触控面板', '智能降噪 长久续航）黑色', 0, '/goods-img/4cc6c606-4d69-4f49-b10c-01cedeef813f.jpg', '/goods-img/4cc6c606-4d69-4f49-b10c-01cedeef813f.jpg', '详情加载中...', 2899, 2599, 10000, '', 0, 0, '2019-09-18 13:21:28', 0, '2019-09-18 13:21:28'),\n(10175, '雷蛇 Razer 北海巨妖标准版X', '北海巨妖标准版升级款 头戴式游戏耳机 电竞耳麦 7.1 电脑手机耳机 黑色', 0, '/goods-img/7345c467-6c2d-4f30-a73d-83d675d5208c.jpg', '/goods-img/7345c467-6c2d-4f30-a73d-83d675d5208c.jpg', '产品信息Product Information 产品规格Product Specifications 品牌介绍Brand Introduction 注意事项Warning & Caution 雷蛇产品在出厂时会进行检测，脚贴及USB接口处如有轻微划痕属于正常测试痕迹。 RAZER关于划痕的注意事项： 以上数据图片均为官方测试环境下结果，因使用环境/设备不同会存在一定的差异，仅供参考，数据请以实际为准！  1. 产品实物与外包装上的SN（序列号）必须一致； 2. 产品外包装不能严重破损，盒内的相关配件要齐全，不能有缺失； 3. 不能有明显的人为破损（表面有明显的人为划痕，使用及存在拆卸的痕迹）； 4. 防伪标签不得撕开或损毁。 RAZER关于7天无理由退换货的注意事项： ', 349, 299, 10000, '', 0, 0, '2019-09-18 13:21:28', 0, '2019-09-18 13:21:28'),\n(10176, '森海塞尔（Sennheiser）MomentumTrueWireless 真无线蓝牙hifi发烧入耳式耳机 蓝牙5.0', '黑色', 0, '/goods-img/efea018e-8ab0-47f9-a3d4-260c8cd2de5f.jpg', '/goods-img/efea018e-8ab0-47f9-a3d4-260c8cd2de5f.jpg', '聆听带来改变 真     无     线     蓝     牙     HiFi     耳     机 MOMENTUM 真无线 懂你所需 全新的 MOMENTUM 真无线耳机，高品质的声音质量传承 MOMENTUM 品质，成为一款具有重要技术成就的新产品。 这款性能优异的蓝牙耳机融合音频质量、佩戴舒适性和精致设计及工艺。 全新的 MOMENTUM 透明聆听功能 防水防泼溅 电池使用时长 （4+8小时） 精雕细琢 经典优雅 高品质声音质量 智能降噪 智能触控操作 支持蓝牙5.0技术 智能触控操作 支持蓝牙 5.0技术 MOMENTUM真无线耳机采用Sennheiser发烧级别7毫米动圈驱动单元，可确保饱满的立体声效果，带来高保真音质，为苛刻的听者带来出色的高保真度。 高品质声音质量 两侧触摸区域都有单独的控制功能，您可以轻松使用右耳耳机语音访问智能助手（如苹果 Siri或Google智能助手）。 轻轻点击或滑动触摸界面，使用自然语音命令即可播放音乐、接听电话。 支持蓝牙5.0技术及编解码技术（包括AAC、Qualcomm apt-XTM和apt-X低延迟），这款耳机带来出众的连接稳定性和音频流畅性。 真正的无线体验 轻松适配周围环境 MOMENTUM 真无线耳机让你更好地感知外部环境，透明聆听让你能听到周围的环境声，从而更好地感知周围的环境，不需要摘掉耳机就能融入到自然的交谈之中。甚至在嘈杂的环境中，电话呼叫和语音交互也能够通过双话筒波束成形技术得以实现。 智能交互 通过自动开启/关闭和智能暂停功能，可以检测到耳机何时被收起来或者不使用，从而节约能源。 你的世界由你把控 通过双击右耳耳机开/关透明聆听功能 打开透明聆听=接收周围环境音 关闭透明聆听=物理降噪模式，不接收周围音 不需要摘掉耳机就可轻松地与周围人进行交谈。 4种尺寸的耳垫可选，均符合人体工程学设计，防水防泼溅，能够满足用户舒适佩戴的需求。 个性定制舒适体验 MOMENTUM真无线拥有4小时电池续航时间，可通过其带有集成电源的小巧耳机盒进行充电，从而享受长达12（4+8）小时的全天聆听乐趣，并满足未来所需。 镀金充电接触点 可磁性吸附到充电盒上 高保真7毫米动圈驱动单元 带来出色的声音重放 金属镭射表面 具有触控功能 多色 LED指示灯 用于语音信号拾取和透明聆听功能的话筒 舒适的入耳式 硅胶耳垫 便捷充电盒持久续航 注重细节、富于美感，这款小巧、 靓丽而轻盈的耳机是技术与艺术的 结合。它既是声音重放技术的成就，更是你耳畔精美的配饰。 质感黑色外壳，闪烁的金属镭射表面，镀金的充电接触点——时尚与功能融合于标志性的设计之中，带来优雅和实用感。 Sennheiser智能控制 MOMENTUM 真无线耳机提供了更为智能和个性化的体验，可以通过新款Sennheiser智能控制应用进行优化，根据个人喜好，利用内置音频EQ对声音进行微调。免费下载，兼容iOS 版本 11.0 及以上版本和Android 版本 7.0 及以上版本 ，简便直观的控制界面，为您的耳机提供个性化的配置和升级等功能。 APP 下载方法 Android 版本 7.0 及以上版本 打开链接下载APP https://share.weiyun.com/54byqjn iOS 版本 11.0 及以上版本 打开APP Store搜索 Sennheiser smart control 下载APP', 2399, 2399, 10000, '', 0, 0, '2019-09-18 13:21:28', 0, '2019-09-18 13:21:28'),\n(10177, 'Bose SoundSport Free', '真无线蓝牙耳机--黑色 运动耳机 防掉落耳塞', 0, '/goods-img/b3de8a39-e33c-432f-872f-46f4a1662498.jpg', '/goods-img/b3de8a39-e33c-432f-872f-46f4a1662498.jpg', '<p>商品介绍加载中...</p>', 1699, 1699, 10000, '', 0, 0, '2019-09-18 13:21:28', 0, '2019-09-18 13:21:28'),\n(10178, '华为原装降噪有线手机耳机Mate9 10P9P10Plus荣耀V9V10PlayNova2s9i8x 【送耳机收纳包】AM115半入耳式耳机-经典热卖款', '新蜂精选', 0, '/goods-img/d6565a7e-473b-4933-93c5-e646495c8c4c.jpg', '/goods-img/d6565a7e-473b-4933-93c5-e646495c8c4c.jpg', '详情加载中...', 99, 39, 10000, '', 0, 0, '2019-09-18 13:21:28', 0, '2019-09-18 13:21:28'),\n(10179, 'Apple 采用Lightning/闪电接头的 EarPods', '耳机', 0, '/goods-img/bf6ccbc4-d0d0-4fbb-b975-4becb9cb38f4.jpg', '/goods-img/bf6ccbc4-d0d0-4fbb-b975-4becb9cb38f4.jpg', '详情加载中...', 223, 223, 10000, '', 0, 0, '2019-09-18 13:21:28', 0, '2019-09-18 13:21:28'),\n(10180, 'Apple AirPods 配充电盒', '苹果蓝牙耳机', 0, '/goods-img/64768a8d-0664-4b29-88c9-2626578ffbd1.jpg', '/goods-img/64768a8d-0664-4b29-88c9-2626578ffbd1.jpg', '详情加载中...', 1246, 1246, 10000, '妙出新境界', 0, 0, '2019-09-18 13:21:35', 0, '2019-09-18 13:21:35'),\n(10181, '小米 Redmi AirDots', '真无线蓝牙耳机|分体式耳机 |收纳充电盒 |蓝牙5.0 |按键防触控操作', 51, '/goods-img/36d0fe8f-aa28-423c-81e7-82cab31b7598.jpg', '/goods-img/36d0fe8f-aa28-423c-81e7-82cab31b7598.jpg', '详情加载中...', 129, 129, 10000, '', 0, 0, '2019-09-18 13:21:35', 0, '2019-09-18 13:21:35'),\n(10182, '荣耀原装三键线控带麦半入耳式耳机AM116(尊爵版)适用于华为荣耀手机', '新蜂精选', 0, '/goods-img/6113a562-f3f1-408c-9b0d-78a84407caf7.jpg', '/goods-img/6113a562-f3f1-408c-9b0d-78a84407caf7.jpg', '<p>商品介绍加载中...</p>', 69, 49, 10000, '', 0, 0, '2019-09-18 13:21:35', 0, '2019-09-18 13:21:35'),\n(10183, '诺基亚（NOKIA）BH-705 银白色 5.0真无线蓝牙耳机迷你运动跑步音乐商务入耳式安卓苹果手机蓝牙耳机', '新蜂精选', 0, '/goods-img/abb13d3a-3445-4b26-b8e9-44cbec227b5d.jpg', '/goods-img/abb13d3a-3445-4b26-b8e9-44cbec227b5d.jpg', '详情加载中...', 499, 499, 10000, '', 0, 0, '2019-09-18 13:21:35', 0, '2019-09-18 13:21:35'),\n(10184, '华为耳机原装半入耳式有线mate9p10plus8x荣耀v20v10nova2s9iv9p9play 【标准版】华为AM115 白色-热卖款', '新蜂精选', 0, '/goods-img/fac9c3e9-4843-46d1-8668-7e2eac17ccf2.jpg', '/goods-img/fac9c3e9-4843-46d1-8668-7e2eac17ccf2.jpg', '<p>商品介绍加载中...</p>', 69, 39, 10000, '', 0, 0, '2019-09-18 13:21:35', 0, '2019-09-18 13:21:35'),\n(10185, 'Beats X 蓝牙无线', '入耳式耳机 带麦可通话 -桀骜黑红（十周年版） MRQA2PA/A', 0, '/goods-img/25910a34-e026-4954-87b0-c379999e1dd0.jpg', '/goods-img/25910a34-e026-4954-87b0-c379999e1dd0.jpg', '<p>商品介绍加载中...</p>', 1168, 799, 10000, '', 0, 0, '2019-09-18 13:21:35', 0, '2019-09-18 13:21:35'),\n(10186, '华为（ HUAWEI） 华为无线耳机', '真无线蓝牙耳机 双耳蓝牙音乐耳机 Freebuds 2 无线耳机 陶瓷白', 0, '/goods-img/adf8cbc2-ccb9-408a-96d0-553848e111e9.jpg', '/goods-img/adf8cbc2-ccb9-408a-96d0-553848e111e9.jpg', '详情加载中...', 899, 799, 10000, '', 0, 0, '2019-09-18 13:21:35', 0, '2019-09-18 13:21:35'),\n(10187, '【自营仓次日达】moloke真无线蓝牙耳机双耳适用于苹果华为小米 运动跑步入耳式oppo迷你商务耳机 【1:1尊享版】自动弹窗+无线充电+可触控（热卖）', '新蜂精选', 51, '/goods-img/1e5645d1-24cb-48eb-9aaa-f729fa0db195.jpg', '/goods-img/1e5645d1-24cb-48eb-9aaa-f729fa0db195.jpg', '<p>商品介绍加载中...</p>', 359, 199, 10000, '', 0, 0, '2019-09-18 13:21:35', 0, '2019-09-18 13:21:35'),\n(10188, 'Beats Powerbeats Pro', '完全无线高性能耳机 真无线蓝牙运动耳机 象牙白', 0, '/goods-img/e028c016-6793-49a3-8b0f-d0102a415d21.jpg', '/goods-img/e028c016-6793-49a3-8b0f-d0102a415d21.jpg', '详情加载中...', 1888, 1888, 10000, '', 0, 0, '2019-09-18 13:21:35', 0, '2019-09-18 13:21:35'),\n(10189, '纽曼（Newmine）NM-LK06 全兼容线控音乐手机耳机 白色', '新蜂精选', 0, '/goods-img/0b02244f-6908-4ccb-a9d2-ccb5a462e30e.jpg', '/goods-img/0b02244f-6908-4ccb-a9d2-ccb5a462e30e.jpg', '<p>商品介绍加载中...</p>', 9, 9, 10000, '', 0, 0, '2019-09-18 13:21:35', 0, '2019-09-18 13:21:35'),\n(10190, '索尼（SONY）重低音立体声耳机MDR-XB55AP 黑色', '新蜂精选', 0, '/goods-img/eec7b009-a9ff-45cd-a7be-4051eb7b3c22.jpg', '/goods-img/eec7b009-a9ff-45cd-a7be-4051eb7b3c22.jpg', '*黑色实物偏灰，请以实物为准 Bass Booster低音增强器技术可呈现紧实深邃低频。 12 毫米驱动单元和110dB/mW 的高灵敏度，呈现高质感音效。 人体工学设计的倾斜入耳方式，让耳塞能够深入耳朵内部，呈现出色的隔音效果，同时带来舒适的佩戴感和高音质的享受。 耳塞能够深入耳朵内部，呈现出色的隔音效果，同时为您带来舒适的佩戴感和高音质的享受。 采用混合两种硬度硅胶的耳塞套： 核心部分使用硬质材料保持音质，减少因耳塞变形导致的声音失真； 外围部分柔软材料提高了耳塞密闭性，让您能长时间舒适佩戴。 *线控的可用性及操作因智能手机而异 耳机线表面细小沟壑，减少容易引起缠绕的摩擦，使导线不容易纠结在一起，方便欣赏音乐和携带。 防缠绕耳机线 盲点设计 便携袋 防尘滤网 导线滑块 4种尺寸耳塞套 摘下耳机的耳塞套，可见保护单元的网罩，用来防止异物和灰尘堵塞单元，使耳机经久耐听。 在左耳外壳和耳机线的连接处设有浮点，凭手指触摸就能判别左右耳，方便操作。 随机附赠收纳袋一只，保护你心爱的耳机。 利用导线滑块来调整左右耳机线的长度，也能够减少收纳耳机时容易出现的缠线现象 提供4对不同尺寸（SS、S、M、L）的耳塞套（M号出厂时已安装至耳机上），根据你的耳洞大小自由更换，获得良好的隔音效果，佩戴舒适。 ● 立体声耳机 ● 混合硅胶耳塞（SS/S/M/L 每种尺寸2个) *M号出厂时安装至本耳机。 ● 便携袋(×1) *EXTRA BASS 和 EXTRABASS 是索尼公司的商标', 229, 185, 10000, '', 0, 0, '2019-09-18 13:21:35', 0, '2019-09-18 13:21:35'),\n(10191, '索尼（SONY）WI-1000X Hi-Res颈挂式 入耳式', '无线蓝牙耳机 高音质降噪耳机 手机通话 黑色', 0, '/goods-img/1c4adfba-f2f4-4ab3-8520-c28b0a437b7b.jpg', '/goods-img/1c4adfba-f2f4-4ab3-8520-c28b0a437b7b.jpg', '详情加载中...', 2399, 1499, 10000, '', 0, 0, '2019-09-18 13:21:35', 0, '2019-09-18 13:21:35'),\n(10192, '小米耳机 圈铁Pro 入耳式有线运动音乐耳机耳麦', '新蜂精选', 51, '/goods-img/b1530f7f-d286-4eb1-8d2b-3c2a74fa9f06.jpg', '/goods-img/b1530f7f-d286-4eb1-8d2b-3c2a74fa9f06.jpg', '使用双动圈 + 动铁 三单元发声 ／ 均衡自然声音 高保真石墨烯振膜 ／ 25 道工序打磨 ／ 弹力磨砂线材 Pro 小米圈铁耳机 孕育万物的天空和大地，时刻传达着声音的释放与组合，更是寻找灵感的源头，鸟鸣、流水、雷响、风啸不同的声音互相交融，共同演奏出自然的本真。 小米圈铁耳机 Pro 使用双“动圈”单元+“动铁”单元，将三个单元共同融入到同一个耳机中，双“动圈”的醇厚低音，让声音更加扎实稳重，石墨烯材料的加入，则让声音的细节更为丰富。“动铁”的高音透亮，稳定自然，感受三频均衡的本色声音。随着声音的流淌，仿佛置身自然，听见这些细节，让声音一开始就感动内心。 双动圈+动铁，三单元发声，听见更多细节 为了可以真正实现高、中、低三频均衡，小米圈铁耳机 Pro  加入了双“动圈”单元，大动圈负责中低频，小动圈负责高频。在“动铁”单元的配合下，耳机的低频下潜深，中频声音扎实，而高频的细节展现更为丰富。那些刚刚好的声音，听在耳里，都在心里。 三频更均衡，声音更自然 我们听到的绝大多数乐器、人声，都在中低频段。为了让这部分声音更均衡、有感染力，我们都交由采用了石墨烯振膜的双动圈单元来负责，中低频更扎实，兼具丰富细节表现力。 石墨烯是目前自然界已知材料中轻薄、强度更高的材料，对声音的传导速度快，将它用作振膜材质，高频延展性能更好，细节丰富，声音清澈自然，更富穿透力。同时强度又是钢铁的100倍， 可以尽可能还原出电流信号， 真正发出高保真的好声音。 石墨烯振膜，让双动圈更有实力 小米圈铁耳机 Pro 的“动铁”单元依然采用自主研发的 \"衔铁＋驱动杆\" 结构，让声音细腻真实，更为稳定，在电容分频器的作用下，让高中低音衔接更好，失真更少。不论当你听何种音乐，细腻的感情都会被准确还原，听每首歌就像读每个故事，时刻感动自己。 动铁单元设计，高频解析好，细节不失真 好的音乐人将情感与生活用真实的方式，转化为音乐传递给每个人，每首歌都是一个故事，铭刻在各自的记忆中，为了让故事更好的表达，小米圈铁耳机 Pro 在科学客观调音的基础上，再次邀请到荣获 4 次格莱美大奖的 Luca Bignardi，为小米圈铁耳机 Pro 进行主观调音，为的就是让每个喜爱音乐的人能够真切的感受到每一个故事，跟随内心，娓娓道来... 多种科学调音，让声音更鲜活，更温暖 当耳机真正为声音服务时，设计将不再只是修饰耳机外观的道具，它将会成为辅助声音的一部分，小米圈铁耳机 Pro 采用圆润的设计风格，45° 斜角入耳设计，在满足舒适的同时更保证了声音的完整呈现。精密金属音腔设计，让音乐沉于耳畔，更有声音质感，弹力 TPE 磨砂线材的选用，让耳机线更为坚固耐用，确保耳机长久使用。一副好耳机，让声音和外表一起美好。 全新的外观设计，和声音一起美好 好的设计需要灵感，而灵感源于生活，为了锁住声音的灵感，小米圈铁耳机 Pro 将耳塞设计成45°斜角式入耳，贴合耳道，满足佩戴舒适感的同时尽可能减少外界声音干扰，毫无保留地听自己爱的音乐。 45°斜角入耳，舒适佩戴 小米圈铁耳机 Pro 的线控麦克风从耳机整体设计风格出发，金属磨砂弹头造型，精致小巧，指压按键圆润舒适，听歌的同时，更能感知指尖上的金属质感。 小米圈铁耳机 Pro 的耳机线材选取 TPE 材质，作为一种具有橡胶的高弹性材质， 触感柔软、耐温等特性，用它做成耳机线，将更为抗拉、耐用并且不易缠绕。让好音乐的陪伴更长久。 小米圈铁耳机 Pro 的耳塞选取奶嘴级硅胶材质，触感柔软顺滑，减少了耳塞对皮肤的刺激，让肌肤倍感亲密，同时提供四对不同尺寸的耳塞套，让佩戴者根据不同需求选择，带上它，向自己喜爱的音乐问好！ 用匠心打磨每一件产品，即使过程艰难复杂，也依然充满斗志，小米圈铁耳机 Pro 的诞生过程就是这样。25 道工序打造的金属音腔，每一处细节都精心打磨，一体成型钻石切割、细密 CD 纹雕刻、锆石喷砂、阳极氧化，千锤百炼，不放过每个细节，将金属打磨成入耳的艺术品，这就是小米圈铁耳机 Pro 对音乐执着，对好产品更要执着。 小米圈铁耳机 Pro 是铝合金音腔，采用了 CNC 钻石切割一刀成型工艺，加工精度高达0.01mm，这种工艺在对铝合金加工前都要进行工艺分析，选择合适的刀具及切削用量，将打磨成型，让耳机具有更细腻润泽的手感。 小米圈铁耳机 Pro 运用精密的 CD 纹处理，纹理细至 0.14mm，散发金属光泽，就像耳机的指纹一样。如此的精密打磨，只为让小米圈铁耳机 Pro 更具质感，让金属更光辉熠熠。 选用精细锆石喷砂，赋予小米圈铁耳机 Pro 细致均匀的外观，有效保证了耳机表面硬度，不易刮伤。出厂时，会在小米圈铁耳机 Pro 表层增加阳极处理，保证了美观程度和耐磨性，6μ的阳极厚度，坚固、耐磨，做传达好声音的艺术品。 拥有超过 700 项高于行业标准的苛刻测试，每一种测试都见证了小米圈铁耳机 Pro 的高品质， 从音乐品质到设计创新，再到匠心工艺，集合好耳机的所有亮点，都只为带给用户更好的音乐体验和使用感受，好的声音，一定需要千锤百炼 。', 149, 149, 10000, '', 0, 0, '2019-09-18 13:21:35', 0, '2019-09-18 13:21:35'),\n(10193, 'Bose QuietControl 30', '无线耳机 QC30耳塞式蓝牙降噪耳麦', 0, '/goods-img/02cf272e-9062-4d4b-8b7f-7058f0472efa.jpg', '/goods-img/02cf272e-9062-4d4b-8b7f-7058f0472efa.jpg', '<p>商品介绍加载中...</p>', 2498, 2498, 10000, '', 0, 0, '2019-09-18 13:21:35', 0, '2019-09-18 13:21:35'),\n(10194, 'Beats Solo3 Wireless', '头戴式 蓝牙无线耳机 手机耳机 游戏耳机 - 桀骜黑红（十周年版） MRQC2PA/A', 0, '/goods-img/af77eaba-fd00-4ec8-b0e6-928372a0741d.jpg', '/goods-img/af77eaba-fd00-4ec8-b0e6-928372a0741d.jpg', '<p>商品介绍加载中...</p>', 2268, 1698, 10000, '', 0, 0, '2019-09-18 13:21:35', 0, '2019-09-18 13:21:35'),\n(10195, '索尼 WH-1000XM3 头戴式耳机', '高解析度无线蓝牙降噪（触控面板 智能降噪 长久续航）黑色', 20, '/goods-img/0dc503b2-90a2-4971-9723-c085a1844b76.jpg', '/goods-img/0dc503b2-90a2-4971-9723-c085a1844b76.jpg', '详情加载中...', 2899, 2599, 10000, '智能降噪 长久续航', 0, 0, '2019-09-18 13:21:35', 0, '2019-09-18 17:42:20'),\n(10196, '雷蛇 Razer 北海巨妖标准版X', '北海巨妖标准版升级款 头戴式游戏耳机 电竞耳麦 7.1 电脑手机耳机 黑色', 0, '/goods-img/0cc81546-1408-4140-af95-0341a7778b6c.jpg', '/goods-img/0cc81546-1408-4140-af95-0341a7778b6c.jpg', '产品信息Product Information 产品规格Product Specifications 品牌介绍Brand Introduction 注意事项Warning & Caution 雷蛇产品在出厂时会进行检测，脚贴及USB接口处如有轻微划痕属于正常测试痕迹。 RAZER关于划痕的注意事项： 以上数据图片均为官方测试环境下结果，因使用环境/设备不同会存在一定的差异，仅供参考，数据请以实际为准！  1. 产品实物与外包装上的SN（序列号）必须一致； 2. 产品外包装不能严重破损，盒内的相关配件要齐全，不能有缺失； 3. 不能有明显的人为破损（表面有明显的人为划痕，使用及存在拆卸的痕迹）； 4. 防伪标签不得撕开或损毁。 RAZER关于7天无理由退换货的注意事项： ', 349, 299, 10000, '', 0, 0, '2019-09-18 13:21:35', 0, '2019-09-18 13:21:35'),\n(10197, '森海塞尔（Sennheiser）MomentumTrueWireless 真无线蓝牙hifi发烧入耳式耳机 蓝牙5.0', '黑色', 0, '/goods-img/768e79e1-e875-4691-855d-262346451d22.jpg', '/goods-img/768e79e1-e875-4691-855d-262346451d22.jpg', '聆听带来改变 真     无     线     蓝     牙     HiFi     耳     机 MOMENTUM 真无线 懂你所需 全新的 MOMENTUM 真无线耳机，高品质的声音质量传承 MOMENTUM 品质，成为一款具有重要技术成就的新产品。 这款性能优异的蓝牙耳机融合音频质量、佩戴舒适性和精致设计及工艺。 全新的 MOMENTUM 透明聆听功能 防水防泼溅 电池使用时长 （4+8小时） 精雕细琢 经典优雅 高品质声音质量 智能降噪 智能触控操作 支持蓝牙5.0技术 智能触控操作 支持蓝牙 5.0技术 MOMENTUM真无线耳机采用Sennheiser发烧级别7毫米动圈驱动单元，可确保饱满的立体声效果，带来高保真音质，为苛刻的听者带来出色的高保真度。 高品质声音质量 两侧触摸区域都有单独的控制功能，您可以轻松使用右耳耳机语音访问智能助手（如苹果 Siri或Google智能助手）。 轻轻点击或滑动触摸界面，使用自然语音命令即可播放音乐、接听电话。 支持蓝牙5.0技术及编解码技术（包括AAC、Qualcomm apt-XTM和apt-X低延迟），这款耳机带来出众的连接稳定性和音频流畅性。 真正的无线体验 轻松适配周围环境 MOMENTUM 真无线耳机让你更好地感知外部环境，透明聆听让你能听到周围的环境声，从而更好地感知周围的环境，不需要摘掉耳机就能融入到自然的交谈之中。甚至在嘈杂的环境中，电话呼叫和语音交互也能够通过双话筒波束成形技术得以实现。 智能交互 通过自动开启/关闭和智能暂停功能，可以检测到耳机何时被收起来或者不使用，从而节约能源。 你的世界由你把控 通过双击右耳耳机开/关透明聆听功能 打开透明聆听=接收周围环境音 关闭透明聆听=物理降噪模式，不接收周围音 不需要摘掉耳机就可轻松地与周围人进行交谈。 4种尺寸的耳垫可选，均符合人体工程学设计，防水防泼溅，能够满足用户舒适佩戴的需求。 个性定制舒适体验 MOMENTUM真无线拥有4小时电池续航时间，可通过其带有集成电源的小巧耳机盒进行充电，从而享受长达12（4+8）小时的全天聆听乐趣，并满足未来所需。 镀金充电接触点 可磁性吸附到充电盒上 高保真7毫米动圈驱动单元 带来出色的声音重放 金属镭射表面 具有触控功能 多色 LED指示灯 用于语音信号拾取和透明聆听功能的话筒 舒适的入耳式 硅胶耳垫 便捷充电盒持久续航 注重细节、富于美感，这款小巧、 靓丽而轻盈的耳机是技术与艺术的 结合。它既是声音重放技术的成就，更是你耳畔精美的配饰。 质感黑色外壳，闪烁的金属镭射表面，镀金的充电接触点——时尚与功能融合于标志性的设计之中，带来优雅和实用感。 Sennheiser智能控制 MOMENTUM 真无线耳机提供了更为智能和个性化的体验，可以通过新款Sennheiser智能控制应用进行优化，根据个人喜好，利用内置音频EQ对声音进行微调。免费下载，兼容iOS 版本 11.0 及以上版本和Android 版本 7.0 及以上版本 ，简便直观的控制界面，为您的耳机提供个性化的配置和升级等功能。 APP 下载方法 Android 版本 7.0 及以上版本 打开链接下载APP https://share.weiyun.com/54byqjn iOS 版本 11.0 及以上版本 打开APP Store搜索 Sennheiser smart control 下载APP', 2399, 2399, 10000, '', 0, 0, '2019-09-18 13:21:35', 0, '2019-09-18 13:21:35'),\n(10198, 'Bose SoundSport Free', '真无线蓝牙耳机--黑色 运动耳机 防掉落耳塞', 0, '/goods-img/d3370c50-e853-4546-a032-35073eb192ff.jpg', '/goods-img/d3370c50-e853-4546-a032-35073eb192ff.jpg', '<p>商品介绍加载中...</p>', 1699, 1699, 10000, '', 0, 0, '2019-09-18 13:21:35', 0, '2019-09-18 13:21:35'),\n(10199, '华为原装降噪有线手机耳机Mate9 10P9P10Plus荣耀V9V10PlayNova2s9i8x 【送耳机收纳包】AM115半入耳式耳机-经典热卖款', '新蜂精选', 0, '/goods-img/0cff5ace-7ab9-43a7-91fe-fb3550829577.jpg', '/goods-img/0cff5ace-7ab9-43a7-91fe-fb3550829577.jpg', '详情加载中...', 99, 39, 10000, '', 0, 0, '2019-09-18 13:21:35', 0, '2019-09-18 13:21:35'),\n(10200, 'Apple 采用Lightning/闪电接头的 EarPods', '耳机', 0, '/goods-img/7b8bcf01-0abe-4155-b1f4-e57a6b8fc36a.jpg', '/goods-img/7b8bcf01-0abe-4155-b1f4-e57a6b8fc36a.jpg', '详情加载中...', 223, 223, 10000, '', 0, 0, '2019-09-18 13:21:35', 0, '2019-09-18 13:21:35'),\n(10201, '迪奥（Dior）烈艳蓝金唇膏滋润999# 3.5g 经典正红色', '(口红 保湿滋润 气质显白 不挑皮) （新老包装随机）', 0, '/goods-img/6b0bd268-40b1-4abf-a19b-95df7cb4d722.jpg', '/goods-img/6b0bd268-40b1-4abf-a19b-95df7cb4d722.jpg', '<p>商品介绍加载中...</p>', 500, 315, 10000, '', 0, 0, '2019-09-18 13:24:47', 0, '2019-09-18 13:24:47'),\n(10202, '迪奥（Dior）烈艳蓝金唇膏-哑光999# 3.5g 传奇红（口红', '雾面质地 显色持久 显白 正红色 李佳琦推荐）', 86, '/goods-img/d8d4ac7e-7189-459a-aef2-7116f723cb0b.jpg', '/goods-img/d8d4ac7e-7189-459a-aef2-7116f723cb0b.jpg', '详情加载中...', 400, 315, 10000, '', 0, 0, '2019-09-18 13:24:47', 0, '2019-09-18 13:24:47'),\n(10203, '海囤全球 魅可（MAC)经典唇膏 子弹头口红3g', 'Chili 秀智色/小辣椒色', 86, '/goods-img/18aca3b8-d024-47d3-a971-fb51d374b1ae.jpg', '/goods-img/18aca3b8-d024-47d3-a971-fb51d374b1ae.jpg', '详情加载中...', 170, 155, 10000, '', 0, 0, '2019-09-18 13:24:47', 0, '2019-09-18 13:24:47'),\n(10204, '卡姿兰（Carslan）轻甜唇爱随心盒1.4g*4(13#暧昧 16#炽烈 18#嫉妒', '19#欲望 唇盒 口红 七夕礼物 情人节礼物)', 0, '/goods-img/44c8198e-f63a-45e0-8eff-789338de65f8.jpg', '/goods-img/44c8198e-f63a-45e0-8eff-789338de65f8.jpg', '关联销售入口 1 (1) 商品介绍加载中...', 99, 89, 10000, '', 0, 0, '2019-09-18 13:24:47', 0, '2019-09-18 13:24:47'),\n(10205, '【联名限量版】MANSLY口红套装中国风口红情人节女朋友生日礼物唇釉彩妆女磁扣锦绣红妆口红礼盒彩妆 锦绣红妆口红礼盒（6支）', '新蜂精选', 86, '/goods-img/c081314e-8f67-44f9-a27e-aad6c3f29343.jpg', '/goods-img/c081314e-8f67-44f9-a27e-aad6c3f29343.jpg', '<p>商品介绍加载中...</p>', 295, 295, 10000, '', 0, 0, '2019-09-18 13:24:47', 0, '2019-09-18 13:24:47'),\n(10206, '迪奥（Dior）滋润999礼盒套装（烈艳蓝金999#3.5g 经典正红色+香氛小样1ml*3+礼盒）（小样和礼盒款式随机）', '新蜂精选', 0, '/goods-img/39c69481-6d13-4d84-bc1e-7dca612667f0.jpg', '/goods-img/39c69481-6d13-4d84-bc1e-7dca612667f0.jpg', '<p>商品介绍加载中...</p>', 379, 379, 10000, '', 0, 0, '2019-09-18 13:24:47', 0, '2019-09-18 13:24:47'),\n(10207, '圣罗兰（YSL）莹亮纯魅唇膏12#（圆管口红）4.5g 斩男色', '新蜂精选', 86, '/goods-img/b4335e82-c9e1-4264-92e4-e324a601fedb.jpg', '/goods-img/b4335e82-c9e1-4264-92e4-e324a601fedb.jpg', '详情加载中...', 320, 320, 10000, '', 0, 0, '2019-09-18 13:24:47', 0, '2019-09-18 13:24:47'),\n(10208, '圣罗兰（YSL）纯口红1#（正红色）3.8g', '新蜂精选', 86, '/goods-img/57d0bf26-0a0c-4027-8a2b-deeaa29905ee.jpg', '/goods-img/57d0bf26-0a0c-4027-8a2b-deeaa29905ee.jpg', '详情加载中...', 350, 320, 10000, '', 0, 0, '2019-09-18 13:24:47', 0, '2019-09-18 13:24:47'),\n(10209, '纪梵希高定香榭天鹅绒唇膏306#(小羊皮口红 法式红 雾面哑光', '持久锁色）新老包装随机发货', 86, '/goods-img/f30bd8cb-aadd-43aa-8615-2c4795ee7f5f.jpg', '/goods-img/f30bd8cb-aadd-43aa-8615-2c4795ee7f5f.jpg', '详情加载中...', 355, 355, 10000, '', 0, 0, '2019-09-18 13:24:47', 0, '2019-09-18 13:24:47'),\n(10210, '【联名款】MANSLY口红套装红鸾心动口红礼盒中国风开运红情人节女朋友生日礼物唇釉颐和园同款彩妆口红 红鸾心动口红礼盒（6支）', '新蜂精选', 86, '/goods-img/f128ad98-fe4d-4264-96e3-6393b6cc98f1.jpg', '/goods-img/f128ad98-fe4d-4264-96e3-6393b6cc98f1.jpg', '<p>商品介绍加载中...</p>', 195, 195, 10000, '', 0, 0, '2019-09-18 13:24:47', 0, '2019-09-18 13:24:47'),\n(10211, '海囤全球 迪奥（Dior）烈艳蓝金唇膏 口红', '3.5g 999号 正红色', 86, '/goods-img/8fcdb86b-e826-4c1b-af3c-33a9d590c4b0.jpg', '/goods-img/8fcdb86b-e826-4c1b-af3c-33a9d590c4b0.jpg', '详情加载中...', 410, 258, 10000, '', 0, 0, '2019-09-18 13:24:47', 0, '2019-09-18 13:24:47'),\n(10212, '圣罗兰（YSL）纯口红13#（正橘色）3.8g', '新蜂精选', 86, '/goods-img/53a4a428-8ca2-4d19-937d-15d18f324237.jpg', '/goods-img/53a4a428-8ca2-4d19-937d-15d18f324237.jpg', '详情加载中...', 320, 320, 10000, '', 0, 0, '2019-09-18 13:24:47', 0, '2019-09-18 13:24:47'),\n(10213, '海囤全球 魅可（MAC)磨砂系列 雾面丝绒哑光子弹头口红', '3g 316 devoted to chili 泫雅色', 86, '/goods-img/2da55bd1-046f-4ac2-b1b9-56ab00bb9db1.jpg', '/goods-img/2da55bd1-046f-4ac2-b1b9-56ab00bb9db1.jpg', '详情加载中...', 249, 165, 10000, '', 0, 0, '2019-09-18 13:24:47', 0, '2019-09-18 13:24:47'),\n(10214, '【情人礼物】香奈儿Chanel 口红/唇膏可可小姐水亮/丝绒系列润唇保湿口红配玫瑰花礼盒 丝绒系列', '43#斩男色', 86, '/goods-img/247722ea-c87a-4283-806c-bc9fe57f2253.jpg', '/goods-img/247722ea-c87a-4283-806c-bc9fe57f2253.jpg', '详情加载中...', 299, 298, 10000, '', 0, 0, '2019-09-18 13:24:47', 0, '2019-09-18 13:24:47'),\n(10215, '迪奥（Dior）口红礼盒套装（烈艳蓝金唇膏哑光#999 3.5g正红色+香氛小样1ml*3随机+随机礼盒样式）', '新蜂精选', 86, '/goods-img/ab1a0ced-954c-4857-92f4-f7c833d9d54a.jpg', '/goods-img/ab1a0ced-954c-4857-92f4-f7c833d9d54a.jpg', '<p>商品介绍加载中...</p>', 379, 379, 10000, '', 0, 0, '2019-09-18 13:24:47', 0, '2019-09-18 13:24:47'),\n(10216, '圣罗兰（YSL）纯口红52# 3.8g', '新蜂精选', 86, '/goods-img/1eefadae-5f62-4abd-b283-077e7b6d9193.jpg', '/goods-img/1eefadae-5f62-4abd-b283-077e7b6d9193.jpg', '详情加载中...', 340, 320, 10000, '', 0, 0, '2019-09-18 13:24:47', 0, '2019-09-18 13:24:47'),\n(10217, '海囤全球 汤姆福特 TOM', 'FORD TF口红 经典黑金唇膏 3g 16 SCARLET ROUGE 复古番茄红', 0, '/goods-img/da12f5cf-2728-446a-a3bd-b78baf7056ff.jpg', '/goods-img/da12f5cf-2728-446a-a3bd-b78baf7056ff.jpg', '详情加载中...', 429, 375, 10000, '', 0, 0, '2019-09-18 13:24:47', 0, '2019-09-18 13:24:47'),\n(10218, '迪奥（Dior）烈艳蓝金口红唇膏 028# 3.5g', '珊瑚红 (滋润保湿 持久显色 粉嫩少女 摩洛哥王妃 幸运色)', 86, '/goods-img/7030b9b6-b650-4d9d-9446-e27dab8afa1f.jpg', '/goods-img/7030b9b6-b650-4d9d-9446-e27dab8afa1f.jpg', '详情加载中...', 400, 315, 10000, '', 0, 0, '2019-09-18 13:24:47', 0, '2019-09-18 13:24:47'),\n(10219, '迪奥（Dior）烈艳蓝金唇膏520# 3.5g 玫瑰红(口红', '缎光 滋润保湿 长效持妆 玫红色 斩男色 告白色 粉红色)', 86, '/goods-img/96a91f11-e634-4e28-be13-db8b4732463e.jpg', '/goods-img/96a91f11-e634-4e28-be13-db8b4732463e.jpg', '详情加载中...', 360, 315, 10000, '', 0, 0, '2019-09-18 13:24:47', 0, '2019-09-18 13:24:47'),\n(10220, '海囤全球 迪奥（Dior）烈艳蓝金唇膏 口红', '3.5g 999号 哑光-经典正红', 86, '/goods-img/fe048831-384d-46b2-beec-5549f7902c11.jpg', '/goods-img/fe048831-384d-46b2-beec-5549f7902c11.jpg', '详情加载中...', 410, 255, 10000, '', 0, 0, '2019-09-18 13:24:47', 0, '2019-09-18 13:24:47'),\n(10221, '欧莱雅（LOREAL）纷泽滋润唇膏RC301复古魅红3.7g（金管 口红女 滋润显色）', '新蜂精选', 86, '/goods-img/b7495e02-fc4c-417a-8101-ccfc75a5a475.jpg', '/goods-img/b7495e02-fc4c-417a-8101-ccfc75a5a475.jpg', '品牌介绍Brand Description         巴黎欧莱雅通过将科技和美丽的结合，不断谋求创新、研发新的产品配方，以合理的价格，为消费者提供品质的产品和服务。自1907年安全合成染发剂的诞生，如今巴黎欧莱雅的产品已从染发剂扩展到了护肤、彩妆等诸多领域，在中国，巴黎欧莱雅的五大产品线为护肤系列、彩妆系列、家用染发系列、洗护发系列及男士护肤系列。为了将美的产品融于美的文化、艺术、理念，将“从指尖到发梢”的美丽带给全世界的人们，巴黎欧莱雅在全世界范围精心选择各行业明星，组成“梦之队”来见证巴黎欧莱雅的实力，从各个不同的角度来讲述巴黎欧莱雅美丽无疆界的气势，并使“巴黎欧莱雅，你值得拥有！”“Because you are worth it！”的美丽概念成为一种文化！', 135, 99, 10000, '', 0, 0, '2019-09-18 13:24:47', 0, '2019-09-18 13:24:47'),\n(10222, '阿玛尼(Armani) 口红女士唇釉 生日礼物/表白礼物', '红管#405番茄红 【李佳琪推荐omg】', 86, '/goods-img/75fdac25-1cfa-4a9b-957d-805ac706f32c.jpg', '/goods-img/75fdac25-1cfa-4a9b-957d-805ac706f32c.jpg', '<p>商品介绍加载中...</p>', 366, 285, 10000, '', 0, 0, '2019-09-18 13:24:47', 0, '2019-09-18 13:24:47'),\n(10223, '美宝莲（MAYBELLINE）绝色持久唇膏雾感哑光系列R09PM 3.9g（女皇色口红新老包装）', '新蜂精选', 86, '/goods-img/1055e30e-3d98-4dca-8b79-8d0b5a09a37b.jpg', '/goods-img/1055e30e-3d98-4dca-8b79-8d0b5a09a37b.jpg', '<p>商品介绍加载中...</p>', 122, 106, 10000, '', 0, 0, '2019-09-18 13:24:47', 0, '2019-09-18 13:24:47'),\n(10224, '【专柜正品】迪奥999Dior口红唇膏烈艳蓝金 哑光滋润520/888/999送礼礼品套装 烈艳蓝金', '844#橘红色赠礼盒礼袋', 86, '/goods-img/7b52a7bc-0ecf-41c4-b079-d162511c9530.jpg', '/goods-img/7b52a7bc-0ecf-41c4-b079-d162511c9530.jpg', '<p>商品介绍加载中...</p>', 339, 260, 10000, '', 0, 0, '2019-09-18 13:24:47', 0, '2019-09-18 13:24:47'),\n(10225, '迪奥（Dior）烈艳蓝金唇膏滋润999# 3.5g 经典正红色', '(口红 保湿滋润 气质显白 不挑皮) （新老包装随机）', 0, '/goods-img/bb05b83f-bb91-4300-b78f-23986ba8c0dd.jpg', '/goods-img/bb05b83f-bb91-4300-b78f-23986ba8c0dd.jpg', '<p>商品介绍加载中...</p>', 500, 315, 10000, '', 0, 0, '2019-09-18 13:25:08', 0, '2019-09-18 13:25:08'),\n(10226, '迪奥（Dior）烈艳蓝金唇膏-哑光999# 3.5g 传奇红（口红', '雾面质地 显色持久 显白 正红色 李佳琦推荐）', 86, '/goods-img/67280dcf-bf32-49c1-b99b-9d86bb2ffaac.jpg', '/goods-img/67280dcf-bf32-49c1-b99b-9d86bb2ffaac.jpg', '详情加载中...', 400, 315, 10000, '', 0, 0, '2019-09-18 13:25:08', 0, '2019-09-18 13:25:08'),\n(10227, '海囤全球 魅可（MAC)经典唇膏 子弹头口红3g', 'Chili 秀智色/小辣椒色', 86, '/goods-img/2b678c5d-820c-4174-bc0c-5a65ff9501b6.jpg', '/goods-img/2b678c5d-820c-4174-bc0c-5a65ff9501b6.jpg', '详情加载中...', 170, 155, 10000, '', 0, 0, '2019-09-18 13:25:08', 0, '2019-09-18 13:25:08'),\n(10228, '卡姿兰（Carslan）轻甜唇爱随心盒1.4g*4(13#暧昧 16#炽烈 18#嫉妒', '19#欲望 唇盒 口红 七夕礼物 情人节礼物)', 0, '/goods-img/3f513cd6-bb5f-407d-8550-24550873d83b.jpg', '/goods-img/3f513cd6-bb5f-407d-8550-24550873d83b.jpg', '关联销售入口 1 (1) 商品介绍加载中...', 99, 89, 10000, '', 0, 0, '2019-09-18 13:25:08', 0, '2019-09-18 13:25:08'),\n(10229, '【联名限量版】MANSLY口红套装中国风口红情人节女朋友生日礼物唇釉彩妆女磁扣锦绣红妆口红礼盒彩妆 锦绣红妆口红礼盒（6支）', '新蜂精选', 86, '/goods-img/d82ba7f0-6c92-4254-bfb2-71b3f8b1dfda.jpg', '/goods-img/d82ba7f0-6c92-4254-bfb2-71b3f8b1dfda.jpg', '<p>商品介绍加载中...</p>', 295, 295, 10000, '', 0, 0, '2019-09-18 13:25:08', 0, '2019-09-18 13:25:08'),\n(10230, '迪奥（Dior）滋润999礼盒套装（烈艳蓝金999#3.5g 经典正红色+香氛小样1ml*3+礼盒）（小样和礼盒款式随机）', '新蜂精选', 0, '/goods-img/f6b1195a-3231-4e81-a676-866ee838748f.jpg', '/goods-img/f6b1195a-3231-4e81-a676-866ee838748f.jpg', '<p>商品介绍加载中...</p>', 379, 379, 10000, '', 0, 0, '2019-09-18 13:25:08', 0, '2019-09-18 13:25:08'),\n(10231, '圣罗兰（YSL）莹亮纯魅唇膏12#（圆管口红）4.5g 斩男色', '新蜂精选', 86, '/goods-img/359bb052-5fea-4390-bbe6-4cb9e1c19273.jpg', '/goods-img/359bb052-5fea-4390-bbe6-4cb9e1c19273.jpg', '详情加载中...', 320, 320, 10000, '', 0, 0, '2019-09-18 13:25:08', 0, '2019-09-18 13:25:08'),\n(10232, '圣罗兰（YSL）纯口红1#（正红色）3.8g', '新蜂精选', 86, '/goods-img/a42498e5-d912-447b-9360-0659d2d55c42.jpg', '/goods-img/a42498e5-d912-447b-9360-0659d2d55c42.jpg', '详情加载中...', 350, 320, 10000, '', 0, 0, '2019-09-18 13:25:08', 0, '2019-09-18 13:25:08'),\n(10233, '纪梵希高定香榭天鹅绒唇膏306#', '(小羊皮口红 法式红 雾面哑光 持久锁色）新老包装随机发货', 86, '/goods-img/04949c0e-87df-445b-96dd-29e7fc69f734.jpg', '/goods-img/04949c0e-87df-445b-96dd-29e7fc69f734.jpg', '详情加载中...', 355, 355, 10000, '雾面哑光 持久锁色', 0, 0, '2019-09-18 13:25:08', 0, '2019-09-18 17:40:58'),\n(10234, '【联名款】MANSLY口红套装红鸾心动口红礼盒中国风开运红情人节女朋友生日礼物唇釉颐和园同款彩妆口红 红鸾心动口红礼盒（6支）', '新蜂精选', 86, '/goods-img/a9cd71ad-2db0-4876-9ead-c51233040220.jpg', '/goods-img/a9cd71ad-2db0-4876-9ead-c51233040220.jpg', '<p>商品介绍加载中...</p>', 195, 195, 10000, '', 0, 0, '2019-09-18 13:25:08', 0, '2019-09-18 13:25:08'),\n(10235, '海囤全球 迪奥（Dior）烈艳蓝金唇膏 口红', '3.5g 999号 正红色', 86, '/goods-img/49d2acf7-55e5-4293-a7da-5929740e1168.jpg', '/goods-img/49d2acf7-55e5-4293-a7da-5929740e1168.jpg', '详情加载中...', 410, 258, 10000, '', 0, 0, '2019-09-18 13:25:08', 0, '2019-09-18 13:25:08'),\n(10236, '圣罗兰（YSL）纯口红13#（正橘色）3.8g', '新蜂精选', 86, '/goods-img/b0142d40-6adb-4d64-b5b2-6e4a34656990.jpg', '/goods-img/b0142d40-6adb-4d64-b5b2-6e4a34656990.jpg', '详情加载中...', 320, 320, 10000, '', 0, 0, '2019-09-18 13:25:08', 0, '2019-09-18 13:25:08'),\n(10237, 'MAC 雾面丝绒哑光子弹头口红', '磨砂系列 3g 316 devoted to chili 泫雅色', 86, '/goods-img/1930d79b-88bd-4c5c-8510-0697c9ad2578.jpg', '/goods-img/1930d79b-88bd-4c5c-8510-0697c9ad2578.jpg', '详情加载中...', 249, 165, 10000, '雾面丝绒哑光', 0, 0, '2019-09-18 13:25:08', 0, '2019-09-18 17:41:42'),\n(10238, '【情人礼物】香奈儿Chanel 口红/唇膏可可小姐水亮/丝绒系列润唇保湿口红配玫瑰花礼盒 丝绒系列', '43#斩男色', 86, '/goods-img/70219912-838c-487b-8c3c-761b00de80e9.jpg', '/goods-img/70219912-838c-487b-8c3c-761b00de80e9.jpg', '详情加载中...', 299, 298, 10000, '', 0, 0, '2019-09-18 13:25:08', 0, '2019-09-18 13:25:08'),\n(10239, '迪奥（Dior）口红礼盒套装（烈艳蓝金唇膏哑光#999 3.5g正红色+香氛小样1ml*3随机+随机礼盒样式）', '新蜂精选', 86, '/goods-img/cbce65ee-28b3-4822-895a-38243ee506e7.jpg', '/goods-img/cbce65ee-28b3-4822-895a-38243ee506e7.jpg', '<p>商品介绍加载中...</p>', 379, 379, 10000, '', 0, 0, '2019-09-18 13:25:08', 0, '2019-09-18 13:25:08'),\n(10240, '圣罗兰（YSL）纯口红52# 3.8g', '新蜂精选', 86, '/goods-img/abff57bf-247b-4881-9589-e1336049c3ba.jpg', '/goods-img/abff57bf-247b-4881-9589-e1336049c3ba.jpg', '详情加载中...', 340, 320, 10000, '', 0, 0, '2019-09-18 13:25:08', 0, '2019-09-18 13:25:08'),\n(10241, '海囤全球 汤姆福特 TOM', 'FORD TF口红 经典黑金唇膏 3g 16 SCARLET ROUGE 复古番茄红', 0, '/goods-img/ba0cd1e9-cded-427b-8692-e8e2a0d00e9f.jpg', '/goods-img/ba0cd1e9-cded-427b-8692-e8e2a0d00e9f.jpg', '详情加载中...', 429, 375, 10000, '', 0, 0, '2019-09-18 13:25:08', 0, '2019-09-18 13:25:08'),\n(10242, '迪奥（Dior）烈艳蓝金口红唇膏 028# 3.5g', '珊瑚红 (滋润保湿 持久显色 粉嫩少女 摩洛哥王妃 幸运色)', 86, '/goods-img/ea87e780-ed4c-447d-bd22-e88e4742721e.jpg', '/goods-img/ea87e780-ed4c-447d-bd22-e88e4742721e.jpg', '详情加载中...', 400, 315, 10000, '', 0, 0, '2019-09-18 13:25:08', 0, '2019-09-18 13:25:08'),\n(10243, '迪奥（Dior）烈艳蓝金唇膏520# 3.5g 玫瑰红(口红', '缎光 滋润保湿 长效持妆 玫红色 斩男色 告白色 粉红色)', 86, '/goods-img/dde0b711-58b0-49fb-972c-7a71d6ec30f1.jpg', '/goods-img/dde0b711-58b0-49fb-972c-7a71d6ec30f1.jpg', '详情加载中...', 360, 315, 10000, '', 0, 0, '2019-09-18 13:25:08', 0, '2019-09-18 13:25:08'),\n(10244, '海囤全球 迪奥（Dior）烈艳蓝金唇膏 口红', '3.5g 999号 哑光-经典正红', 86, '/goods-img/79247aeb-2903-47b0-a711-ac94e22ddd54.jpg', '/goods-img/79247aeb-2903-47b0-a711-ac94e22ddd54.jpg', '详情加载中...', 410, 255, 10000, '', 0, 0, '2019-09-18 13:25:08', 0, '2019-09-18 13:25:08'),\n(10245, '欧莱雅（LOREAL）纷泽滋润唇膏RC301复古魅红3.7g（金管 口红女 滋润显色）', '新蜂精选', 86, '/goods-img/3b420562-b449-448d-ae50-e20aab136e1b.jpg', '/goods-img/3b420562-b449-448d-ae50-e20aab136e1b.jpg', '品牌介绍Brand Description         巴黎欧莱雅通过将科技和美丽的结合，不断谋求创新、研发新的产品配方，以合理的价格，为消费者提供品质的产品和服务。自1907年安全合成染发剂的诞生，如今巴黎欧莱雅的产品已从染发剂扩展到了护肤、彩妆等诸多领域，在中国，巴黎欧莱雅的五大产品线为护肤系列、彩妆系列、家用染发系列、洗护发系列及男士护肤系列。为了将美的产品融于美的文化、艺术、理念，将“从指尖到发梢”的美丽带给全世界的人们，巴黎欧莱雅在全世界范围精心选择各行业明星，组成“梦之队”来见证巴黎欧莱雅的实力，从各个不同的角度来讲述巴黎欧莱雅美丽无疆界的气势，并使“巴黎欧莱雅，你值得拥有！”“Because you are worth it！”的美丽概念成为一种文化！', 135, 99, 10000, '', 0, 0, '2019-09-18 13:25:08', 0, '2019-09-18 13:25:08'),\n(10246, '阿玛尼(Armani) 口红女士唇釉 生日礼物/表白礼物', '红管#405番茄红 【李佳琪推荐omg】', 86, '/goods-img/db866c68-e526-42cf-a0b5-520254f30b76.jpg', '/goods-img/db866c68-e526-42cf-a0b5-520254f30b76.jpg', '<p>商品介绍加载中...</p>', 366, 285, 10000, '', 0, 0, '2019-09-18 13:25:08', 0, '2019-09-18 13:25:08'),\n(10247, '美宝莲（MAYBELLINE）绝色持久唇膏雾感哑光系列R09PM 3.9g（女皇色口红新老包装）', '新蜂精选', 86, '/goods-img/63d0a187-627d-4edb-870e-717969ad2bd0.jpg', '/goods-img/63d0a187-627d-4edb-870e-717969ad2bd0.jpg', '<p>商品介绍加载中...</p>', 122, 106, 10000, '', 0, 0, '2019-09-18 13:25:08', 0, '2019-09-18 13:25:08'),\n(10248, '【专柜正品】迪奥999Dior口红唇膏烈艳蓝金 哑光滋润520/888/999送礼礼品套装 烈艳蓝金', '844#橘红色赠礼盒礼袋', 86, '/goods-img/9822b4a5-9fd2-435b-bdd1-5bbcdc6fdfdf.jpg', '/goods-img/9822b4a5-9fd2-435b-bdd1-5bbcdc6fdfdf.jpg', '<p>商品介绍加载中...</p>', 339, 260, 10000, '', 0, 0, '2019-09-18 13:25:08', 0, '2019-09-18 13:25:08'),\n(10249, 'Apple Macbook Air 13.3 ', 'Core i5 8G 128G SSD 笔记本电脑 轻薄本 银色 MQD32CH/A', 0, '/goods-img/2d827a7e-fb30-493d-840a-cb21766814fd.jpg', '/goods-img/2d827a7e-fb30-493d-840a-cb21766814fd.jpg', '商品介紹頁面素材由Apple提供', 6928, 5999, 10000, '', 0, 0, '2019-09-18 13:25:52', 0, '2019-09-18 13:25:52'),\n(10250, 'Apple 2019款 Macbook Pro 13.3', '【带触控栏】八代i5 8G 256G RP645显卡 银色 苹果笔记本电脑 MUHR2CH/A', 0, '/goods-img/465936e0-40ad-4968-b868-4bea20c7beec.jpg', '/goods-img/465936e0-40ad-4968-b868-4bea20c7beec.jpg', '商品介紹頁面素材由Apple提供', 11499, 10699, 10000, '', 0, 0, '2019-09-18 13:25:52', 0, '2019-09-18 13:25:52'),\n(10251, 'Apple MacBook Air 13.3 ', 'Core i5 8G 256G SSD 银色 笔记本电脑 轻薄本 Z0UU00056原MQD42CH/A', 0, '/goods-img/a4132109-8f18-4399-affd-a81fad6902c8.jpg', '/goods-img/a4132109-8f18-4399-affd-a81fad6902c8.jpg', '商品介紹頁面素材由Apple提供', 7999, 7168, 10000, '', 0, 0, '2019-09-18 13:25:52', 0, '2019-09-18 13:25:52'),\n(10252, 'Apple 2019款 MacBook Air 13.3 ', 'Retina屏 八代i5 8G 256G SSD 银色 笔记本电脑 轻薄本 MVFL2CH/A', 0, '/goods-img/65b62668-3be5-48b0-a40c-bd05826a38c2.jpg', '/goods-img/65b62668-3be5-48b0-a40c-bd05826a38c2.jpg', '商品介紹頁面素材由Apple提供', 10399, 9799, 10000, '', 0, 0, '2019-09-18 13:25:52', 0, '2019-09-18 13:25:52'),\n(10253, 'Apple 2019款 MacBook Air 13.3 ', 'Retina屏 八代i5 8G 128G SSD 深空灰 笔记本电脑 轻薄本 MVFH2CH/A', 0, '/goods-img/cb899039-a705-473d-9785-f245a6ed4d89.jpg', '/goods-img/cb899039-a705-473d-9785-f245a6ed4d89.jpg', '商品介紹頁面素材由Apple提供', 8899, 8499, 10000, '', 0, 0, '2019-09-18 13:25:52', 0, '2019-09-18 13:25:52'),\n(10254, 'Apple 2019款 MacBook Air 13.3 ', 'Retina屏 八代i5 8G 128G SSD 银色 笔记本电脑 轻薄本 MVFK2CH/A', 0, '/goods-img/7810bc9d-236f-4386-a0ef-45a831b49bf2.jpg', '/goods-img/7810bc9d-236f-4386-a0ef-45a831b49bf2.jpg', '商品介紹頁面素材由Apple提供', 8899, 8499, 10000, '再次倾心', 0, 0, '2019-09-18 13:25:52', 0, '2019-09-18 13:25:52'),\n(10255, 'Apple MacBook Air 13.3 ', '| 定制升级 Core i7 8G 128G SSD硬盘 银色 笔记本电脑 轻薄本 Z0UU00022', 0, '/goods-img/53019ece-5e61-4de9-8eac-e1f00a4ef7e3.jpg', '/goods-img/53019ece-5e61-4de9-8eac-e1f00a4ef7e3.jpg', '<p>商品介绍加载中...</p>', 8056, 6968, 10000, '', 0, 0, '2019-09-18 13:25:52', 0, '2019-09-18 13:25:52'),\n(10256, 'Apple 2019款 Macbook Pro 13.3', '【带触控栏】八代i5 8G 256G RP645显卡 深空灰 苹果笔记本电脑 MUHP2CH/A', 0, '/goods-img/f08404a7-0459-4289-aa60-dd1735c95bbe.jpg', '/goods-img/f08404a7-0459-4289-aa60-dd1735c95bbe.jpg', '商品介紹頁面素材由Apple提供', 11499, 10699, 10000, '', 0, 0, '2019-09-18 13:25:52', 0, '2019-09-18 13:25:52'),\n(10257, '苹果（Apple） MacBook Air', '苹果笔记本电脑 13.3英寸轻薄本 购买套餐更实惠 2017款/i5/8GB/128GB/D32', 0, '/goods-img/83740c28-473c-4954-b0dc-3cadab5a87d1.jpg', '/goods-img/83740c28-473c-4954-b0dc-3cadab5a87d1.jpg', '<p>商品介绍加载中...</p>', 6200, 5488, 10000, '', 0, 0, '2019-09-18 13:25:52', 0, '2019-09-18 13:25:52'),\n(10258, 'Apple 2019款 MacBook Air 13.3 ', 'Retina屏 八代i5 8G 256G SSD 深空灰 笔记本电脑 轻薄本 MVFJ2CH/A', 0, '/goods-img/78957148-4c0c-4194-bc46-7360d7b1aa65.jpg', '/goods-img/78957148-4c0c-4194-bc46-7360d7b1aa65.jpg', '商品介紹頁面素材由Apple提供', 10399, 9799, 10000, '', 0, 0, '2019-09-18 13:25:52', 0, '2019-09-18 13:25:52'),\n(10259, 'Apple 2019新品 Macbook Pro 13.3', '【带触控栏】八代i5 8G 256G 深空灰 笔记本电脑 轻薄本 MV962CH/A', 0, '/goods-img/85787c16-8443-4db0-9cae-a811a20a0832.jpg', '/goods-img/85787c16-8443-4db0-9cae-a811a20a0832.jpg', '商品介紹頁面素材由Apple提供', 13899, 12999, 10000, '', 0, 0, '2019-09-18 13:25:52', 0, '2019-09-18 13:25:52'),\n(10260, 'Apple 2019款 MacBook Air 13.3 ', 'Retina屏 八代i5 8G 256G SSD 金色 苹果笔记本电脑 轻薄本 MVFN2CH/A', 0, '/goods-img/82bdafc6-5828-495e-b77c-21598938b896.jpg', '/goods-img/82bdafc6-5828-495e-b77c-21598938b896.jpg', '商品介紹頁面素材由Apple提供', 10399, 9799, 10000, '', 0, 0, '2019-09-18 13:25:52', 0, '2019-09-18 13:25:52'),\n(10261, 'APPLE 苹果2018年19新款MacBook air笔记本电脑13.3英寸超薄笔记本', '金色 i5/8GB内存/128GB闪存【19新款】', 0, '/goods-img/270cdf75-8a7f-410e-8f2f-8eeba24f0503.jpg', '/goods-img/270cdf75-8a7f-410e-8f2f-8eeba24f0503.jpg', '<p>商品介绍加载中...</p>', 8899, 7888, 10000, '', 0, 0, '2019-09-18 13:25:52', 0, '2019-09-18 13:25:52'),\n(10262, 'Apple 2019新品 Macbook Pro 15.4', '【带触控栏】全新九代六核i7 16G 256G 深空灰 笔记本电脑轻薄本MV902CH/A', 0, '/goods-img/7928eb46-9e1c-420e-a8ab-6c358d01891b.jpg', '/goods-img/7928eb46-9e1c-420e-a8ab-6c358d01891b.jpg', '商品介紹頁面素材由Apple提供', 18199, 17099, 10000, '', 0, 0, '2019-09-18 13:25:52', 0, '2019-09-18 13:25:52'),\n(10263, 'APPLE 苹果MacBook air苹果笔记本电脑13.3英寸超薄笔记本', '标配+防水手提包+苹果原装鼠标版（下单送大礼包） i5+8GB内存+128GB闪存【D32】', 0, '/goods-img/11968b35-9431-4b1c-a648-6ff46945ebf4.jpg', '/goods-img/11968b35-9431-4b1c-a648-6ff46945ebf4.jpg', '<p>商品介绍加载中...</p>', 6988, 5988, 10000, '', 0, 0, '2019-09-18 13:25:52', 0, '2019-09-18 13:25:52'),\n(10264, 'APPLE苹果 MacBook Air13.3英寸轻薄笔记本电脑2017款', '官方标配【购套餐版送大礼包】 i5+8GB内存+128GB闪存【D32】', 0, '/goods-img/fb08ec83-2960-47f7-8679-8b78896c30d5.jpg', '/goods-img/fb08ec83-2960-47f7-8679-8b78896c30d5.jpg', '<p>商品介绍加载中...</p>', 6188, 5488, 10000, '', 0, 0, '2019-09-18 13:25:52', 0, '2019-09-18 13:25:52'),\n(10265, 'Apple 2019款 MacBook Air 13.3 ', 'Retina屏 八代i5 8G 128G SSD 金色 笔记本电脑 轻薄本 MVFM2CH/A', 0, '/goods-img/50748763-c0d6-4e73-80e5-864818fa3246.jpg', '/goods-img/50748763-c0d6-4e73-80e5-864818fa3246.jpg', '商品介紹頁面素材由Apple提供', 8899, 8499, 10000, '', 0, 0, '2019-09-18 13:25:52', 0, '2019-09-18 13:25:52'),\n(10266, 'Apple 2019款 Macbook Pro 13.3', '【带触控栏】八代i5 8G 128G RP645显卡 深空灰 苹果笔记本电脑 MUHN2CH/A', 0, '/goods-img/fe9e33a1-fbd0-4278-931f-825fef4ffb62.jpg', '/goods-img/fe9e33a1-fbd0-4278-931f-825fef4ffb62.jpg', '商品介紹頁面素材由Apple提供', 9999, 9499, 10000, '', 0, 0, '2019-09-18 13:25:52', 0, '2019-09-18 13:25:52'),\n(10267, 'Apple MacBook Air 13.3 ', '定制升级 Core i7 8G 256G SSD硬盘 银色 笔记本电脑 轻薄本 Z0UU0004J', 0, '/goods-img/0340d6b2-54bf-42a2-96f4-f35c5f47bb2d.jpg', '/goods-img/0340d6b2-54bf-42a2-96f4-f35c5f47bb2d.jpg', '商品介紹頁面素材由Apple提供', 9656, 8499, 10000, '', 0, 0, '2019-09-18 13:25:52', 0, '2019-09-18 13:25:52'),\n(10268, 'Apple 2019新品 Macbook Pro 15.4', '【带触控栏】九代八核i9 16G 512G 深空灰 笔记本电脑 轻薄本 MV912CH/A', 0, '/goods-img/33a29216-08d6-445b-b979-12d5de81d634.jpg', '/goods-img/33a29216-08d6-445b-b979-12d5de81d634.jpg', '商品介紹頁面素材由Apple提供', 21399, 20399, 10000, '', 0, 0, '2019-09-18 13:25:52', 0, '2019-09-18 13:25:52'),\n(10269, 'Apple 2019新品 Macbook Pro 13.3', '【带触控栏】八代i5 8G 256G 银色 笔记本电脑 轻薄本 MV992CH/A', 0, '/goods-img/a2afdb6c-69a7-4081-bd09-62174f9f5624.jpg', '/goods-img/a2afdb6c-69a7-4081-bd09-62174f9f5624.jpg', '商品介紹頁面素材由Apple提供  ', 13899, 12999, 10000, '', 0, 0, '2019-09-18 13:25:52', 0, '2019-09-18 13:25:52'),\n(10270, 'Apple Macbook Pro 13.3', '【带触控栏】Core i5 8G 512G SSD 银色 笔记本电脑 轻薄本 MR9V2CH/A', 0, '/goods-img/4da4fa5d-ee2d-4496-9950-e53b102f0e8e.jpg', '/goods-img/4da4fa5d-ee2d-4496-9950-e53b102f0e8e.jpg', '<p>商品介绍加载中...</p>', 14999, 13068, 10000, '', 0, 0, '2019-09-18 13:25:52', 0, '2019-09-18 13:25:52'),\n(10271, 'Apple 2019新品 Macbook Pro 15.4', '【带触控栏】全新九代六核i7 16G 256G 银色 笔记本电脑 轻薄本 MV922CH/A', 0, '/goods-img/49c9f6f8-11c2-4f57-98b9-daf12715b938.jpg', '/goods-img/49c9f6f8-11c2-4f57-98b9-daf12715b938.jpg', '商品介紹頁面素材由Apple提供', 18199, 17099, 10000, '', 0, 0, '2019-09-18 13:25:52', 0, '2019-09-18 13:25:52'),\n(10272, 'Apple 2019新品 Macbook Pro 13.3', '【带触控栏】八代i5 8G 512G 银色 笔记本电脑 轻薄本 MV9A2CH/A', 0, '/goods-img/9dd28614-7a17-4876-8cdd-232caf4154bc.jpg', '/goods-img/9dd28614-7a17-4876-8cdd-232caf4154bc.jpg', '商品介紹頁面素材由Apple提供', 15499, 14499, 10000, '', 0, 0, '2019-09-18 13:25:52', 0, '2019-09-18 13:25:52'),\n(10273, 'Apple 2019新品 Macbook Pro 15.4', '【带触控栏】九代八核i9 16G 512G 银色 笔记本电脑 轻薄本 MV932CH/A', 0, '/goods-img/2dcd61b8-f434-40ee-928f-c6e4ae934db8.jpg', '/goods-img/2dcd61b8-f434-40ee-928f-c6e4ae934db8.jpg', '商品介紹頁面素材由Apple提供', 21399, 20399, 10000, '', 0, 0, '2019-09-18 13:25:52', 0, '2019-09-18 13:25:52'),\n(10274, '【新品首发】苹果Apple MacBook Pro13.3英寸2019新款18/17苹果笔记本电脑', '19款灰色/256G/带bar/MUHP2CH/A', 0, '/goods-img/4dbbfbf1-80c0-4389-a02e-ca19fbeb5340.jpg', '/goods-img/4dbbfbf1-80c0-4389-a02e-ca19fbeb5340.jpg', '<p>商品介绍加载中...</p>', 12580, 10488, 10000, '', 0, 0, '2019-09-18 13:25:52', 0, '2019-09-18 13:25:52'),\n(10275, '【新品首发】苹果Apple MacBook Pro13.3英寸2019新款18/17苹果笔记本电脑', '19款灰色/128G/带bar/MUHN2CH/A', 0, '/goods-img/3b095a66-4001-4c69-9026-2e09139b5f11.jpg', '/goods-img/3b095a66-4001-4c69-9026-2e09139b5f11.jpg', '<p>商品介绍加载中...</p>', 10100, 9088, 10000, '', 0, 0, '2019-09-18 13:25:52', 0, '2019-09-18 13:25:52'),\n(10276, 'Apple 2019新品 Macbook Pro 13.3', '【带触控栏】八代i5 8G 512G 深空灰 苹果笔记本电脑 轻薄本 MV972CH/A', 0, '/goods-img/82fb6b31-1afe-4bcb-a243-5205ed32d3ee.jpg', '/goods-img/82fb6b31-1afe-4bcb-a243-5205ed32d3ee.jpg', '商品介紹頁面素材由Apple提供', 15499, 14499, 10000, '', 0, 0, '2019-09-18 13:25:52', 0, '2019-09-18 13:25:52'),\n(10277, 'Apple Macbook Pro 13.3', '【无触控栏】Core i5 8G 256G SSD 银色 笔记本电脑 轻薄本 MPXU2CH/A', 0, '/goods-img/73a8c7e9-40af-4e0a-9826-5f6374361e61.jpg', '/goods-img/73a8c7e9-40af-4e0a-9826-5f6374361e61.jpg', '<p>商品介绍加载中...</p>', 11299, 10199, 10000, '', 0, 0, '2019-09-18 13:25:52', 0, '2019-09-18 13:25:52'),\n(10278, 'Apple iPhone 11 (A2223)', '64GB 黑色 移动联通电信4G手机 双卡双待', 47, '/goods-img/4755f3e5-257c-424c-a5f4-63908061d6d9.jpg', '/goods-img/4755f3e5-257c-424c-a5f4-63908061d6d9.jpg', '<div id=\"activity_header\" style=\"margin:0px;padding:0px;color:#666666;font-family:tahoma, arial, \" background-color:#ffffff;\"=\"\">\n<div style=\"margin:0px;padding:0px;text-align:center;\">\n\t<br />\n</div>\n\t</div>\n<div id=\"J-detail-content\" style=\"margin:0px;padding:0px;color:#666666;font-family:tahoma, arial, \" background-color:#ffffff;\"=\"\">\n\t<div style=\"margin:0px auto;padding:0px;\">\n\t\t<img class=\"\" src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/iphone-0.jpg\" /><img border=\"0\" class=\"\" src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/iphone-11-1.png\" /><img border=\"0\" class=\"\" src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/iphone-11-2.png\" />\n\t</div>\n</div>', 5499, 5499, 10000, '2019 新品', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 14:28:39'),\n(10279, 'Apple iPhone 11 (A2223)', '128GB 白色 移动联通电信4G手机 双卡双待', 47, '/goods-img/a0d09f94-9c46-4ee1-aaef-dfd132e7543e.jpg', '/goods-img/a0d09f94-9c46-4ee1-aaef-dfd132e7543e.jpg', '<div id=\"activity_header\" style=\"margin:0px;padding:0px;color:#666666;font-family:tahoma, arial, \" background-color:#ffffff;\"=\"\">\n<div style=\"margin:0px;padding:0px;text-align:center;\">\n\t<br />\n</div>\n\t</div>\n<div id=\"J-detail-content\" style=\"margin:0px;padding:0px;color:#666666;font-family:tahoma, arial, \" background-color:#ffffff;\"=\"\">\n\t<div style=\"margin:0px auto;padding:0px;\">\n\t\t<img class=\"\" src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/iphone-0.jpg\" /><img border=\"0\" class=\"\" src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/iphone-11-1.png\" /><img border=\"0\" class=\"\" src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/iphone-11-2.png\" />\n\t</div>\n</div>', 5999, 5999, 10000, '2019 新品', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 14:35:30'),\n(10280, 'Apple iPhone 11 (A2223)', '128GB 紫色 移动联通电信4G手机 双卡双待', 47, '/goods-img/8dfe8ea9-2279-4132-a72b-4f8a52d002a4.jpg', '/goods-img/8dfe8ea9-2279-4132-a72b-4f8a52d002a4.jpg', '<div id=\"activity_header\" style=\"margin:0px;padding:0px;color:#666666;font-family:tahoma, arial, \" background-color:#ffffff;\"=\"\">\n<div style=\"margin:0px;padding:0px;text-align:center;\">\n\t<br />\n</div>\n\t</div>\n<div id=\"J-detail-content\" style=\"margin:0px;padding:0px;color:#666666;font-family:tahoma, arial, \" background-color:#ffffff;\"=\"\">\n\t<div style=\"margin:0px auto;padding:0px;\">\n\t\t<img class=\"\" src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/iphone-0.jpg\" /><img border=\"0\" class=\"\" src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/iphone-11-1.png\" /><img border=\"0\" class=\"\" src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/iphone-11-2.png\" />\n\t</div>\n</div>', 5999, 5999, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10281, 'Apple iPhone 11 (A2223)', '64GB 红色 移动联通电信4G手机 双卡双待', 47, '/goods-img/7368f461-fd0a-4f37-bc8b-31d8ad3d6e95.jpg', '/goods-img/7368f461-fd0a-4f37-bc8b-31d8ad3d6e95.jpg', '<div id=\"activity_header\" style=\"margin:0px;padding:0px;color:#666666;font-family:tahoma, arial, \" background-color:#ffffff;\"=\"\">\n<div style=\"margin:0px;padding:0px;text-align:center;\">\n\t<br />\n</div>\n\t</div>\n<div id=\"J-detail-content\" style=\"margin:0px;padding:0px;color:#666666;font-family:tahoma, arial, \" background-color:#ffffff;\"=\"\">\n\t<div style=\"margin:0px auto;padding:0px;\">\n\t\t<img class=\"\" src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/iphone-0.jpg\" /><img border=\"0\" class=\"\" src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/iphone-11-1.png\" /><img border=\"0\" class=\"\" src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/iphone-11-2.png\" />\n\t</div>\n</div>', 5499, 5499, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10282, 'Apple iPhone 11 (A2223)', '64GB 黄色 移动联通电信4G手机 双卡双待', 47, '/goods-img/cea55d85-b11e-4639-88ab-9403b05ce1e8.jpg', '/goods-img/cea55d85-b11e-4639-88ab-9403b05ce1e8.jpg', '<div id=\"activity_header\" style=\"margin:0px;padding:0px;color:#666666;font-family:tahoma, arial, \" background-color:#ffffff;\"=\"\">\n<div style=\"margin:0px;padding:0px;text-align:center;\">\n\t<br />\n</div>\n\t</div>\n<div id=\"J-detail-content\" style=\"margin:0px;padding:0px;color:#666666;font-family:tahoma, arial, \" background-color:#ffffff;\"=\"\">\n\t<div style=\"margin:0px auto;padding:0px;\">\n\t\t<img class=\"\" src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/iphone-0.jpg\" /><img border=\"0\" class=\"\" src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/iphone-11-1.png\" /><img border=\"0\" class=\"\" src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/iphone-11-2.png\" />\n\t</div>\n</div>', 5499, 5499, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10283, 'Apple iPhone 11 (A2223)', '256GB 绿色 移动联通电信4G手机 双卡双待', 47, '/goods-img/075a188a-9045-45f0-9c67-1e42e0552aa2.jpg', '/goods-img/075a188a-9045-45f0-9c67-1e42e0552aa2.jpg', '<div id=\"activity_header\" style=\"margin:0px;padding:0px;color:#666666;font-family:tahoma, arial, \" background-color:#ffffff;\"=\"\">\n<div style=\"margin:0px;padding:0px;text-align:center;\">\n\t<br />\n</div>\n\t</div>\n<div id=\"J-detail-content\" style=\"margin:0px;padding:0px;color:#666666;font-family:tahoma, arial, \" background-color:#ffffff;\"=\"\">\n\t<div style=\"margin:0px auto;padding:0px;\">\n\t\t<img class=\"\" src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/iphone-0.jpg\" /><img border=\"0\" class=\"\" src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/iphone-11-1.png\" /><img border=\"0\" class=\"\" src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/iphone-11-2.png\" />\n\t</div>\n</div>', 6799, 6799, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10284, 'Apple iPhone XR (A2108)', '128GB 黑色 移动联通电信4G手机 双卡双待', 47, '/goods-img/23ac3107-6309-40c8-bd28-164eb1186b62.jpg', '/goods-img/23ac3107-6309-40c8-bd28-164eb1186b62.jpg', '<p>商品介绍加载中...</p>', 5599, 5099, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10285, 'Apple iPhone XR (A2108)', '128GB 白色 移动联通电信4G手机 双卡双待', 47, '/goods-img/3f47c376-c603-43fc-bfe5-2daa985ff423.jpg', '/goods-img/3f47c376-c603-43fc-bfe5-2daa985ff423.jpg', '<p>商品介绍加载中...</p>', 5599, 5099, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10286, 'Apple iPhone XR (A2108)', '128GB 红色 移动联通电信4G手机 双卡双待', 47, '/goods-img/56cef3d7-41e6-4aad-825d-a3d423e74dfd.jpg', '/goods-img/56cef3d7-41e6-4aad-825d-a3d423e74dfd.jpg', '<p>商品介绍加载中...</p>', 5599, 5099, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10287, 'Apple iPhone XR (A2108)', '128GB 珊瑚色 移动联通电信4G手机 双卡双待', 47, '/goods-img/c2e3b2e4-1fc8-43f3-b133-6f4eae7faa5d.jpg', '/goods-img/c2e3b2e4-1fc8-43f3-b133-6f4eae7faa5d.jpg', '<p>商品介绍加载中...</p>', 5599, 5199, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10288, 'Apple iPhone XR (A2108)', '128GB 蓝色 移动联通电信4G手机 双卡双待', 47, '/goods-img/2f5079e9-57f3-490a-8d3d-5fd64207939d.jpg', '/goods-img/2f5079e9-57f3-490a-8d3d-5fd64207939d.jpg', '<p>商品介绍加载中...</p>', 5599, 5199, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10289, 'Apple iPhone XR (A2108)', '128GB 黄色 移动联通电信4G手机 双卡双待', 47, '/goods-img/b1259d73-7c5a-4eca-81eb-53a4e9bcc77e.jpg', '/goods-img/b1259d73-7c5a-4eca-81eb-53a4e9bcc77e.jpg', '<p>商品介绍加载中...</p>', 5599, 5199, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10290, 'Apple iPhone 11 Pro', 'Max (A2220) 64GB 暗夜绿色 移动联通电信4G手机 双卡双待', 47, '/goods-img/0656b280-66d9-430b-9d0d-e48bf379d89a.jpg', '/goods-img/0656b280-66d9-430b-9d0d-e48bf379d89a.jpg', '<div id=\"activity_header\" style=\"margin:0px;padding:0px;color:#666666;font-family:tahoma, arial, \" background-color:#ffffff;\"=\"\">\n<div style=\"margin:0px;padding:0px;text-align:center;\">\n\t<br />\n</div>\n\t</div>\n<div id=\"J-detail-content\" style=\"margin:0px;padding:0px;color:#666666;font-family:tahoma, arial, \" background-color:#ffffff;\"=\"\">\n\t<div style=\"margin:0px auto;padding:0px;\">\n\t\t<img class=\"\" src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/iphone-0.jpg\" /><img border=\"0\" class=\"\" src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/iphone-11-1.png\" /><img border=\"0\" class=\"\" src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/iphone-11-2.png\" />\n\t</div>\n</div>', 9599, 9599, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10291, 'Apple iPhone 11 Pro', 'Max (A2220) 256GB 深空灰色 移动联通电信4G手机 双卡双待', 47, '/goods-img/77ce1f09-3900-4eff-8d97-e67fa8193a84.jpg', '/goods-img/77ce1f09-3900-4eff-8d97-e67fa8193a84.jpg', '<div id=\"activity_header\" style=\"margin:0px;padding:0px;color:#666666;font-family:tahoma, arial, \" background-color:#ffffff;\"=\"\">\n<div style=\"margin:0px;padding:0px;text-align:center;\">\n\t<br />\n</div>\n\t</div>\n<div id=\"J-detail-content\" style=\"margin:0px;padding:0px;color:#666666;font-family:tahoma, arial, \" background-color:#ffffff;\"=\"\">\n\t<div style=\"margin:0px auto;padding:0px;\">\n\t\t<img class=\"\" src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/iphone-0.jpg\" /><img border=\"0\" class=\"\" src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/iphone-11-1.png\" /><img border=\"0\" class=\"\" src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/iphone-11-2.png\" />\n\t</div>\n</div>', 10899, 10899, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10292, 'Apple iPhone 11 Pro', 'Max (A2220) 64GB 金色 移动联通电信4G手机 双卡双待', 47, '/goods-img/e45be404-d582-4c1e-80e8-48073327551e.jpg', '/goods-img/e45be404-d582-4c1e-80e8-48073327551e.jpg', '<div id=\"activity_header\" style=\"margin:0px;padding:0px;color:#666666;font-family:tahoma, arial, \" background-color:#ffffff;\"=\"\">\n<div style=\"margin:0px;padding:0px;text-align:center;\">\n\t<br />\n</div>\n\t</div>\n<div id=\"J-detail-content\" style=\"margin:0px;padding:0px;color:#666666;font-family:tahoma, arial, \" background-color:#ffffff;\"=\"\">\n\t<div style=\"margin:0px auto;padding:0px;\">\n\t\t<img class=\"\" src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/iphone-0.jpg\" /><img border=\"0\" class=\"\" src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/iphone-11-1.png\" /><img border=\"0\" class=\"\" src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/iphone-11-2.png\" />\n\t</div>\n</div>', 9599, 9599, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10293, 'Apple iPhone 11 Pro', 'Max (A2220) 512GB 银色 移动联通电信4G手机 双卡双待', 47, '/goods-img/76670f49-4556-40ae-b485-3b25dcdcb636.jpg', '/goods-img/76670f49-4556-40ae-b485-3b25dcdcb636.jpg', '<div id=\"activity_header\" style=\"margin:0px;padding:0px;color:#666666;font-family:tahoma, arial, \" background-color:#ffffff;\"=\"\">\n<div style=\"margin:0px;padding:0px;text-align:center;\">\n\t<br />\n</div>\n\t</div>\n<div id=\"J-detail-content\" style=\"margin:0px;padding:0px;color:#666666;font-family:tahoma, arial, \" background-color:#ffffff;\"=\"\">\n\t<div style=\"margin:0px auto;padding:0px;\">\n\t\t<img class=\"\" src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/iphone-0.jpg\" /><img border=\"0\" class=\"\" src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/iphone-11-1.png\" /><img border=\"0\" class=\"\" src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/iphone-11-2.png\" />\n\t</div>\n</div>', 12699, 12699, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10294, 'Apple iPhone 7 (A1660)', '128G 黑色 移动联通电信4G手机', 47, '/goods-img/101abd40-e9a2-4ab0-9f4e-16569c9dbf82.jpg', '/goods-img/101abd40-e9a2-4ab0-9f4e-16569c9dbf82.jpg', '<p>商品介绍加载中...</p>', 3199, 2949, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10295, 'Apple iPhone 7 (A1660)', '128G 玫瑰金色 移动联通电信4G手机', 47, '/goods-img/6229468b-bcb7-4415-880a-aea3eef4eea2.jpg', '/goods-img/6229468b-bcb7-4415-880a-aea3eef4eea2.jpg', '<p>商品介绍加载中...</p>', 3199, 2929, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10296, 'Apple iPhone 7 (A1660)', '128G 金色 移动联通电信4G手机', 47, '/goods-img/1f5bb955-fbe7-451a-b12c-3e2115c53020.jpg', '/goods-img/1f5bb955-fbe7-451a-b12c-3e2115c53020.jpg', '<p>商品介绍加载中...</p>', 3199, 2929, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10297, 'Apple iPhone 7 (A1660)', '128G 银色 移动联通电信4G手机', 47, '/goods-img/9fc3c48f-c8e2-426b-915a-c32b0e72998d.jpg', '/goods-img/9fc3c48f-c8e2-426b-915a-c32b0e72998d.jpg', '<p>商品介绍加载中...</p>', 3199, 2929, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10298, 'Apple iPhone XS Max', '(A2104) 256GB 深空灰色 移动联通电信4G手机 双卡双待', 47, '/goods-img/ec4af4a5-0a53-4246-bd88-919b0541a55c.jpg', '/goods-img/ec4af4a5-0a53-4246-bd88-919b0541a55c.jpg', '详情加载中...', 9599, 8999, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10299, 'Apple iPhone XS Max', '(A2104) 256GB 金色 移动联通电信4G手机 双卡双待', 47, '/goods-img/b7d2373a-5a8c-4be5-a4ce-57b408c6d9f2.jpg', '/goods-img/b7d2373a-5a8c-4be5-a4ce-57b408c6d9f2.jpg', '<p>商品介绍加载中...</p>', 9599, 8999, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10300, 'Apple iPhone XS Max', '(A2104) 256GB 银色 移动联通电信4G手机 双卡双待', 47, '/goods-img/837aaf40-5797-4929-b162-a248bfe73b36.jpg', '/goods-img/837aaf40-5797-4929-b162-a248bfe73b36.jpg', '<p>商品介绍加载中...</p>', 9599, 8999, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10301, 'Apple iPhone 8 (A1863)', '64GB 深空灰色 移动联通电信4G手机', 47, '/goods-img/8ab049d8-5b2e-4b69-bef0-013bec414598.jpg', '/goods-img/8ab049d8-5b2e-4b69-bef0-013bec414598.jpg', '<p>商品介绍加载中...</p>', 3699, 3499, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10302, 'Apple iPhone 8 (A1863)', '64GB 银色 移动联通电信4G手机', 47, '/goods-img/eaeb6faf-2ead-4f5d-84d2-1629686a492c.jpg', '/goods-img/eaeb6faf-2ead-4f5d-84d2-1629686a492c.jpg', '<p>商品介绍加载中...</p>', 3699, 3499, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10303, 'Apple iPhone 8 (A1863)', '64GB 金色 移动联通电信4G手机', 47, '/goods-img/0611528c-73c8-4114-a1d8-d9387e771284.jpg', '/goods-img/0611528c-73c8-4114-a1d8-d9387e771284.jpg', '<p>商品介绍加载中...</p>', 3699, 3499, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10304, 'Apple iPhone 7 Plus', '(A1661) 128G 黑色 移动联通电信4G手机', 47, '/goods-img/dbafc182-23b7-442c-b9cb-0ea825a659a9.jpg', '/goods-img/dbafc182-23b7-442c-b9cb-0ea825a659a9.jpg', '<p>商品介绍加载中...</p>', 4199, 3699, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10305, 'Apple iPhone 7 Plus', '(A1661) 128G 玫瑰金色 移动联通电信4G手机', 47, '/goods-img/c227df08-9a26-430a-88a5-72c1e4da5b6e.jpg', '/goods-img/c227df08-9a26-430a-88a5-72c1e4da5b6e.jpg', '<p>商品介绍加载中...</p>', 4199, 3699, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10306, 'Apple iPhone 7 Plus', '(A1661) 128G 金色 移动联通电信4G手机', 47, '/goods-img/bf58f29f-75ed-411e-8255-3b9f802634f2.jpg', '/goods-img/bf58f29f-75ed-411e-8255-3b9f802634f2.jpg', '<p>商品介绍加载中...</p>', 4199, 3699, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10307, 'Apple iPhone 7 Plus', '(A1661) 128G 银色 移动联通电信4G手机', 47, '/goods-img/dfab7fee-e787-423d-9771-67e05b03b358.jpg', '/goods-img/dfab7fee-e787-423d-9771-67e05b03b358.jpg', '<p>商品介绍加载中...</p>', 4199, 3699, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10308, 'Apple iPhone XS (A2099)', '64GB 金色 移动联通4G手机', 47, '/goods-img/b3ff5475-9519-4d94-8f07-5840bb796e60.jpg', '/goods-img/b3ff5475-9519-4d94-8f07-5840bb796e60.jpg', '详情加载中...', 7299, 6299, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10309, 'Apple iPhone XS (A2099)', '64GB 深空灰色 移动联通4G手机', 47, '/goods-img/7cc8d012-cfaa-45c4-ba35-70ca46c8bd66.jpg', '/goods-img/7cc8d012-cfaa-45c4-ba35-70ca46c8bd66.jpg', '详情加载中...', 7299, 6299, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10310, 'Apple iPhone XS (A2099)', '256GB 银色 移动联通4G手机', 47, '/goods-img/776b459b-e981-434f-bbf7-635cafab7418.jpg', '/goods-img/776b459b-e981-434f-bbf7-635cafab7418.jpg', '详情加载中...', 10099, 7699, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10311, 'Apple iPhone 8 Plus', '(A1899) 64GB 深空灰色 移动联通4G手机', 47, '/goods-img/8eb2e38b-84e1-4f31-9dae-841800f68038.jpg', '/goods-img/8eb2e38b-84e1-4f31-9dae-841800f68038.jpg', '<p>商品介绍加载中...</p>', 4599, 3999, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10312, 'Apple iPhone 8 Plus', '(A1864) 64GB 金色 移动联通电信4G手机', 47, '/goods-img/58c6a2c3-d3f7-4b0a-b4ae-e649b1032087.jpg', '/goods-img/58c6a2c3-d3f7-4b0a-b4ae-e649b1032087.jpg', '<p>商品介绍加载中...</p>', 4799, 4399, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10313, 'Apple iPhone 8 Plus', '(A1864) 64GB 银色 移动联通电信4G手机', 47, '/goods-img/2839c451-3eaf-4820-8a15-1858ce339407.jpg', '/goods-img/2839c451-3eaf-4820-8a15-1858ce339407.jpg', '<p>商品介绍加载中...</p>', 4799, 4399, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10314, 'Apple 苹果 iPhone xr', '手机 双卡双待 黑色 全网通64G', 47, '/goods-img/35bbe123-c822-457c-aaf0-fdcd861bc06d.jpg', '/goods-img/35bbe123-c822-457c-aaf0-fdcd861bc06d.jpg', '<p>商品介绍加载中...</p>', 6199, 4598, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10315, 'Apple 苹果 iPhone xr', '手机 双卡双待 白色 全网通64G', 47, '/goods-img/0e565b23-554e-45d3-ac62-a2fb25be7f2c.jpg', '/goods-img/0e565b23-554e-45d3-ac62-a2fb25be7f2c.jpg', '<p>商品介绍加载中...</p>', 6199, 4658, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10316, 'Apple 苹果 iPhone xr', '手机 双卡双待 蓝色 全网通64G', 47, '/goods-img/c08b6ddc-735f-4d2c-b47f-1f0e7f62a9b1.jpg', '/goods-img/c08b6ddc-735f-4d2c-b47f-1f0e7f62a9b1.jpg', '<p>商品介绍加载中...</p>', 6199, 4698, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10317, 'Apple 苹果 iPhone xr', '手机 双卡双待 黄色 全网通64G', 47, '/goods-img/c09636de-93b1-444e-b00e-668506676443.jpg', '/goods-img/c09636de-93b1-444e-b00e-668506676443.jpg', '<p>商品介绍加载中...</p>', 6199, 4698, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10318, 'Apple 苹果 iPhone xr', '手机 双卡双待 红色 全网通128G', 47, '/goods-img/b26d8460-7ab5-4006-ba5c-e212ee0f31bd.jpg', '/goods-img/b26d8460-7ab5-4006-ba5c-e212ee0f31bd.jpg', '<p>商品介绍加载中...</p>', 6699, 5038, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10319, 'Apple 苹果 iPhone xr', '手机 双卡双待 珊瑚色 全网通64G', 47, '/goods-img/fab7cf40-9b7d-4141-8227-9ce7e02e8330.jpg', '/goods-img/fab7cf40-9b7d-4141-8227-9ce7e02e8330.jpg', '<p>商品介绍加载中...</p>', 6199, 4698, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10320, 'Apple iPhone 11 Pro', '(A2217) 256GB 暗夜绿色 移动联通电信4G手机 双卡双待', 47, '/goods-img/0025ad55-e260-4a00-be79-fa5b8c5ac0de.jpg', '/goods-img/0025ad55-e260-4a00-be79-fa5b8c5ac0de.jpg', '<div id=\"activity_header\" style=\"margin:0px;padding:0px;color:#666666;font-family:tahoma, arial, \" background-color:#ffffff;\"=\"\">\n<div style=\"margin:0px;padding:0px;text-align:center;\">\n\t<br />\n</div>\n\t</div>\n<div id=\"J-detail-content\" style=\"margin:0px;padding:0px;color:#666666;font-family:tahoma, arial, \" background-color:#ffffff;\"=\"\">\n\t<div style=\"margin:0px auto;padding:0px;\">\n\t\t<img class=\"\" src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/iphone-0.jpg\" /><img border=\"0\" class=\"\" src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/iphone-11-1.png\" /><img border=\"0\" class=\"\" src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/iphone-11-2.png\" />\n\t</div>\n</div>', 9999, 9999, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10321, 'Apple iPhone 11 Pro', '(A2217) 64GB 深空灰色 移动联通电信4G手机 双卡双待', 47, '/goods-img/d0abbd2a-19ca-4ae7-9b3c-1eb4eb77c565.jpg', '/goods-img/d0abbd2a-19ca-4ae7-9b3c-1eb4eb77c565.jpg', '<div id=\"activity_header\" style=\"margin:0px;padding:0px;color:#666666;font-family:tahoma, arial, \" background-color:#ffffff;\"=\"\">\n<div style=\"margin:0px;padding:0px;text-align:center;\">\n\t<br />\n</div>\n\t</div>\n<div id=\"J-detail-content\" style=\"margin:0px;padding:0px;color:#666666;font-family:tahoma, arial, \" background-color:#ffffff;\"=\"\">\n\t<div style=\"margin:0px auto;padding:0px;\">\n\t\t<img class=\"\" src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/iphone-0.jpg\" /><img border=\"0\" class=\"\" src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/iphone-11-1.png\" /><img border=\"0\" class=\"\" src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/iphone-11-2.png\" />\n\t</div>\n</div>', 8699, 8699, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10322, 'Apple iPhone 11 Pro', '(A2217) 64GB 银色 移动联通电信4G手机 双卡双待', 47, '/goods-img/7d192eff-938f-4e6d-8952-9d405707033e.jpg', '/goods-img/7d192eff-938f-4e6d-8952-9d405707033e.jpg', '<div id=\"activity_header\" style=\"margin:0px;padding:0px;color:#666666;font-family:tahoma, arial, \" background-color:#ffffff;\"=\"\">\n<div style=\"margin:0px;padding:0px;text-align:center;\">\n\t<br />\n</div>\n\t</div>\n<div id=\"J-detail-content\" style=\"margin:0px;padding:0px;color:#666666;font-family:tahoma, arial, \" background-color:#ffffff;\"=\"\">\n\t<div style=\"margin:0px auto;padding:0px;\">\n\t\t<img class=\"\" src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/iphone-0.jpg\" /><img border=\"0\" class=\"\" src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/iphone-11-1.png\" /><img border=\"0\" class=\"\" src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/iphone-11-2.png\" />\n\t</div>\n</div>', 8699, 8699, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10323, '【换修无忧年付版】Apple iPhone 11 Pro', '(A2217) 512GB 金色 移动联通电信4G手机 双卡双待', 47, '/goods-img/38b3f3a9-7056-45a3-b183-ad46dc71f493.jpg', '/goods-img/38b3f3a9-7056-45a3-b183-ad46dc71f493.jpg', '<div id=\"activity_header\" style=\"margin:0px;padding:0px;color:#666666;font-family:tahoma, arial, \" background-color:#ffffff;\"=\"\">\n<div style=\"margin:0px;padding:0px;text-align:center;\">\n\t<br />\n</div>\n\t</div>\n<div id=\"J-detail-content\" style=\"margin:0px;padding:0px;color:#666666;font-family:tahoma, arial, \" background-color:#ffffff;\"=\"\">\n\t<div style=\"margin:0px auto;padding:0px;\">\n\t\t<img class=\"\" src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/iphone-0.jpg\" /><img border=\"0\" class=\"\" src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/iphone-11-1.png\" /><img border=\"0\" class=\"\" src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/iphone-11-2.png\" />\n\t</div>\n</div>', 12598, 12598, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10324, 'Apple 苹果 iPhone 6s', 'Plus 4G手机 金色 全网通 128G', 47, '/goods-img/22febff2-db52-4f7a-8d16-414e755e788b.jpg', '/goods-img/22febff2-db52-4f7a-8d16-414e755e788b.jpg', '<p>商品介绍加载中...</p>', 3599, 2918, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10325, 'Apple 苹果 iPhone 6s', 'Plus 4G手机 玫瑰金 全网通 128G', 47, '/goods-img/dfb0d434-4d59-4fda-896a-1ebd9e4d9ece.jpg', '/goods-img/dfb0d434-4d59-4fda-896a-1ebd9e4d9ece.jpg', '<p>商品介绍加载中...</p>', 3599, 2918, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10326, 'Apple 苹果 iPhone 6s', 'Plus 4G手机 深空灰 全网通 128G', 47, '/goods-img/d3a4b902-8010-4619-89e4-96cb88e6d4e4.jpg', '/goods-img/d3a4b902-8010-4619-89e4-96cb88e6d4e4.jpg', '<p>商品介绍加载中...</p>', 3599, 2888, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10327, 'Apple 苹果 iPhone 6s', 'Plus 4G手机 银色 全网通 128G', 47, '/goods-img/b4b7e7d3-b7ba-4917-a1f9-70c52f28df9d.jpg', '/goods-img/b4b7e7d3-b7ba-4917-a1f9-70c52f28df9d.jpg', '<p>商品介绍加载中...</p>', 3599, 2988, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10328, '【二手9成新】Apple iPhone XSmax 苹果XSmax', '国行二手手机 XS Max 深空灰 64G', 47, '/goods-img/0514e529-6b3e-40d5-9183-84088ddb55e1.jpg', '/goods-img/0514e529-6b3e-40d5-9183-84088ddb55e1.jpg', '<p>商品介绍加载中...</p>', 7766, 6088, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10329, '【二手9成新】Apple iPhone XSmax 苹果XSmax', '国行二手手机 XS Max 金色 64G', 47, '/goods-img/a0dfd1ad-61ed-43ee-add4-74bdfea1d6c1.jpg', '/goods-img/a0dfd1ad-61ed-43ee-add4-74bdfea1d6c1.jpg', '<p>商品介绍加载中...</p>', 14999, 6088, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10330, '【二手9成新】Apple iPhone XSmax 苹果XSmax', '国行二手手机 XS Max 银色 256G', 47, '/goods-img/87b66719-fc17-4c97-a954-de8a78b42a09.jpg', '/goods-img/87b66719-fc17-4c97-a954-de8a78b42a09.jpg', '<p>商品介绍加载中...</p>', 14999, 6938, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10331, '【二手9成新】Apple iPhone 6s Plus', '苹果6sPlus 二手手机（送一年碎屏险） 玫瑰金色 64G 全网通', 47, '/goods-img/5b132b57-24e4-4d65-9cb8-3299dc0e9ed6.png', '/goods-img/5b132b57-24e4-4d65-9cb8-3299dc0e9ed6.png', '<p>商品介绍加载中...</p>', 1799, 1468, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10332, '【二手9成新】Apple iPhone 6s Plus', '苹果6sPlus 二手手机（送一年碎屏险） 金色 64G 全网通', 47, '/goods-img/f289ec14-e0e2-481e-a703-39eec00a1b15.png', '/goods-img/f289ec14-e0e2-481e-a703-39eec00a1b15.png', '<p>商品介绍加载中...</p>', 1799, 1499, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10333, '【二手9成新】Apple iPhone 6s Plus', '苹果6sPlus 二手手机（送一年碎屏险） 银色 64G 全网通', 47, '/goods-img/084208d0-4dc2-4f1a-aff4-4114616dfae1.png', '/goods-img/084208d0-4dc2-4f1a-aff4-4114616dfae1.png', '<p>商品介绍加载中...</p>', 1799, 1599, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10334, '【二手9成新】Apple iPhone 6s Plus', '苹果6sPlus 二手手机（送一年碎屏险） 深空灰色 64G 全网通', 47, '/goods-img/8a598420-0052-4551-b00a-b288b6c22a48.png', '/goods-img/8a598420-0052-4551-b00a-b288b6c22a48.png', '<p>商品介绍加载中...</p>', 1799, 1638, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10335, 'Apple 苹果 iPhone xr', '手机 双卡双待 白色 全网通 64G', 47, '/goods-img/6110a187-511f-45d0-8b59-ea2a75546a45.jpg', '/goods-img/6110a187-511f-45d0-8b59-ea2a75546a45.jpg', '<p>商品介绍加载中...</p>', 5499, 4699, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10336, 'Apple 苹果 iPhone xr', '手机 双卡双待 黑色 全网通 128G', 47, '/goods-img/41b10e86-857c-435c-b86d-d822e35450ab.jpg', '/goods-img/41b10e86-857c-435c-b86d-d822e35450ab.jpg', '<p>商品介绍加载中...</p>', 5699, 5079, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10337, 'Apple 苹果 iPhone xr', '手机 双卡双待 蓝色 全网通 64G', 47, '/goods-img/d38bcaab-7a0a-4f86-ad75-60ac74a308e6.jpg', '/goods-img/d38bcaab-7a0a-4f86-ad75-60ac74a308e6.jpg', '<p>商品介绍加载中...</p>', 5499, 4699, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10338, 'Apple 苹果 iPhone xr', '手机 双卡双待 黄色 全网通 128G', 47, '/goods-img/73fc7cb9-5b43-4bce-a2b3-a82516773de0.jpg', '/goods-img/73fc7cb9-5b43-4bce-a2b3-a82516773de0.jpg', '<p>商品介绍加载中...</p>', 5699, 5079, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10339, 'Apple 苹果 iPhone xr', '手机 双卡双待 珊瑚色 全网通 64G', 47, '/goods-img/00e53d76-db08-4ae2-864f-ca1cd7c8c32b.jpg', '/goods-img/00e53d76-db08-4ae2-864f-ca1cd7c8c32b.jpg', '<p>商品介绍加载中...</p>', 5499, 4699, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10340, '【二手95新】Apple iPhonex XSmax苹果x xsmax', '国行 二手手机 XS max金色 64G 全网通', 47, '/goods-img/5b9acfd4-7808-4b3b-bf5c-4b367667418c.jpg', '/goods-img/5b9acfd4-7808-4b3b-bf5c-4b367667418c.jpg', '<p>商品介绍加载中...</p>', 12999, 6088, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10341, '【二手95新】Apple iPhonex XSmax苹果x xsmax', '国行 二手手机 XS 金色 64G 全网通', 47, '/goods-img/cd2b481d-a4a2-4bc0-a4e1-784a28c37ef9.jpg', '/goods-img/cd2b481d-a4a2-4bc0-a4e1-784a28c37ef9.jpg', '<p>商品介绍加载中...</p>', 12999, 5299, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10342, '【二手95新】Apple iPhonex XSmax苹果x xsmax', '国行 二手手机 XS max灰色 256G 全网通', 47, '/goods-img/1d866674-4e57-483a-955f-5fd1a4f5d921.jpg', '/goods-img/1d866674-4e57-483a-955f-5fd1a4f5d921.jpg', '<p>商品介绍加载中...</p>', 12999, 6938, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10343, '【二手95新】Apple iPhonex XSmax苹果x xsmax', '国行 二手手机 XS max银色 64G 全网通', 47, '/goods-img/3f3e086e-e4be-464f-9c20-760430cab2df.jpg', '/goods-img/3f3e086e-e4be-464f-9c20-760430cab2df.jpg', '<p>商品介绍加载中...</p>', 12999, 6088, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10344, '【二手95新】Apple iPhonex XSmax苹果x xsmax', '国行 二手手机 XS 灰色 64G 全网通', 47, '/goods-img/4a4a0820-aad5-47d4-a926-f040fd090c96.jpg', '/goods-img/4a4a0820-aad5-47d4-a926-f040fd090c96.jpg', '<p>商品介绍加载中...</p>', 12999, 5299, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10345, '【二手95新】Apple iPhonex XSmax苹果x xsmax', '国行 二手手机 XS 银色 64G 全网通', 47, '/goods-img/a6b87d83-5ba7-4683-be17-43ab9aa043e3.jpg', '/goods-img/a6b87d83-5ba7-4683-be17-43ab9aa043e3.jpg', '<p>商品介绍加载中...</p>', 12999, 5299, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10346, '【二手9成新】Apple iPhone X 苹果X', '二手手机 深空灰色 64G 全网通', 47, '/goods-img/3cd13e20-2a00-4049-8768-0ba662df7e40.jpg', '/goods-img/3cd13e20-2a00-4049-8768-0ba662df7e40.jpg', '<p>商品介绍加载中...</p>', 3989, 3989, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10347, '【二手9成新】Apple iPhone X 苹果X', '二手手机 银色 64G 全网通', 47, '/goods-img/fc3db752-e0dc-4ae7-bac3-fd60ab8a1e17.jpg', '/goods-img/fc3db752-e0dc-4ae7-bac3-fd60ab8a1e17.jpg', '<p>商品介绍加载中...</p>', 4008, 4008, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10348, '【二手9成新】苹果7Plus手机 Apple iPhone7Plus 苹果7P', '二手手机 磨砂黑 128G 全网通', 47, '/goods-img/24b442e2-1bdd-4350-bbab-4e4d3d3445f1.jpg', '/goods-img/24b442e2-1bdd-4350-bbab-4e4d3d3445f1.jpg', '<p>商品介绍加载中...</p>', 2899, 2399, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10349, '【二手9成新】苹果7Plus手机 Apple iPhone7Plus 苹果7P', '二手手机 亮黑色 128G 全网通', 47, '/goods-img/7601e13f-de8e-449c-84be-65fbc7280cfc.png', '/goods-img/7601e13f-de8e-449c-84be-65fbc7280cfc.png', '<p>商品介绍加载中...</p>', 2899, 2399, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10350, '【二手9成新】苹果7Plus手机 Apple iPhone7Plus 苹果7P', '二手手机 玫瑰金 128G 全网通', 47, '/goods-img/771bc653-485b-4c5d-bca3-c84d3e90020d.jpg', '/goods-img/771bc653-485b-4c5d-bca3-c84d3e90020d.jpg', '<p>商品介绍加载中...</p>', 2666, 2399, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10351, '【二手9成新】苹果7Plus手机 Apple iPhone7Plus 苹果7P', '二手手机 金色 128G 全网通', 47, '/goods-img/5a170339-acb4-4890-bd08-bb109864e853.jpg', '/goods-img/5a170339-acb4-4890-bd08-bb109864e853.jpg', '<p>商品介绍加载中...</p>', 2739, 2399, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10352, '【二手9成新】苹果7Plus手机 Apple iPhone7Plus 苹果7P', '二手手机 银色 128G 全网通', 47, '/goods-img/a419ebb4-18a5-4295-9404-0593dd215ad0.jpg', '/goods-img/a419ebb4-18a5-4295-9404-0593dd215ad0.jpg', '<p>商品介绍加载中...</p>', 2699, 2466, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10353, '【二手9成新】Apple iPhone X 苹果X', '二手手机 全网通 深空灰 64G', 47, '/goods-img/4f666eee-c2c7-459c-934e-b32714d1e1c4.png', '/goods-img/4f666eee-c2c7-459c-934e-b32714d1e1c4.png', '<p>商品介绍加载中...</p>', 5188, 3956, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10354, '【二手9成新】苹果8Plus手机 Apple iPhone 8Plus', '苹果8P 二手手机 深空灰 64G 全网通', 47, '/goods-img/ada8e547-dca3-47fc-8aab-35884575090a.jpg', '/goods-img/ada8e547-dca3-47fc-8aab-35884575090a.jpg', '<p>商品介绍加载中...</p>', 3888, 3199, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10355, '【二手9成新】苹果8Plus手机 Apple iPhone 8Plus', '苹果8P 二手手机 金色 64G 全网通', 47, '/goods-img/76a2e417-2f15-412f-ab73-3a5eb2a7d2d1.jpg', '/goods-img/76a2e417-2f15-412f-ab73-3a5eb2a7d2d1.jpg', '<p>商品介绍加载中...</p>', 3550, 3199, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10356, '【二手9成新】苹果8Plus手机 Apple iPhone 8Plus', '苹果8P 二手手机 银色 64G 全网通', 47, '/goods-img/5bfb8955-0b1c-4652-b162-a9b91b71211a.jpg', '/goods-img/5bfb8955-0b1c-4652-b162-a9b91b71211a.jpg', '<p>商品介绍加载中...</p>', 3499, 3238, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10357, '【二手9成新】苹果8Plus手机 Apple iPhone 8Plus', '苹果8P 二手手机 中国红 64G 全网通', 47, '/goods-img/d31193ee-04c1-4bac-8a91-1a4690a396be.jpg', '/goods-img/d31193ee-04c1-4bac-8a91-1a4690a396be.jpg', '<p>商品介绍加载中...</p>', 3438, 3299, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10358, '【二手9成新】Apple iPhoneX 苹果X 二手苹果x手机', '深空灰 64G全网通', 47, '/goods-img/b9264842-cd50-4d6f-a4a5-e8cc9dd483a4.png', '/goods-img/b9264842-cd50-4d6f-a4a5-e8cc9dd483a4.png', '<p>商品介绍加载中...</p>', 4799, 3989, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10359, '【二手9成新】Apple iPhoneX 苹果X 二手苹果x手机', '银色 64G全网通', 47, '/goods-img/58e9a125-61c1-416b-b17f-99cda431a202.png', '/goods-img/58e9a125-61c1-416b-b17f-99cda431a202.png', '<p>商品介绍加载中...</p>', 4799, 4016, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10360, '【二手95新】Apple iPhone XS 苹果xs', '国行全网通二手手机 银色 全网通 64G', 47, '/goods-img/5a732ada-1fdb-48f1-b106-666159565a94.jpg', '/goods-img/5a732ada-1fdb-48f1-b106-666159565a94.jpg', '<p>商品介绍加载中...</p>', 9999, 5299, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10361, '【二手95新】Apple iPhone XS 苹果xs', '国行全网通二手手机 金色 全网通 256G', 47, '/goods-img/f9e9b321-4b25-40c5-af6d-d9f3fe74a053.jpg', '/goods-img/f9e9b321-4b25-40c5-af6d-d9f3fe74a053.jpg', '<p>商品介绍加载中...</p>', 9999, 6008, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10362, '【二手9成新】Apple iPhone X 苹果x', '二手手机 X 银色 256G 全网通', 47, '/goods-img/8da60128-fcc7-46ed-98b6-0066c69624c0.png', '/goods-img/8da60128-fcc7-46ed-98b6-0066c69624c0.png', '<p>商品介绍加载中...</p>', 5058, 4639, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10363, '【二手9成新】Apple iPhone X 苹果x', '国行全网通二手手机 X 灰色 64G 全网通', 47, '/goods-img/8aca87a3-65dd-4c42-91c7-bbbd10fcf7a6.jpg', '/goods-img/8aca87a3-65dd-4c42-91c7-bbbd10fcf7a6.jpg', '<p>商品介绍加载中...</p>', 6999, 3999, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10364, '【二手9成新】Apple iPhone X 苹果x', '国行全网通二手手机 X 银色 64G 全网通', 47, '/goods-img/fdec1b37-9a2f-46ea-af03-5091d83e546a.jpg', '/goods-img/fdec1b37-9a2f-46ea-af03-5091d83e546a.jpg', '<p>商品介绍加载中...</p>', 6999, 4078, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10365, '【二手9成新】Apple iPhone XR 苹果xr', '二手手机双卡双待 白色 128G 全网通', 47, '/goods-img/9834bb8d-fe1c-4218-a624-4a25aecb0676.jpg', '/goods-img/9834bb8d-fe1c-4218-a624-4a25aecb0676.jpg', '<p>商品介绍加载中...</p>', 5888, 4299, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10366, '【二手9成新】Apple iPhone XR 苹果xr', '二手手机双卡双待 蓝色 128G 全网通', 47, '/goods-img/3993feaa-0365-4d7e-9cc5-dcf583243ca3.jpg', '/goods-img/3993feaa-0365-4d7e-9cc5-dcf583243ca3.jpg', '<p>商品介绍加载中...</p>', 5888, 4399, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10367, '【二手9成新】Apple iPhone XR 苹果xr', '二手手机双卡双待 黑色 64G 全网通', 47, '/goods-img/ba9cf789-60a8-48db-8329-97c3fc13a061.jpg', '/goods-img/ba9cf789-60a8-48db-8329-97c3fc13a061.jpg', '<p>商品介绍加载中...</p>', 5888, 4055, 10000, '', 0, 0, '2019-09-18 13:27:13', 0, '2019-09-18 13:27:13'),\n(10689, '荣耀Play3 6.39英寸魅眼全视屏 4000mAh大电池 真4800万AI三摄', '麒麟710F自研芯片 全网通4GB+64GB 幻夜黑', 45, '/goods-img/9aa34959-cd60-418f-b42e-aa7243b6869c.jpg', '/goods-img/9aa34959-cd60-418f-b42e-aa7243b6869c.jpg', '详情加载中...', 999, 999, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10690, '华为 HUAWEI 畅享10 Plus', '超高清全视屏前置悬浮式镜头4800万超广角AI三摄 4GB+128GB幻夜黑全网通双4G手机', 46, '/goods-img/2613a582-460c-4c2b-bbc0-6c7dbf501bd2.jpg', '/goods-img/2613a582-460c-4c2b-bbc0-6c7dbf501bd2.jpg', '详情加载中...', 1499, 1499, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10691, '华为 HUAWEI 畅享10 Plus', '超高清全视屏前置悬浮式镜头4800万超广角AI三摄 4GB+128GB翡冷翠全网通双4G手机', 46, '/goods-img/21b0751b-f6ae-4a57-8fb8-61e007395c43.jpg', '/goods-img/21b0751b-f6ae-4a57-8fb8-61e007395c43.jpg', '<p>商品介绍加载中...</p>', 1499, 1499, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10692, '华为 HUAWEI 畅享10 Plus', '超高清全视屏前置悬浮式镜头4800万超广角AI三摄 6GB+128GB天空之境全网通双4G手机', 46, '/goods-img/3f68538f-3b56-4e98-9676-99139857428c.jpg', '/goods-img/3f68538f-3b56-4e98-9676-99139857428c.jpg', '详情加载中...', 1799, 1799, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10693, '荣耀10青春版 幻彩渐变 2400万AI自拍 全网通版4GB+64GB', '渐变蓝 移动联通电信4G全面屏手机 双卡双待', 45, '/goods-img/f8ab28c3-8e04-49a0-ba05-2e6a3ae7211f.jpg', '/goods-img/f8ab28c3-8e04-49a0-ba05-2e6a3ae7211f.jpg', '详情加载中...', 1099, 999, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10694, '荣耀10青春版 幻彩渐变 2400万AI自拍 全网通版4GB+64GB', '幻夜黑 移动联通电信4G全面屏手机 双卡双待', 45, '/goods-img/de654f42-d58d-4336-8edd-da01c3523449.jpg', '/goods-img/de654f42-d58d-4336-8edd-da01c3523449.jpg', '详情加载中...', 1099, 999, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10695, '荣耀10青春版 幻彩渐变 2400万AI自拍 全网通版4GB+64GB', '渐变红 移动联通电信4G全面屏手机 双卡双待', 45, '/goods-img/87254a42-9fdf-4e68-a11e-e8e2eef28d2c.jpg', '/goods-img/87254a42-9fdf-4e68-a11e-e8e2eef28d2c.jpg', '详情加载中...', 1099, 999, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10696, '荣耀10青春版 幻彩渐变 2400万AI自拍 全网通版4GB+64GB', '铃兰白 移动联通电信4G全面屏手机 双卡双待', 45, '/goods-img/81b7060a-7274-4bff-86c0-72d5fc7ff383.jpg', '/goods-img/81b7060a-7274-4bff-86c0-72d5fc7ff383.jpg', '详情加载中...', 1099, 999, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10697, '荣耀8X 千元屏霸 91%屏占比 2000万AI双摄', '4GB+64GB 幻夜黑 移动联通电信4G全面屏手机 双卡双待', 45, '/goods-img/d7f74e8f-5c52-422b-ac99-a8d691830494.jpg', '/goods-img/d7f74e8f-5c52-422b-ac99-a8d691830494.jpg', '详情加载中...', 1399, 999, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10698, '荣耀8X 千元屏霸 91%屏占比 2000万AI双摄', '4GB+64GB 幻影蓝 移动联通电信4G全面屏手机 双卡双待', 45, '/goods-img/7031c07e-a70f-4f6d-9e2d-d0af31e3393a.jpg', '/goods-img/7031c07e-a70f-4f6d-9e2d-d0af31e3393a.jpg', '详情加载中...', 1399, 999, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10699, '荣耀8X 千元屏霸 91%屏占比 2000万AI双摄', '4GB+64GB 魅海蓝 移动联通电信4G全面屏手机 双卡双待', 45, '/goods-img/b7bfcc28-98c2-4cb4-8ce3-afe4c482b674.jpg', '/goods-img/b7bfcc28-98c2-4cb4-8ce3-afe4c482b674.jpg', '详情加载中...', 1399, 999, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10700, '荣耀8X 千元屏霸 91%屏占比 2000万AI双摄', '4GB+64GB 魅焰红 移动联通电信4G全面屏手机 双卡双待', 45, '/goods-img/6a160b96-9b4a-4844-b335-feb31b1f5d8c.jpg', '/goods-img/6a160b96-9b4a-4844-b335-feb31b1f5d8c.jpg', '详情加载中...', 1399, 999, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10701, '荣耀8X 千元屏霸 91%屏占比 2000万AI双摄', '4GB+64GB 梦幻紫 移动联通电信4G全面屏手机 双卡双待', 45, '/goods-img/8ccc13ec-96fe-4488-a604-526601548c9e.jpg', '/goods-img/8ccc13ec-96fe-4488-a604-526601548c9e.jpg', '详情加载中...', 1399, 999, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10702, '华为 HUAWEI P30 超感光徕卡三摄麒麟980AI智能芯片全面屏屏内指纹版手机8GB+128GB天空之境全网通双4G手机', '新蜂精选', 46, '/goods-img/edb7e8ef-7785-418b-a75e-dfed2aa74e39.jpg', '/goods-img/edb7e8ef-7785-418b-a75e-dfed2aa74e39.jpg', '详情加载中...', 4288, 3988, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10703, '华为 HUAWEI P30 超感光徕卡三摄麒麟980AI智能芯片全面屏屏内指纹版手机8GB+128GB亮黑色全网通双4G手机', '新蜂精选', 46, '/goods-img/e13294f7-9ab0-42dc-afb1-9f41c59436cf.jpg', '/goods-img/e13294f7-9ab0-42dc-afb1-9f41c59436cf.jpg', '<p>商品介绍加载中...</p>', 4288, 3988, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10704, '华为 HUAWEI P30 超感光徕卡三摄麒麟980AI智能芯片全面屏屏内指纹版手机8GB+128GB珠光贝母全网通双4G手机', '新蜂精选', 46, '/goods-img/b9e6d770-06dd-40f4-9ae5-31103cec6e5f.jpg', '/goods-img/b9e6d770-06dd-40f4-9ae5-31103cec6e5f.jpg', '详情加载中...', 4288, 3988, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10705, '华为 HUAWEI P30 超感光徕卡三摄麒麟980AI智能芯片全面屏屏内指纹版手机8GB+128GB极光色全网通双4G手机', '新蜂精选', 46, '/goods-img/20312f4e-da4f-49b9-8150-ab54f0302915.jpg', '/goods-img/20312f4e-da4f-49b9-8150-ab54f0302915.jpg', '<p>商品介绍加载中...</p>', 4288, 3988, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10706, '华为 HUAWEI P30 超感光徕卡三摄麒麟980AI智能芯片全面屏屏内指纹版手机8GB+128GB赤茶橘全网通双4G手机', '新蜂精选', 46, '/goods-img/192b1727-bcab-4bdf-8494-182f8ec5b2e6.jpg', '/goods-img/192b1727-bcab-4bdf-8494-182f8ec5b2e6.jpg', '<p>商品介绍加载中...</p>', 4288, 3988, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10707, '荣耀20i 3200万AI自拍 超广角三摄 全网通版6GB+64GB', '渐变蓝 移动联通电信4G全面屏手机 双卡双待', 45, '/goods-img/74146e03-42d1-453c-843d-b02d8bcc24f4.jpg', '/goods-img/74146e03-42d1-453c-843d-b02d8bcc24f4.jpg', '详情加载中...', 1399, 1299, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10708, '荣耀20i 3200万AI自拍 超广角三摄 全网通版6GB+64GB', '渐变红 移动联通电信4G全面屏手机 双卡双待', 45, '/goods-img/4c066fc2-3a58-44df-9dc6-8465b25f92ef.jpg', '/goods-img/4c066fc2-3a58-44df-9dc6-8465b25f92ef.jpg', '详情加载中...', 1399, 1299, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10709, '荣耀20i 3200万AI自拍 超广角三摄 全网通版6GB+64GB', '幻夜黑 移动联通电信4G全面屏手机 双卡双待', 45, '/goods-img/525bdd6e-848b-4e02-b19f-1a08fdb87faa.jpg', '/goods-img/525bdd6e-848b-4e02-b19f-1a08fdb87faa.jpg', '详情加载中...', 1399, 1299, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10710, '荣耀9X 麒麟810 4000mAh超强续航 4800万超清夜拍', '6.59英寸升降全面屏 全网通6GB+64GB 魅海蓝', 45, '/goods-img/7b8b7da7-f154-453e-a6a6-ea2f5e7d8b4a.jpg', '/goods-img/7b8b7da7-f154-453e-a6a6-ea2f5e7d8b4a.jpg', '详情加载中...', 1599, 1599, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10711, '荣耀9X 麒麟810 4000mAh超强续航 4800万超清夜拍', '6.59英寸升降全面屏 全网通6GB+64GB 幻夜黑', 45, '/goods-img/d30f7986-bc0f-4ea8-8fbb-94c6bae248f5.jpg', '/goods-img/d30f7986-bc0f-4ea8-8fbb-94c6bae248f5.jpg', '详情加载中...', 1599, 1599, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10712, '荣耀9X 麒麟810 4000mAh超强续航 4800万超清夜拍', '6.59英寸升降全面屏 全网通4GB+64GB 魅焰红', 45, '/goods-img/95b5df3b-cfec-40bb-8ead-35e0fe7fb7b2.jpg', '/goods-img/95b5df3b-cfec-40bb-8ead-35e0fe7fb7b2.jpg', '详情加载中...', 1399, 1399, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10713, '荣耀20 李现同款 4800万超广角AI四摄 3200W美颜自拍', '麒麟Kirin980全网通版8GB+128GB 蓝水翡翠 全面屏手机', 45, '/goods-img/2469b8fa-8117-4409-a8d6-3b52a33b3e51.jpg', '/goods-img/2469b8fa-8117-4409-a8d6-3b52a33b3e51.jpg', '详情加载中...', 2699, 2499, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10714, '荣耀20 李现同款 4800万超广角AI四摄 3200W美颜自拍', '麒麟Kirin980全网通版8GB+128GB 幻夜黑 全面屏手机', 45, '/goods-img/474e2ef0-2321-4363-ab31-7a838546f172.jpg', '/goods-img/474e2ef0-2321-4363-ab31-7a838546f172.jpg', '详情加载中...', 2699, 2499, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10715, '荣耀20 李现同款 4800万超广角AI四摄 3200W美颜自拍', '麒麟Kirin980全网通版8GB+128GB 冰岛白 全面屏手机', 45, '/goods-img/77d87d20-4fc7-441c-82a8-baf9089fc3ad.jpg', '/goods-img/77d87d20-4fc7-441c-82a8-baf9089fc3ad.jpg', '详情加载中...', 2699, 2499, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10716, '荣耀20 李现同款 4800万超广角AI四摄 3200W美颜自拍', '麒麟Kirin980全网通版8GB+128GB 幻影蓝 全面屏手机', 45, '/goods-img/1a200710-8c41-4411-8edf-a49575807a08.jpg', '/goods-img/1a200710-8c41-4411-8edf-a49575807a08.jpg', '详情加载中...', 2699, 2499, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10717, '荣耀20 PRO 李现同款 4800万全焦段AI四摄', '双光学防抖 麒麟980 全网通4G 8GB+128GB 冰岛幻境 拍照手机', 45, '/goods-img/391cd4e6-6071-41ea-a6fc-d983b30a5470.jpg', '/goods-img/391cd4e6-6071-41ea-a6fc-d983b30a5470.jpg', '详情加载中...', 3199, 2899, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10718, '荣耀20 PRO 李现同款 4800万全焦段AI四摄', '双光学防抖 麒麟980 全网通4G 8GB+128GB 蓝水翡翠 拍照手机', 45, '/goods-img/5d7ee18f-ca20-4d72-a803-dc5b03bd80e2.jpg', '/goods-img/5d7ee18f-ca20-4d72-a803-dc5b03bd80e2.jpg', '详情加载中...', 3199, 2899, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10719, '荣耀20 PRO 李现同款 4800万全焦段AI四摄', '双光学防抖 麒麟980 全网通4G 8GB+128GB 幻夜星河 拍照手机', 45, '/goods-img/e1505375-d00d-4cd8-a090-a13490b430d5.jpg', '/goods-img/e1505375-d00d-4cd8-a090-a13490b430d5.jpg', '详情加载中...', 3199, 2899, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10720, '荣耀20 PRO × MOSCHINO联名版', '4800万全焦段AI四摄 双光学防抖 麒麟980 8GB+256GB 黑色', 45, '/goods-img/0ae89667-8a69-4efc-b8d8-c0ebaf56753a.jpg', '/goods-img/0ae89667-8a69-4efc-b8d8-c0ebaf56753a.jpg', '详情加载中...', 3799, 3799, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10721, '华为 HUAWEI 畅享 9S', '6GB+64GB 幻夜黑 全网通 2400万超广角三摄珍珠屏大存储 移动联通电信4G手机 双卡双待', 46, '/goods-img/1b96ae9b-8c56-465e-9e82-ff712305e2d9.jpg', '/goods-img/1b96ae9b-8c56-465e-9e82-ff712305e2d9.jpg', '详情加载中...', 1499, 1199, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10722, '华为 HUAWEI 畅享 9S', '6GB+64GB 极光蓝 全网通 2400万超广角三摄珍珠屏大存储 移动联通电信4G手机 双卡双待', 46, '/goods-img/b49530f5-fe13-42b3-9ca9-6f1367e0f8f8.jpg', '/goods-img/b49530f5-fe13-42b3-9ca9-6f1367e0f8f8.jpg', '详情加载中...', 1499, 1199, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10723, '华为 HUAWEI 畅享 9S', '6GB+64GB 珊瑚红 全网通 2400万超广角三摄珍珠屏大存储 移动联通电信4G手机 双卡双待', 46, '/goods-img/84397a4c-ff06-4f08-bad5-bd4d5f8e23ff.jpg', '/goods-img/84397a4c-ff06-4f08-bad5-bd4d5f8e23ff.jpg', '详情加载中...', 1499, 1199, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10724, '荣耀V20 游戏手机 麒麟980芯片 魅眼全视屏', '4800万深感相机 6GB+128GB 幻夜黑 移动联通电信4G全面屏手机', 45, '/goods-img/7a58b5b2-0101-4a55-9872-d7765f08cf19.jpg', '/goods-img/7a58b5b2-0101-4a55-9872-d7765f08cf19.jpg', '详情加载中...', 2199, 2099, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10725, '荣耀V20 游戏手机 麒麟980芯片 魅眼全视屏', '4800万深感相机 6GB+128GB 魅海蓝 移动联通电信4G全面屏手机', 45, '/goods-img/5dd6b4de-0b39-48fc-9285-7356c22edf7b.jpg', '/goods-img/5dd6b4de-0b39-48fc-9285-7356c22edf7b.jpg', '详情加载中...', 2199, 2099, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10726, '荣耀V20 游戏手机 麒麟980芯片 魅眼全视屏', '4800万深感相机 6GB+128GB 幻影蓝 移动联通电信4G全面屏手机', 45, '/goods-img/c5a6593b-ef49-42fd-b330-0be8021362d8.jpg', '/goods-img/c5a6593b-ef49-42fd-b330-0be8021362d8.jpg', '详情加载中...', 2199, 2099, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10727, '荣耀V20 游戏手机 麒麟980芯片 魅眼全视屏', '4800万深感相机 6GB+128GB 魅丽红 移动联通电信4G全面屏手机', 45, '/goods-img/b57f705a-ef7f-4a9f-a244-3fc980e17555.jpg', '/goods-img/b57f705a-ef7f-4a9f-a244-3fc980e17555.jpg', '详情加载中...', 2199, 2099, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10728, '荣耀V20 游戏手机 麒麟980芯片 魅眼全视屏', '4800万深感相机 6GB+128GB 幻影红 移动联通电信4G全面屏手机', 45, '/goods-img/3dd91f7d-8f89-4e8a-a808-fa556ee1ceb3.jpg', '/goods-img/3dd91f7d-8f89-4e8a-a808-fa556ee1ceb3.jpg', '详情加载中...', 2199, 2099, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10729, '华为 HUAWEI P20 AI智慧徕卡双摄全面屏游戏手机', '6GB+128GB 亮黑色 全网通移动联通电信4G手机 双卡双待', 46, '/goods-img/f8edc81a-8fbd-425b-8ed7-d6b4c14ec6a1.jpg', '/goods-img/f8edc81a-8fbd-425b-8ed7-d6b4c14ec6a1.jpg', '<p>商品介绍加载中...</p>', 3088, 2799, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10730, '华为 HUAWEI P20 AI智慧徕卡双摄全面屏游戏手机', '6GB+64GB 极光色 全网通移动联通电信4G手机 双卡双待', 46, '/goods-img/c17c5292-2c20-4196-88e3-7ea813530db5.jpg', '/goods-img/c17c5292-2c20-4196-88e3-7ea813530db5.jpg', '<p>商品介绍加载中...</p>', 2788, 2679, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10731, '华为 HUAWEI P20 AI智慧徕卡双摄全面屏游戏手机', '6GB+64GB 宝石蓝 全网通移动联通电信4G手机 双卡双待', 46, '/goods-img/b43bcd55-3709-4c32-b3a2-5b59c80f3610.jpg', '/goods-img/b43bcd55-3709-4c32-b3a2-5b59c80f3610.jpg', '<p>商品介绍加载中...</p>', 2788, 2699, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10732, '华为 HUAWEI P20 AI智慧全面屏', '6GB+64GB 极光闪蝶色 全网通版 移动联通电信4G手机 双卡双待', 46, '/goods-img/3b183d9a-ac01-4bed-a7bb-1ddeba6ad416.jpg', '/goods-img/3b183d9a-ac01-4bed-a7bb-1ddeba6ad416.jpg', '详情加载中...', 2788, 2679, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10733, '华为 HUAWEI P20 AI智慧全面屏', '6GB+64GB 珠光贝母色 全网通版 移动联通电信4G手机 双卡双待', 46, '/goods-img/28e94d5d-9ccc-4843-a296-2747530037ce.jpg', '/goods-img/28e94d5d-9ccc-4843-a296-2747530037ce.jpg', '详情加载中...', 3388, 2988, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10734, '华为 HUAWEI P20 AI智慧徕卡双摄全面屏游戏手机', '6GB+128GB 香槟金 全网通移动联通电信4G手机 双卡双待', 46, '/goods-img/0b11241e-4d6b-44ea-afb0-e029d1b5a54d.jpg', '/goods-img/0b11241e-4d6b-44ea-afb0-e029d1b5a54d.jpg', '<p>商品介绍加载中...</p>', 3888, 3888, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10735, '荣耀20S 李现同款 3200万人像超级夜景 4800万超广角AI三摄', '麒麟810旗舰级芯片 全网通版6GB+128GB 蝶羽蓝', 45, '/goods-img/8883043d-bef3-442c-9ccf-af9c03510c5d.jpg', '/goods-img/8883043d-bef3-442c-9ccf-af9c03510c5d.jpg', '详情加载中...', 1899, 1899, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10736, '华为 HUAWEI 畅享MAX 4GB+64GB', '幻夜黑 全网通版 珍珠屏杜比全景声大电池 移动联通电信4G手机 双卡双待', 46, '/goods-img/522ed5b9-bcae-401f-9933-d2e957bb3384.jpg', '/goods-img/522ed5b9-bcae-401f-9933-d2e957bb3384.jpg', '<p>商品介绍加载中...</p>', 1199, 999, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10737, '华为 HUAWEI 畅享MAX 4GB+64GB', '琥珀棕 全网通版 珍珠屏杜比全景声大电池 移动联通电信4G手机 双卡双待', 46, '/goods-img/36bdfdb9-21b1-46d5-9534-8b3873c9b6d9.jpg', '/goods-img/36bdfdb9-21b1-46d5-9534-8b3873c9b6d9.jpg', '<p>商品介绍加载中...</p>', 1199, 999, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10738, '华为 HUAWEI 畅享MAX 4GB+128GB', '天际白 全网通版 珍珠屏杜比全景声大电池 移动联通电信4G手机 双卡双待', 46, '/goods-img/51fa04cf-1c05-49ee-8dea-0c1757ff32c4.jpg', '/goods-img/51fa04cf-1c05-49ee-8dea-0c1757ff32c4.jpg', '<p>商品介绍加载中...</p>', 1899, 1399, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10739, '华为 HUAWEI P30 Pro', '超感光徕卡四摄10倍混合变焦麒麟980芯片屏内指纹 8GB+128GB极光色全网通版双4G手机', 46, '/goods-img/65c8e729-aeca-4780-977b-4d0d39d4aa2e.jpg', '/goods-img/65c8e729-aeca-4780-977b-4d0d39d4aa2e.jpg', '<p>商品介绍加载中...</p>', 5488, 4988, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10740, '华为 HUAWEI P30 Pro', '超感光徕卡四摄10倍混合变焦麒麟980芯片屏内指纹 8GB+128GB亮黑色全网通版双4G手机', 46, '/goods-img/bc90bb1e-494a-44d4-b180-42a994ec80fc.jpg', '/goods-img/bc90bb1e-494a-44d4-b180-42a994ec80fc.jpg', '<p>商品介绍加载中...</p>', 5488, 4988, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10741, '华为 HUAWEI P30 Pro', '超感光徕卡四摄10倍混合变焦麒麟980芯片屏内指纹 8GB+128GB珠光贝母全网通版双4G手机', 46, '/goods-img/a6f309b7-765a-4407-be71-bbd5b764d448.jpg', '/goods-img/a6f309b7-765a-4407-be71-bbd5b764d448.jpg', '<p>商品介绍加载中...</p>', 5488, 4988, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10742, '华为 HUAWEI P30 Pro', '超感光徕卡四摄10倍混合变焦麒麟980芯片屏内指纹 8GB+256GB天空之境全网通版双4G手机', 46, '/goods-img/dda1d575-cdac-4eb4-a118-3834490166f7.jpg', '/goods-img/dda1d575-cdac-4eb4-a118-3834490166f7.jpg', '<p>商品介绍加载中...</p>', 5988, 5488, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10743, '华为 HUAWEI P30 Pro', '超感光徕卡四摄10倍混合变焦麒麟980芯片屏内指纹 8GB+256GB墨玉蓝全网通版双4G手机', 46, '/goods-img/8755a735-baa1-4f17-a9bd-30c4f4f1451b.jpg', '/goods-img/8755a735-baa1-4f17-a9bd-30c4f4f1451b.jpg', '详情加载中...', 5988, 5488, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10744, '华为 HUAWEI P30 Pro', '超感光徕卡四摄10倍混合变焦麒麟980芯片屏内指纹 8GB+128GB赤茶橘全网通版双4G手机', 46, '/goods-img/44e78820-86f3-429d-94af-64f6af308846.jpg', '/goods-img/44e78820-86f3-429d-94af-64f6af308846.jpg', '<p>商品介绍加载中...</p>', 5488, 4988, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10745, '华为 HUAWEI P30 Pro', '超感光徕卡四摄10倍混合变焦麒麟980芯片屏内指纹 8GB+128GB嫣紫色全网通版双4G手机', 46, '/goods-img/no-img.png', '/goods-img/no-img.png', '详情加载中...', 5488, 4988, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10746, '华为 HUAWEI nova 5', 'Pro 前置3200万人像超级夜景4800万AI四摄麒麟980芯片8GB+128GB绮境森林全网通双4G手机', 46, '/goods-img/2948815e-043a-4f47-896f-7f6ccf916369.jpg', '/goods-img/2948815e-043a-4f47-896f-7f6ccf916369.jpg', '详情加载中...', 2999, 2999, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10747, '华为 HUAWEI nova 5', 'Pro 前置3200万人像超级夜景4800万AI四摄麒麟980芯片8GB+128GB亮黑色全网通双4G手机', 46, '/goods-img/df1bea42-9172-4cd5-9fc5-f35bb736108f.jpg', '/goods-img/df1bea42-9172-4cd5-9fc5-f35bb736108f.jpg', '详情加载中...', 2999, 2999, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10748, '华为 HUAWEI nova 5', 'Pro 前置3200万人像超级夜景4800万AI四摄麒麟980芯片 8GB+128GB仲夏紫全网通双4G手机', 46, '/goods-img/ab6f8463-794f-4f40-87b8-d01e6260ff1c.jpg', '/goods-img/ab6f8463-794f-4f40-87b8-d01e6260ff1c.jpg', '详情加载中...', 2999, 2999, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10749, '华为 HUAWEI nova 5', 'Pro 前置3200万人像超级夜景4800万AI四摄麒麟980芯片8GB+128GB苏音蓝全网通双4G手机', 46, '/goods-img/98e90b6e-2a5d-462d-8cd1-44699144a0b5.jpg', '/goods-img/98e90b6e-2a5d-462d-8cd1-44699144a0b5.jpg', '详情加载中...', 2999, 2999, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10750, '华为 HUAWEI nova 5', 'Pro 前置3200万人像超级夜景4800万AI四摄麒麟980芯片8GB+128GB珊瑚橙全网通双4G手机', 46, '/goods-img/ec0bafed-d651-4be7-b2aa-13e84248219a.jpg', '/goods-img/ec0bafed-d651-4be7-b2aa-13e84248219a.jpg', '详情加载中...', 2999, 2999, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10751, '华为 HUAWEI nova 5', 'Pro 前置3200万人像超级夜景4800万AI四摄麒麟980芯片8GB+256GB仲夏紫星耀礼盒版全网通', 46, '/goods-img/83f39052-5a1c-4769-a7db-cf2bd53d2a29.jpg', '/goods-img/83f39052-5a1c-4769-a7db-cf2bd53d2a29.jpg', '详情加载中...', 3799, 3599, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10752, '华为 HUAWEI nova 5i', '后置AI四摄 极点全面屏 前置2400万高清摄像头 8GB+128GB 苏音蓝 全网通双卡双待', 46, '/goods-img/4b2bffff-ec0b-42e0-8152-ada9a121ad31.jpg', '/goods-img/4b2bffff-ec0b-42e0-8152-ada9a121ad31.jpg', '<p>商品介绍加载中...</p>', 2199, 2199, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10753, '华为 HUAWEI nova 5i', '后置AI四摄 极点全面屏 前置2400万高清摄像头 8GB+128GB 幻夜黑 全网通双卡双待', 46, '/goods-img/04dce482-ff0e-483c-b324-dfc030b6cdd1.jpg', '/goods-img/04dce482-ff0e-483c-b324-dfc030b6cdd1.jpg', '<p>商品介绍加载中...</p>', 2199, 2199, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10754, '华为 HUAWEI nova 5i', '后置AI四摄 极点全面屏 前置2400万高清摄像头 8GB+128GB 蜜语红 全网通双卡双待', 46, '/goods-img/b5e139d3-ea6b-4874-9ccc-c18aca44a8bc.jpg', '/goods-img/b5e139d3-ea6b-4874-9ccc-c18aca44a8bc.jpg', '<p>商品介绍加载中...</p>', 2199, 2199, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10755, '荣耀9X PRO 麒麟810液冷散热 4000mAh超强续航', '4800万超广角夜拍三摄 6.59英寸全网通8GB+128GB 幻影紫', 45, '/goods-img/86bd80cd-140b-474c-8277-3747332f61b3.jpg', '/goods-img/86bd80cd-140b-474c-8277-3747332f61b3.jpg', '详情加载中...', 2199, 2199, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10756, '荣耀9X PRO 麒麟810液冷散热 4000mAh超强续航', '4800万超广角夜拍三摄 6.59英寸全网通8GB+128GB 幻夜黑', 45, '/goods-img/3b008be9-e906-4364-8aa0-0df2e670dbd2.jpg', '/goods-img/3b008be9-e906-4364-8aa0-0df2e670dbd2.jpg', '详情加载中...', 2199, 2199, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10757, '荣耀畅玩8C两天一充 莱茵护眼 刘海屏 全网通版4GB+32GB', '极光蓝 移动联通电信4G全面屏手机 双卡双待', 45, '/goods-img/7f7d2343-6743-490b-baec-3e0a76d061e5.jpg', '/goods-img/7f7d2343-6743-490b-baec-3e0a76d061e5.jpg', '详情加载中...', 899, 799, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10758, '荣耀畅玩8C两天一充 莱茵护眼 刘海屏 全网通版4GB+32GB', '铂光金 移动联通电信4G全面屏手机 双卡双待', 45, '/goods-img/b163ca1b-7deb-4b15-818a-dc765c852305.jpg', '/goods-img/b163ca1b-7deb-4b15-818a-dc765c852305.jpg', '详情加载中...', 899, 799, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10759, '荣耀畅玩8C两天一充 莱茵护眼 刘海屏 全网通版4GB+32GB', '星云紫 移动联通电信4G全面屏手机 双卡双待', 45, '/goods-img/f949289a-4c51-4159-a754-871da347e1e5.jpg', '/goods-img/f949289a-4c51-4159-a754-871da347e1e5.jpg', '详情加载中...', 899, 799, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10760, '荣耀畅玩8C两天一充 莱茵护眼 刘海屏 全网通版4GB+64GB', '幻夜黑 移动联通电信4G全面屏手机 双卡双待', 45, '/goods-img/27c3c018-95c5-429f-9ad7-be0fedd78329.jpg', '/goods-img/27c3c018-95c5-429f-9ad7-be0fedd78329.jpg', '详情加载中...', 1399, 1099, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10761, '荣耀畅玩8C两天一充 莱茵护眼 刘海屏 全网通版4GB+64GB', '幻影蓝 移动联通电信4G全面屏手机 双卡双待', 45, '/goods-img/61224f59-e11a-4005-84dc-cadfdd4162f6.jpg', '/goods-img/61224f59-e11a-4005-84dc-cadfdd4162f6.jpg', '详情加载中...', 1399, 1099, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10762, '华为 HUAWEI 畅享8e 青春版', '2GB+32GB全面屏 金色 全网通版 移动联通电信4G手机 双卡双待', 46, '/goods-img/af23223e-56fa-4aa7-b832-c55c713fa604.jpg', '/goods-img/af23223e-56fa-4aa7-b832-c55c713fa604.jpg', '<p>商品介绍加载中...</p>', 699, 549, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10763, '华为 HUAWEI 畅享8e青春 2GB+32GB全面屏', '黑色 全网通版 移动联通电信4G手机 双卡双待', 46, '/goods-img/bf64e22d-1cd3-40b0-9ce1-cc944e35d2d4.jpg', '/goods-img/bf64e22d-1cd3-40b0-9ce1-cc944e35d2d4.jpg', '<p>商品介绍加载中...</p>', 699, 549, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10764, '华为 HUAWEI 畅享8e青春 2GB+32GB全面屏', '蓝色 全网通版 移动联通电信4G手机 双卡双待', 46, '/goods-img/70f9ecf9-4859-45de-8f67-5afbdba6735c.jpg', '/goods-img/70f9ecf9-4859-45de-8f67-5afbdba6735c.jpg', '<p>商品介绍加载中...</p>', 699, 549, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10765, '华为 HUAWEI nova 4e', '3200万立体美颜AI超广角三摄珍珠屏6GB+128GB雀翎蓝全网通版双4G手机', 46, '/goods-img/55b997f9-fa22-40b0-8b33-429760c2af49.jpg', '/goods-img/55b997f9-fa22-40b0-8b33-429760c2af49.jpg', '<p>商品介绍加载中...</p>', 1999, 1799, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10766, '华为 HUAWEI nova 4e', '3200万立体美颜AI超广角三摄珍珠屏6GB+128GB幻夜黑全网通版双4G手机', 46, '/goods-img/8d675ec6-efe0-4ca6-8f83-193820b07256.jpg', '/goods-img/8d675ec6-efe0-4ca6-8f83-193820b07256.jpg', '<p>商品介绍加载中...</p>', 1999, 1799, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10767, '华为 HUAWEI nova 4e', '3200万立体美颜AI超广角三摄珍珠屏6GB+128GB珍珠白全网通版双4G手机', 46, '/goods-img/c8ce9a44-7b40-48b2-91cb-2a1607561b4a.jpg', '/goods-img/c8ce9a44-7b40-48b2-91cb-2a1607561b4a.jpg', '<p>商品介绍加载中...</p>', 1999, 1799, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10768, '华为 HUAWEI 畅享9 Plus', '4GB+64GB 极光紫 全网通 四摄超清全面屏大电池 移动联通电信4G手机 双卡双待', 46, '/goods-img/5ea16713-f6ae-4fa7-a53d-1700c29cb3d3.jpg', '/goods-img/5ea16713-f6ae-4fa7-a53d-1700c29cb3d3.jpg', '详情加载中...', 1299, 1199, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10769, '华为 HUAWEI 畅享9 Plus', '4GB+64GB 幻夜黑 全网通 四摄超清全面屏大电池 移动联通电信4G手机 双卡双待', 46, '/goods-img/39e4b0c8-c4c5-4162-8a32-3bb9bb483503.jpg', '/goods-img/39e4b0c8-c4c5-4162-8a32-3bb9bb483503.jpg', '详情加载中...', 1299, 1199, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10770, '华为 HUAWEI 畅享9 Plus', '4GB+64GB 宝石蓝 全网通 四摄超清全面屏大电池 移动联通电信4G手机 双卡双待', 46, '/goods-img/ca2bb115-c75e-475b-93ab-c2436f31aa16.jpg', '/goods-img/ca2bb115-c75e-475b-93ab-c2436f31aa16.jpg', '详情加载中...', 1299, 1199, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10771, '华为 HUAWEI 畅享9 Plus', '4GB+64GB 樱语粉 全网通 四摄超清全面屏大电池 移动联通电信4G手机 双卡双待', 46, '/goods-img/65e953c4-1d29-423a-b7d7-4276c4d42aaa.jpg', '/goods-img/65e953c4-1d29-423a-b7d7-4276c4d42aaa.jpg', '详情加载中...', 1299, 1199, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10772, '华为 HUAWEI nova 3i', '全面屏高清四摄游戏手机4GB+128GB 亮黑色 移动4G+ 移动联通电信4G手机双卡双待', 46, '/goods-img/2252c604-ced3-4e92-b58b-15402ae7be2c.jpg', '/goods-img/2252c604-ced3-4e92-b58b-15402ae7be2c.jpg', '详情加载中...', 1399, 1299, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10773, '华为 HUAWEI nova 3i', '全面屏高清四摄游戏手机4GB+128GB 蓝楹紫 移动4G+ 移动联通电信4G手机双卡双待', 46, '/goods-img/a17dc2b3-17dc-4be7-a04d-12a3fa62de31.jpg', '/goods-img/a17dc2b3-17dc-4be7-a04d-12a3fa62de31.jpg', '详情加载中...', 1399, 1299, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10774, '华为 HUAWEI nova 5i', 'Pro 前置3200万人像超级夜景4800万AI四摄极点全面屏6GB+128GB翡冷翠全网通双4G手机', 46, '/goods-img/e3f32e21-1208-481d-bfcd-8447de78043b.jpg', '/goods-img/e3f32e21-1208-481d-bfcd-8447de78043b.jpg', '<p>商品介绍加载中...</p>', 2199, 2149, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10775, '华为 HUAWEI nova 5i', 'Pro 前置3200万人像超级夜景4800万AI四摄极点全面屏6GB+128GB幻夜黑全网通双4G手机', 46, '/goods-img/1eb1e40c-7f38-47ed-a839-d43c1d0b79a8.jpg', '/goods-img/1eb1e40c-7f38-47ed-a839-d43c1d0b79a8.jpg', '详情加载中...', 2199, 2149, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10776, '华为 HUAWEI nova 5i', 'Pro 前置3200万人像超级夜景4800万AI四摄极点全面屏6GB+128GB极光色全网通双4G手机', 46, '/goods-img/80f05e0d-0d06-4aa8-bca5-0d39a2365b4b.jpg', '/goods-img/80f05e0d-0d06-4aa8-bca5-0d39a2365b4b.jpg', '详情加载中...', 2199, 2149, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10777, '华为 HUAWEI Mate 20', '麒麟980AI智能芯片全面屏超微距影像超大广角徕卡三摄6GB+128GB亮黑色全网通版双4G手机', 46, '/goods-img/9024ab8a-be67-4459-8414-8d84225851a7.jpg', '/goods-img/9024ab8a-be67-4459-8414-8d84225851a7.jpg', '<p>商品介绍加载中...</p>', 3799, 3699, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10778, '华为 HUAWEI Mate 20', '麒麟980AI智能芯片全面屏超微距影像超大广角徕卡三摄6GB+128GB极光色全网通版双4G手机', 46, '/goods-img/940a6c56-9f7b-4008-8679-c7ef5a44d695.jpg', '/goods-img/940a6c56-9f7b-4008-8679-c7ef5a44d695.jpg', '<p>商品介绍加载中...</p>', 3799, 3699, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10779, '华为 HUAWEI Mate 20', '麒麟980AI智能芯片全面屏超微距影像超大广角徕卡三摄6GB+64GB翡冷翠全网通版双4G手机', 46, '/goods-img/08f9a912-f049-4cf8-a839-115fc6582398.jpg', '/goods-img/08f9a912-f049-4cf8-a839-115fc6582398.jpg', '<p>商品介绍加载中...</p>', 3299, 3199, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10780, '华为 HUAWEI Mate 20', '麒麟980AI智能芯片全面屏超微距影像超大广角徕卡三摄6GB+128GB宝石蓝全网通版双4G手机', 46, '/goods-img/5d57e0ba-1bc7-45a7-9677-f501e0384442.jpg', '/goods-img/5d57e0ba-1bc7-45a7-9677-f501e0384442.jpg', '<p>商品介绍加载中...</p>', 3799, 3699, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10781, '华为 HUAWEI 麦芒 8', '超广角AI三摄 高清珍珠屏 大存储 6GB+128GB 极光蓝 全网通双4G手机', 46, '/goods-img/bde7fc16-fb6b-42b0-8950-13ff287c3cd3.jpg', '/goods-img/bde7fc16-fb6b-42b0-8950-13ff287c3cd3.jpg', '详情加载中...', 1899, 1699, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10782, '华为 HUAWEI 麦芒 8', '超广角AI三摄 高清珍珠屏 大存储 6GB+128GB 幻夜黑 全网通双4G手机', 46, '/goods-img/e299773e-14e4-4168-adab-514f6c6d35ed.jpg', '/goods-img/e299773e-14e4-4168-adab-514f6c6d35ed.jpg', '<p>商品介绍加载中...</p>', 1899, 1699, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10783, '华为 HUAWEI 麦芒 8', '超广角AI三摄 高清珍珠屏 大存储 6GB+128GB 宝石蓝 全网通双4G手机', 46, '/goods-img/2a3fb7d2-cb76-47b2-88c6-db0f869b5718.jpg', '/goods-img/2a3fb7d2-cb76-47b2-88c6-db0f869b5718.jpg', '<p>商品介绍加载中...</p>', 1899, 1699, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10784, '荣耀8X Max 骁龙660 7.12英寸90%屏占比珍珠屏', '6GB+64GB 魅海蓝 移动联通电信4G全面屏手机 双卡双待', 45, '/goods-img/c0763005-4e67-4861-98f2-e6a550ec4d87.jpg', '/goods-img/c0763005-4e67-4861-98f2-e6a550ec4d87.jpg', '详情加载中...', 1799, 1199, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10785, '荣耀8X Max 骁龙660 7.12英寸90%屏占比珍珠屏', '6GB+64GB 幻夜黑 移动联通电信4G全面屏手机 双卡双待', 45, '/goods-img/aea7760b-d950-4f64-8db9-ef055f15d234.jpg', '/goods-img/aea7760b-d950-4f64-8db9-ef055f15d234.jpg', '详情加载中...', 1799, 1199, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10786, '荣耀8X Max 骁龙660 7.12英寸90%屏占比珍珠屏', '6GB+64GB 魅焰红 移动联通电信4G全面屏手机 双卡双待', 45, '/goods-img/f5e2d2e7-541a-44fa-ad5c-4f15f48ebfc9.jpg', '/goods-img/f5e2d2e7-541a-44fa-ad5c-4f15f48ebfc9.jpg', '详情加载中...', 1799, 1199, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10787, '华为 HUAWEI Mate 10', '4GB+64GB 亮黑色 移动4G+手机 双卡双待', 46, '/goods-img/b67a4ac6-7766-4995-8110-1bd442ec0797.jpg', '/goods-img/b67a4ac6-7766-4995-8110-1bd442ec0797.jpg', '<p>商品介绍加载中...</p>', 1799, 1799, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10788, '华为 HUAWEI 畅享9 3GB+32GB', '极光蓝 高清珍珠屏 AI长续航 全网通标配版 移动联通电信4G手机', 46, '/goods-img/bd8b2d93-c251-46b8-9990-77baaf3075f3.jpg', '/goods-img/bd8b2d93-c251-46b8-9990-77baaf3075f3.jpg', '<p>商品介绍加载中...</p>', 999, 799, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10789, '华为 HUAWEI 畅享9 3GB+32GB', '幻夜黑 高清珍珠屏 AI长续航 全网通标配版 移动联通电信4G手机', 46, '/goods-img/71ae1ce8-38e8-4da3-8fa1-5e8157a12685.jpg', '/goods-img/71ae1ce8-38e8-4da3-8fa1-5e8157a12685.jpg', '<p>商品介绍加载中...</p>', 999, 799, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10790, '华为 HUAWEI 畅享9 4GB+64GB', '极光紫 高清珍珠屏 AI长续航 全网通高配版 移动联通电信4G手机', 46, '/goods-img/371386b8-ddf4-4fc1-985e-ef0e1a076710.jpg', '/goods-img/371386b8-ddf4-4fc1-985e-ef0e1a076710.jpg', '<p>商品介绍加载中...</p>', 1099, 1099, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10791, '华为 HUAWEI 畅享9 4GB+64GB', '珊瑚红 高清珍珠屏 AI长续航 全网通高配版 移动联通电信4G手机', 46, '/goods-img/60392ae1-d076-47b5-a00d-b2278e01ccb5.jpg', '/goods-img/60392ae1-d076-47b5-a00d-b2278e01ccb5.jpg', '<p>商品介绍加载中...</p>', 1099, 1099, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10792, '荣耀畅玩8A 6.09英寸珍珠全面屏 震撼大音量 3GB+32GB', '幻夜黑 移动联通电信4G全面屏手机 双卡双待', 45, '/goods-img/0a592388-1535-4f9f-8201-ecb78c48bb3d.jpg', '/goods-img/0a592388-1535-4f9f-8201-ecb78c48bb3d.jpg', '详情加载中...', 799, 649, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10793, '荣耀畅玩8A 6.09英寸珍珠全面屏 震撼大音量 3GB+32GB', '极光蓝 移动联通电信4G全面屏手机 双卡双待', 45, '/goods-img/fd218943-8f6f-4fb8-91a4-d6216cc5afdc.jpg', '/goods-img/fd218943-8f6f-4fb8-91a4-d6216cc5afdc.jpg', '详情加载中...', 799, 649, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10794, '荣耀畅玩8A 6.09英寸珍珠全面屏 震撼大音量 3GB+32GB', '魅焰红 移动联通电信4G全面屏手机 双卡双待', 45, '/goods-img/54641753-d8e7-45da-8c6c-81192552cf15.jpg', '/goods-img/54641753-d8e7-45da-8c6c-81192552cf15.jpg', '详情加载中...', 799, 649, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10795, '荣耀畅玩8A 6.09英寸珍珠全面屏 震撼大音量 3GB+32GB', '铂光金 移动联通电信4G全面屏手机 双卡双待', 45, '/goods-img/7b65ad3d-74a4-4322-8653-6bda47a8b4eb.jpg', '/goods-img/7b65ad3d-74a4-4322-8653-6bda47a8b4eb.jpg', '详情加载中...', 799, 649, 10000, '', 0, 0, '2019-09-18 13:37:44', 0, '2019-09-18 13:37:44'),\n(10796, 'Redmi K20Pro 骁龙855 索尼4800万超广角三摄', 'AMOLED弹出式全面屏 8GB+256GB 碳纤黑 游戏智能手机 小米 红米', 0, '/goods-img/2a05cc6a-3eea-42f9-ab97-2e2529a72099.jpg', '/goods-img/2a05cc6a-3eea-42f9-ab97-2e2529a72099.jpg', '<p>商品介绍加载中...</p>', 2999, 2699, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10797, '小米9 Pro 5G 全面屏游戏拍照新品手机', '新蜂精选', 51, '/goods-img/d5fc8bec-0add-48d3-b73b-349a0375e8dc.jpg', '/goods-img/d5fc8bec-0add-48d3-b73b-349a0375e8dc.jpg', '详情加载中...', 9999, 9999, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10798, '【新品抢购】Redmi Note8 4800万全场景四摄 4000mAh长续航', '高通骁龙665 18W快充 小金刚品质保证 4GB+64GB 梦幻蓝 游戏智能手机 小米 红米', 0, '/goods-img/e4e4c543-6d9a-4b19-bedf-3f40024cb710.jpg', '/goods-img/e4e4c543-6d9a-4b19-bedf-3f40024cb710.jpg', '<p>商品介绍加载中...</p>', 999, 999, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10799, '【新品抢购】Redmi Note8 4800万全场景四摄 4000mAh长续航', '高通骁龙665 18W快充 小金刚品质保证 4GB+64GB 皓月白 游戏智能手机 小米 红米', 0, '/goods-img/87e0f6ab-45ef-4710-a5f4-e57a470b6b26.jpg', '/goods-img/87e0f6ab-45ef-4710-a5f4-e57a470b6b26.jpg', '详情加载中...', 999, 999, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10800, '【新品抢购】Redmi Note8 4800万全场景四摄 4000mAh长续航', '高通骁龙665 18W快充 小金刚品质保证 4GB+64GB 曜石黑 游戏智能手机 小米 红米', 0, '/goods-img/4a5c5b20-2dd3-4343-a6d1-31195c9edea4.jpg', '/goods-img/4a5c5b20-2dd3-4343-a6d1-31195c9edea4.jpg', '详情加载中...', 999, 999, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10801, 'Redmi Note7 4800万双摄千元机 满血骁龙660', '18个月超长质保 4000mAh超长续航 6GB+64GB 镜花水月 游戏智能手机 小米 红米', 0, '/goods-img/30ef1f51-f958-486f-8d79-f48f6d8293dd.jpg', '/goods-img/30ef1f51-f958-486f-8d79-f48f6d8293dd.jpg', '详情加载中...', 1199, 1099, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10802, 'Redmi Note7 4800万双摄千元机 满血骁龙660', '18个月超长质保 4000mAh超长续航 6GB+64GB 亮黑色 游戏智能手机 小米 红米', 0, '/goods-img/92beacb0-f692-42ff-a20f-8fecd2b0c046.jpg', '/goods-img/92beacb0-f692-42ff-a20f-8fecd2b0c046.jpg', '*相机默认1200w，如何设置4800w？ 打开相机 — 右滑切换到“专业”模式 — 点击屏幕左上方的“48MP”，打开4800万超清。 *如何设置全面屏模式？ 点击设置 — 点击全面屏 — 进入全面屏设置会出现两个选项，可以选择经典导航也可以选择全面屏手势。选择全面屏手势，可进行手势学习，使用全面屏模式进行操作 *是否支持OTG功能？ 支持。 *红米Note7出厂预装版本是Andriod 9.0吗？ 该商品首批出厂操作系统：MIUI 10 (Andriod 9.0)。 *有呼吸灯吗？是否支持NFC？ 是否支持收音机？ 有呼吸灯，不支持NFC，支持收音机。 *4800万模式是否支持AI场景识别，能否有快速切换方式介绍？ 4800万模式下不支持AI场景识别，普通相机模式下可支持AI识别。 *是否支持王者荣耀Vulkan 模式？ 目前暂不支持王者荣耀Vulkan模式。      Redmi 红米Note 7 常见问题', 1199, 1099, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10803, 'Redmi Note7 4800万双摄千元机 满血骁龙660', '18个月超长质保 4000mAh超长续航 6GB+64GB 暮光金 游戏智能手机 小米 红米', 0, '/goods-img/0cf95c37-2665-4894-bd42-5f8de06c6d94.jpg', '/goods-img/0cf95c37-2665-4894-bd42-5f8de06c6d94.jpg', '*相机默认1200w，如何设置4800w？ 打开相机 — 右滑切换到“专业”模式 — 点击屏幕左上方的“48MP”，打开4800万超清。 *如何设置全面屏模式？ 点击设置 — 点击全面屏 — 进入全面屏设置会出现两个选项，可以选择经典导航也可以选择全面屏手势。选择全面屏手势，可进行手势学习，使用全面屏模式进行操作 *是否支持OTG功能？ 支持。 *红米Note7出厂预装版本是Andriod 9.0吗？ 该商品首批出厂操作系统：MIUI 10 (Andriod 9.0)。 *有呼吸灯吗？是否支持NFC？ 是否支持收音机？ 有呼吸灯，不支持NFC，支持收音机。 *4800万模式是否支持AI场景识别，能否有快速切换方式介绍？ 4800万模式下不支持AI场景识别，普通相机模式下可支持AI识别。 *是否支持王者荣耀Vulkan 模式？ 目前暂不支持王者荣耀Vulkan模式。      Redmi 红米Note 7 常见问题', 1199, 1099, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10804, 'Redmi Note7 4800万双摄千元机 满血骁龙660', '4000mAh超长续航 6GB+64GB 梦幻蓝 游戏智能手机 小米 红米', 0, '/goods-img/f6c46245-b957-41ed-b235-133c17cba7f9.jpg', '/goods-img/f6c46245-b957-41ed-b235-133c17cba7f9.jpg', '*相机默认1200w，如何设置4800w？ 打开相机 — 右滑切换到“专业”模式 — 点击屏幕左上方的“48MP”，打开4800万超清。 *如何设置全面屏模式？ 点击设置 — 点击全面屏 — 进入全面屏设置会出现两个选项，可以选择经典导航也可以选择全面屏手势。选择全面屏手势，可进行手势学习，使用全面屏模式进行操作 *是否支持OTG功能？ 支持。 *红米Note7出厂预装版本是Andriod 9.0吗？ 该商品首批出厂操作系统：MIUI 10 (Andriod 9.0)。 *有呼吸灯吗？是否支持NFC？ 是否支持收音机？ 有呼吸灯，不支持NFC，支持收音机。 *4800万模式是否支持AI场景识别，能否有快速切换方式介绍？ 4800万模式下不支持AI场景识别，普通相机模式下可支持AI识别。 *是否支持王者荣耀Vulkan 模式？ 目前暂不支持王者荣耀Vulkan模式。      Redmi 红米Note 7 常见问题', 1199, 1099, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10805, '【新品抢购】Redmi Note8Pro 6400万全场景四摄 液冷游戏芯', '4500mAh长续航 NFC 18W快充 红外遥控 6GB+64GB 贝母白 游戏智能手机 小米 红米', 0, '/goods-img/54985ce7-1df6-442f-9a28-0ff0bab924bd.jpg', '/goods-img/54985ce7-1df6-442f-9a28-0ff0bab924bd.jpg', '详情加载中...', 1399, 1399, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10806, '【新品抢购】Redmi Note8Pro 6400万全场景四摄 液冷游戏芯', '4500mAh长续航 NFC 18W快充 红外遥控 6GB+128GB 冰翡翠 游戏智能手机 小米 红米', 0, '/goods-img/e3de1717-e373-4544-9f1e-057a91fd2595.jpg', '/goods-img/e3de1717-e373-4544-9f1e-057a91fd2595.jpg', '详情加载中...', 1599, 1599, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10807, '【新品抢购】Redmi Note8Pro 6400万全场景四摄 液冷游戏芯', '4500mAh长续航 NFC 18W快充 红外遥控 6GB+64GB 电光灰 游戏智能手机 小米 红米', 0, '/goods-img/a1552f03-58ab-4b05-91ec-7df52af18a66.jpg', '/goods-img/a1552f03-58ab-4b05-91ec-7df52af18a66.jpg', '详情加载中...', 1399, 1399, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10808, 'Redmi Note7Pro 索尼4800万超清双摄 骁龙675', '18个月超长质保 4000mAh超长续航 6GB+128GB 亮黑色 游戏智能手机 小米 红米', 0, '/goods-img/647470fa-85b1-4626-99d0-d5b7512c8f23.jpg', '/goods-img/647470fa-85b1-4626-99d0-d5b7512c8f23.jpg', '详情加载中...', 1399, 1399, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10809, 'Redmi Note7pro 索尼4800万超清双摄 骁龙675', '18个月超长质保 4000mAh超长续航 6GB+128GB 镜花水月 游戏智能手机 小米 红米', 0, '/goods-img/edb8a694-84a5-47da-9bae-30f7a69d2c63.jpg', '/goods-img/edb8a694-84a5-47da-9bae-30f7a69d2c63.jpg', '详情加载中...', 1399, 1399, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10810, 'Redmi Note7Pro 索尼4800万超清双摄 骁龙675', '18个月超长质保 4000mAh超长续航 6GB+128GB 梦幻蓝 游戏智能手机 小米 红米', 0, '/goods-img/c76edfa6-c16e-45b9-9119-46d300739112.jpg', '/goods-img/c76edfa6-c16e-45b9-9119-46d300739112.jpg', '<p>商品介绍加载中...</p>', 1399, 1399, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10811, 'Redmi Note7Pro 索尼4800万超清双摄 骁龙675', '18个月超长质保 4000mAh超长续航 6GB+128GB 暮光金 游戏智能手机 小米 红米', 0, '/goods-img/bf0c2d17-3630-4709-af38-d7bd14a76f22.jpg', '/goods-img/bf0c2d17-3630-4709-af38-d7bd14a76f22.jpg', '详情加载中...', 1399, 1399, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10812, 'Redmi 7A 4000mAh超长续航 AI人脸解锁', '骁龙8核 标配10W充电器 整机防泼溅 3GB+32GB 磨砂黑 游戏智能手机 小米 红米', 0, '/goods-img/28c56015-cb20-44cb-86fb-246ad509e828.jpg', '/goods-img/28c56015-cb20-44cb-86fb-246ad509e828.jpg', '详情加载中...', 699, 599, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10813, 'Redmi 7A 4000mAh超长续航 AI人脸解锁', '骁龙8核 标配10W充电器 整机防泼溅 3GB+32GB 晨曦蓝 游戏智能手机 小米 红米', 0, '/goods-img/d845c984-f749-4f22-86a5-558677b1322c.jpg', '/goods-img/d845c984-f749-4f22-86a5-558677b1322c.jpg', '详情加载中...', 699, 599, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10814, 'Redmi 7A 4000mAh超长续航 AI人脸解锁', '骁龙8核 标配10W充电器 整机防泼溅 3GB+32GB 雾光金 游戏智能手机 小米 红米', 0, '/goods-img/56ac4c58-8742-40c8-b130-83b4d2925a8c.jpg', '/goods-img/56ac4c58-8742-40c8-b130-83b4d2925a8c.jpg', '详情加载中...', 599, 599, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10815, 'Redmi 7 4000mAh超长续航 骁龙632', '1200万AI双摄 18个月超长质保 AI人脸解锁 3GB+32GB 亮黑色 游戏智能手机 小米 红米', 0, '/goods-img/0647d1b4-d19a-4424-b6ac-68344addacb4.jpg', '/goods-img/0647d1b4-d19a-4424-b6ac-68344addacb4.jpg', '详情加载中...', 699, 699, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10816, 'Redmi 7 4000mAh超长续航 骁龙632', '1200万AI双摄 18个月超长质保 AI人脸解锁 3GB+32GB 魅夜红 游戏智能手机 小米 红米', 0, '/goods-img/711c54f0-f9d0-472e-b61b-94e25c628599.jpg', '/goods-img/711c54f0-f9d0-472e-b61b-94e25c628599.jpg', '详情加载中...', 699, 699, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10817, 'Redmi 7 4000mAh超长续航 骁龙632', '1200万AI双摄 18个月超长质保 AI人脸解锁 3GB+32GB 梦幻蓝 游戏智能手机 小米 红米', 0, '/goods-img/c8c97b68-3ba6-4f97-8940-d04c9e7c7302.jpg', '/goods-img/c8c97b68-3ba6-4f97-8940-d04c9e7c7302.jpg', '<p>商品介绍加载中...</p>', 699, 699, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10818, '小米MIX2S 骁龙845 AI感光双摄 四曲面陶瓷全面屏', '白色 多功能 NFC 6GB+128GB 游戏智能拍照手机', 51, '/goods-img/d423bb5c-60c8-4b66-bd72-3490b5d6461b.jpg', '/goods-img/d423bb5c-60c8-4b66-bd72-3490b5d6461b.jpg', '<p>商品介绍加载中...</p>', 2099, 1799, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10819, '小米MIX2S 骁龙845 AI感光双摄 四曲面陶瓷全面屏', '黑色 多功能 NFC 6GB+128GB 游戏智能拍照手机', 51, '/goods-img/9a554cae-5bec-4964-992f-e2f4de192e2c.jpg', '/goods-img/9a554cae-5bec-4964-992f-e2f4de192e2c.jpg', '<p>商品介绍加载中...</p>', 2099, 1799, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10820, '小米9 4800万超广角三摄 6GB+128GB全息幻彩蓝 骁龙855', '全网通4G 双卡双待 水滴全面屏拍照智能游戏手机', 51, '/goods-img/55a6dc67-1ed9-421a-9782-acdfa9c123e1.jpg', '/goods-img/55a6dc67-1ed9-421a-9782-acdfa9c123e1.jpg', '<p>商品介绍加载中...</p>', 2799, 2599, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10821, '小米9 4800万超广角三摄 8GB+256GB 透明版', '骁龙855 全网通4G 双卡双待 水滴全面屏拍照智能游戏手机', 51, '/goods-img/54249648-d37b-4b22-80dc-243e58ed56a1.jpg', '/goods-img/54249648-d37b-4b22-80dc-243e58ed56a1.jpg', '详情加载中...', 3699, 3699, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10822, '小米9 4800万超广角三摄 8GB+128GB 深空灰', '骁龙855 全网通4G 双卡双待 水滴全面屏拍照智能游戏手机', 51, '/goods-img/e8087861-89fd-43af-b64d-290864b0fe35.jpg', '/goods-img/e8087861-89fd-43af-b64d-290864b0fe35.jpg', '详情加载中...', 2999, 2799, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10823, '小米9 4800万超广角三摄 8GB+128GB 全息幻彩紫', '骁龙855 全网通4G 双卡双待 水滴全面屏拍照智能游戏手机', 51, '/goods-img/7a406989-061b-4f69-baa1-6fa499aa091d.jpg', '/goods-img/7a406989-061b-4f69-baa1-6fa499aa091d.jpg', '详情加载中...', 2999, 2799, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10824, '小米CC9e 索尼4800万旗舰相机 3200万美颜自拍 4030mAh', '屏幕指纹 白色恋人 6GB+64GB 游戏智能拍照手机', 51, '/goods-img/8fc9776e-9393-421d-998c-e516b3877dba.jpg', '/goods-img/8fc9776e-9393-421d-998c-e516b3877dba.jpg', '详情加载中...', 1399, 1299, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10825, '小米CC9e 索尼4800万旗舰相机 3200万美颜自拍 4030mAh', '屏幕指纹 暗夜王子 6GB+64GB 游戏智能拍照手机', 51, '/goods-img/033685d7-bf11-4389-9e52-ef5a51182306.jpg', '/goods-img/033685d7-bf11-4389-9e52-ef5a51182306.jpg', '详情加载中...', 1399, 1299, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10826, '小米CC9e 索尼4800万旗舰相机 3200万美颜自拍 4030mAh', '屏幕指纹 深蓝星球 6GB+64GB 游戏智能拍照手机', 51, '/goods-img/e8dba692-7fda-4f42-b0ee-6f51ca7dc77d.jpg', '/goods-img/e8dba692-7fda-4f42-b0ee-6f51ca7dc77d.jpg', '<p>商品介绍加载中...</p>', 1399, 1299, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10827, '小米CC9 3200万美颜自拍 索尼4800万超清三摄 多功能NFC', '4030mAh 深蓝星球 6GB+64GB 游戏智能拍照手机', 51, '/goods-img/387afca1-a14a-4ab8-9d99-120b7095029c.jpg', '/goods-img/387afca1-a14a-4ab8-9d99-120b7095029c.jpg', '详情加载中...', 1799, 1799, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10828, '小米CC9 3200万美颜自拍 索尼4800万超清三摄 多功能NFC', '4030mAh 白色恋人 6GB+64GB 游戏智能拍照手机', 51, '/goods-img/f96f376e-8341-4bad-ad2a-b3f12486958a.jpg', '/goods-img/f96f376e-8341-4bad-ad2a-b3f12486958a.jpg', '详情加载中...', 1799, 1799, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10829, '小米CC9 3200万美颜自拍 索尼4800万超清三摄 多功能NFC', '4030mAh 暗夜王子 6GB+128GB 游戏智能拍照手机', 51, '/goods-img/4c148e8e-7e26-4c74-a3d3-f5f37ae9248d.jpg', '/goods-img/4c148e8e-7e26-4c74-a3d3-f5f37ae9248d.jpg', '详情加载中...', 1999, 1999, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10830, '小米CC9美图定制版 索尼4800万AI三摄 3200万美颜自拍 全身美型', '多功能NFC 8GB+256GB 游戏智能拍照手机', 51, '/goods-img/92482741-3637-4cd3-91ff-cc5aeb0d3316.jpg', '/goods-img/92482741-3637-4cd3-91ff-cc5aeb0d3316.jpg', '<p>商品介绍加载中...</p>', 2599, 2599, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10831, '小米Play 流光渐变AI双摄 6GB+128GB 梦幻蓝', '移动4G+ 双卡双待 小水滴全面屏拍照游戏智能手机', 51, '/goods-img/f0b19f6c-6a8b-4128-8e5d-2e4953331c46.jpg', '/goods-img/f0b19f6c-6a8b-4128-8e5d-2e4953331c46.jpg', '详情加载中...', 999, 999, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10832, '小米Play 流光渐变AI双摄 6GB+128GB 黑色', '移动4G+ 双卡双待 小水滴全面屏拍照游戏智能手机', 51, '/goods-img/e39da33d-1b55-4e97-b8e6-824ac2cd1062.jpg', '/goods-img/e39da33d-1b55-4e97-b8e6-824ac2cd1062.jpg', '详情加载中...', 999, 999, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10833, '小米Play 流光渐变AI双摄 6GB+64GB 暮光金', '全网通4G 双卡双待 小水滴全面屏拍照游戏智能手机', 51, '/goods-img/2a93185a-8d3b-4908-af8c-c17db78e2fb0.jpg', '/goods-img/2a93185a-8d3b-4908-af8c-c17db78e2fb0.jpg', '详情加载中...', 899, 899, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10834, '小米9SE 骁龙712 索尼4800万超广角三摄 5.97英寸舒适握感', '全息幻彩蓝 8GB+128GB 游戏智能拍照手机', 51, '/goods-img/b28f3eac-0091-442f-90f3-68914bf947c7.jpg', '/goods-img/b28f3eac-0091-442f-90f3-68914bf947c7.jpg', '详情加载中...', 2099, 1899, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10835, '小米9 SE 4800万超广角三摄 骁龙712', '水滴全面屏 游戏智能拍照手机 6GB+64GB 深空灰 全网通4G 双卡双待', 51, '/goods-img/ef8370c4-ed8e-497f-9e10-185de4d01fe9.jpg', '/goods-img/ef8370c4-ed8e-497f-9e10-185de4d01fe9.jpg', '详情加载中...', 1799, 1599, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10836, '小米9SE 骁龙712 索尼4800万超广角三摄 5.97英寸舒适握感', '全息幻彩紫 8GB+128GB 游戏智能拍照手机', 51, '/goods-img/f436d00b-2253-4dcc-8b4a-d82e99af275a.jpg', '/goods-img/f436d00b-2253-4dcc-8b4a-d82e99af275a.jpg', '详情加载中...', 2099, 1999, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10837, '小米MIX3 骁龙845AIE AI 双摄', '磁动力滑盖全面屏 三星 AMOLED屏幕 黑色 8GB+128GB 游戏智能拍照手机', 51, '/goods-img/3bfc7c72-b56a-4088-8acf-e01e830ce72a.jpg', '/goods-img/3bfc7c72-b56a-4088-8acf-e01e830ce72a.jpg', '<p>商品介绍加载中...</p>', 2599, 2599, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10838, 'Redmi K20 索尼4800万超广角三摄 AMOLED弹出式全面屏', '第七代屏下指纹 6GB+128GB 冰川蓝 游戏智能手机 小米 红米', 0, '/goods-img/ed860c53-955b-4cfd-b605-a8b4bb959e2f.jpg', '/goods-img/ed860c53-955b-4cfd-b605-a8b4bb959e2f.jpg', '详情加载中...', 1999, 1799, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10839, 'Redmi K20 索尼4800万超广角三摄 AMOLED弹出式全面屏', '第七代屏下指纹 6GB+128GB 火焰红 游戏智能手机 小米 红米', 0, '/goods-img/8e64ea39-5477-482c-a200-2c12fdeff004.jpg', '/goods-img/8e64ea39-5477-482c-a200-2c12fdeff004.jpg', '详情加载中...', 1999, 1799, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10840, 'Redmi K20 索尼4800万超广角三摄 AMOLED弹出式全面屏', '第七代屏下指纹 6GB+128GB 碳纤黑 游戏智能手机 小米 红米', 0, '/goods-img/38a69084-0bc4-479e-a5ba-aed135dee974.jpg', '/goods-img/38a69084-0bc4-479e-a5ba-aed135dee974.jpg', '<p>商品介绍加载中...</p>', 1999, 1799, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10841, '红米6A 1300万高清相机 AI人脸解锁 12nm高性能处理器', '3GB+32GB 流沙金 游戏智能手机 小米', 0, '/goods-img/6c77e8f9-11d8-42c3-925e-4396d0d3709f.jpg', '/goods-img/6c77e8f9-11d8-42c3-925e-4396d0d3709f.jpg', '详情加载中...', 649, 599, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10842, '红米6A 1300万高清相机 AI人脸解锁 12nm高性能处理器', '3GB+32GB 铂银灰 游戏智能手机 小米', 0, '/goods-img/17b2eb9f-7289-45f8-b26a-114ec29ceb3c.jpg', '/goods-img/17b2eb9f-7289-45f8-b26a-114ec29ceb3c.jpg', '详情加载中...', 649, 599, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10843, '小米 红米6A 全网通版 2GB内存', '樱花粉 16GB 移动联通电信4G手机 双卡双待', 51, '/goods-img/1ba819c2-dc89-41d9-86a9-4649418972da.jpg', '/goods-img/1ba819c2-dc89-41d9-86a9-4649418972da.jpg', '<p>商品介绍加载中...</p>', 549, 549, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10844, '红米6A 1300万高清相机 AI人脸解锁 12nm高性能处理器', '3GB+32GB 巴厘蓝 游戏智能手机 小米', 0, '/goods-img/1ef84d7e-d804-4064-9140-a53607aa8df2.jpg', '/goods-img/1ef84d7e-d804-4064-9140-a53607aa8df2.jpg', '详情加载中...', 649, 599, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10845, '小米Max3 5500mAh充电宝级电量 AI双摄 全金属机身', '骁龙八核处理器 蓝色 6GB+128GB 游戏智能拍照手机', 51, '/goods-img/b6c3eea7-9d34-4ac0-ba66-2fde6f26253b.jpg', '/goods-img/b6c3eea7-9d34-4ac0-ba66-2fde6f26253b.jpg', '详情加载中...', 1599, 1499, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10846, '小米Max3 5500mAh充电宝级电量 AI双摄 全金属机身', '骁龙八核处理器 黑色 6GB+128GB 游戏智能拍照手机', 51, '/goods-img/30574476-f5bc-4f3c-80f6-4da22ea48f48.jpg', '/goods-img/30574476-f5bc-4f3c-80f6-4da22ea48f48.jpg', '详情加载中...', 1599, 1499, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10847, '小米Max3 5500mAh充电宝级电量 AI双摄 全金属机身', '骁龙八核处理器 金色 6GB+128GB 游戏智能拍照手机', 51, '/goods-img/114e92f8-bf78-481e-8d8a-9936d026d9d4.jpg', '/goods-img/114e92f8-bf78-481e-8d8a-9936d026d9d4.jpg', '详情加载中...', 1599, 1499, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10848, 'Redmi Note8 4800万全场景四摄 4000mAh长续航', '高通骁龙665 18W快充 小金刚品质保证 4GB+64GB 梦幻蓝 游戏智能手机 小米 红米', 0, '/goods-img/8d3ebf2d-8da7-478c-bd6c-e7a869fdde97.jpg', '/goods-img/8d3ebf2d-8da7-478c-bd6c-e7a869fdde97.jpg', '<p>商品介绍加载中...</p>', 999, 999, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10849, 'Redmi Note8 4800万全场景四摄 4000mAh长续航', '高通骁龙665 18W快充 小金刚品质保证 4GB+64GB 皓月白 游戏智能手机 小米 红米', 0, '/goods-img/b4ff98bc-ad00-48f7-ac64-0d52780d4c48.jpg', '/goods-img/b4ff98bc-ad00-48f7-ac64-0d52780d4c48.jpg', '<p>商品介绍加载中...</p>', 999, 999, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10850, 'Redmi Note8 4800万全场景四摄 4000mAh长续航', '高通骁龙665 18W快充 小金刚品质保证 4GB+64GB 曜石黑 游戏智能手机 小米 红米', 0, '/goods-img/b82cc8fd-075b-44d3-b211-8ea633fe2ffe.jpg', '/goods-img/b82cc8fd-075b-44d3-b211-8ea633fe2ffe.jpg', '<p>商品介绍加载中...</p>', 999, 999, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10851, '小米（MI） 小米8青春版 手机 深空灰', '全网通 6G+128G', 51, '/goods-img/52425573-6311-4877-bad8-1c04bf01e9d3.jpg', '/goods-img/52425573-6311-4877-bad8-1c04bf01e9d3.jpg', '<p>商品介绍加载中...</p>', 1599, 1168, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10852, '小米（MI） 小米8青春版 手机 梦幻蓝', '全网通 4G+128G', 51, '/goods-img/8c1c9fb2-26aa-4fa0-b9ce-cf278d827fa6.jpg', '/goods-img/8c1c9fb2-26aa-4fa0-b9ce-cf278d827fa6.jpg', '<p>商品介绍加载中...</p>', 1599, 1599, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10853, '小米（MI） 小米8青春版 手机 暮光金', '全网通 6G+64G', 51, '/goods-img/bd94d7e0-f56f-4b7f-8653-b8a4e267bd15.jpg', '/goods-img/bd94d7e0-f56f-4b7f-8653-b8a4e267bd15.jpg', '<p>商品介绍加载中...</p>', 1299, 1068, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10854, '小米 红米Note8 pro 手机【6400万四摄', '液冷游戏芯】 冰翡翠 全网通6+128', 51, '/goods-img/42913aa4-4a49-4121-9c80-3434c12d0ac9.jpg', '/goods-img/42913aa4-4a49-4121-9c80-3434c12d0ac9.jpg', '<p>商品介绍加载中...</p>', 1799, 1599, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10855, '小米 红米Note8 pro 手机【6400万四摄', '液冷游戏芯】 贝母白 全网通6+128', 51, '/goods-img/777ebd38-965d-4c77-970e-f1e25022255f.jpg', '/goods-img/777ebd38-965d-4c77-970e-f1e25022255f.jpg', '<p>商品介绍加载中...</p>', 1799, 1599, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10856, '小米 红米Note8 pro 手机【6400万四摄', '液冷游戏芯】 电光灰 全网通6+128', 51, '/goods-img/db21f41b-34ac-4bc7-a50f-1f812b1522d1.jpg', '/goods-img/db21f41b-34ac-4bc7-a50f-1f812b1522d1.jpg', '<p>商品介绍加载中...</p>', 1799, 1599, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10857, '小米（MI） 小米8 游戏手机 黑', '6GB+64GB', 51, '/goods-img/63588dfb-f85f-41a2-8198-c7ae66aa0261.png', '/goods-img/63588dfb-f85f-41a2-8198-c7ae66aa0261.png', '<p>商品介绍加载中...</p>', 1698, 1568, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10858, '小米（MI） 小米8 游戏手机 白', '6GB+64GB', 51, '/goods-img/d55d6e4a-99e7-4a3d-86a4-9b3899a63b42.png', '/goods-img/d55d6e4a-99e7-4a3d-86a4-9b3899a63b42.png', '<p>商品介绍加载中...</p>', 1698, 1568, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10859, '小米（MI） 小米8 游戏手机 蓝', '8GB+128GB', 51, '/goods-img/5a2a90aa-fe2c-4bb0-8d8d-1ac1613f453a.png', '/goods-img/5a2a90aa-fe2c-4bb0-8d8d-1ac1613f453a.png', '<p>商品介绍加载中...</p>', 1998, 1868, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10860, '小米（MI） 小米8 游戏手机 金', '6GB+128GB', 51, '/goods-img/c1cdb555-f605-4226-906a-022483612319.png', '/goods-img/c1cdb555-f605-4226-906a-022483612319.png', '<p>商品介绍加载中...</p>', 1898, 1838, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10861, '小米（MI） 小米8青春版 手机 深空灰', '全网通(6G+128G)', 51, '/goods-img/fafda3af-7741-47f2-936e-c0d9030fbf5b.png', '/goods-img/fafda3af-7741-47f2-936e-c0d9030fbf5b.png', '<p>商品介绍加载中...</p>', 1188, 1188, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10862, '小米（MI） 小米8青春版 手机 梦幻蓝', '全网通(6G+64G)', 51, '/goods-img/ef5ac8cb-5d4e-4dc6-bece-27c9ff5a2e1c.png', '/goods-img/ef5ac8cb-5d4e-4dc6-bece-27c9ff5a2e1c.png', '<p>商品介绍加载中...</p>', 1388, 1388, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10863, '小米（MI） 小米8青春版 手机 暮光金', '全网通(6G+128G)', 51, '/goods-img/d8b30b9f-faa4-4a0d-84bc-53b9c4745977.png', '/goods-img/d8b30b9f-faa4-4a0d-84bc-53b9c4745977.png', '<p>商品介绍加载中...</p>', 1578, 1578, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10864, '小米 红米Redmi 7 全网通4G', '双卡双待 幻彩渐变AI双摄 水滴全面屏拍照游戏智能手机 梦幻蓝 4GB+64GB', 51, '/goods-img/18ce5224-c98d-4a9c-a024-5ac5b6f9a2d7.jpg', '/goods-img/18ce5224-c98d-4a9c-a024-5ac5b6f9a2d7.jpg', '<p>商品介绍加载中...</p>', 1200, 808, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10865, '小米 红米Redmi 7 全网通4G', '双卡双待 幻彩渐变AI双摄 水滴全面屏拍照游戏智能手机 亮黑色 4GB+64GB', 51, '/goods-img/f7a9a98d-9e3f-4443-b8a7-5612bcd7c1d0.jpg', '/goods-img/f7a9a98d-9e3f-4443-b8a7-5612bcd7c1d0.jpg', '<p>商品介绍加载中...</p>', 1200, 818, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10866, '小米 红米Redmi 7 全网通4G', '双卡双待 幻彩渐变AI双摄 水滴全面屏拍照游戏智能手机 魅夜红 4GB+64GB', 51, '/goods-img/02523f49-742b-4c45-b59b-f550fe5a60ae.jpg', '/goods-img/02523f49-742b-4c45-b59b-f550fe5a60ae.jpg', '<p>商品介绍加载中...</p>', 1200, 818, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10867, '小米 小米8屏幕指纹版 手机 黑色', '全网通(6G + 128G )', 51, '/goods-img/35b9c185-2ca6-4052-af40-2abd2157f200.png', '/goods-img/35b9c185-2ca6-4052-af40-2abd2157f200.png', '产品信息Product Information', 2099, 1808, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10868, '小米 小米8屏幕指纹版 手机 透明版', '全网通(8G + 128G)', 51, '/goods-img/fcd1faf9-10b5-4318-b92b-36105be8752f.png', '/goods-img/fcd1faf9-10b5-4318-b92b-36105be8752f.png', '产品信息Product Information', 2499, 2028, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10869, '小米 小米8屏幕指纹版 手机 暮光金', '全网通(6G + 128G )', 51, '/goods-img/e9818435-c510-4042-91e1-734a818a2577.png', '/goods-img/e9818435-c510-4042-91e1-734a818a2577.png', '产品信息Product Information', 2099, 2099, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10870, '小米 红米6 全网通版 3GB内存', '流沙金 32GB 移动联通电信4G手机 双卡双待', 51, '/goods-img/515706fb-a5f8-4d72-a08e-7523cf4ea113.jpg', '/goods-img/515706fb-a5f8-4d72-a08e-7523cf4ea113.jpg', '<p>商品介绍加载中...</p>', 699, 699, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10871, '小米 红米6 3GB+32GB 铂银灰', '全网通4G手机 双卡双待 老人机 智能拍照手机', 51, '/goods-img/bcec0048-e992-4e57-9aaf-ddbd9fe852ce.jpg', '/goods-img/bcec0048-e992-4e57-9aaf-ddbd9fe852ce.jpg', '<p>商品介绍加载中...</p>', 699, 699, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10872, '小米（MI） 小米8屏幕指纹版 全面屏游戏手机 曜石黑（屏幕指纹版）', '6G+128G', 51, '/goods-img/e1c2b06f-fd06-4242-acb7-9ebd7179181b.png', '/goods-img/e1c2b06f-fd06-4242-acb7-9ebd7179181b.png', '<p>商品介绍加载中...</p>', 2199, 1818, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10873, '小米（MI） 小米8屏幕指纹版 全面屏游戏手机 透明版(屏幕指纹版)', '8G+128G', 51, '/goods-img/314274fc-1ee0-474d-bbb5-b9c70a8a9573.png', '/goods-img/314274fc-1ee0-474d-bbb5-b9c70a8a9573.png', '<p>商品介绍加载中...</p>', 2599, 2018, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10874, '小米（MI） 小米8屏幕指纹版 全面屏游戏手机 暮光金(屏幕指纹版)', '8G+128G', 51, '/goods-img/c2905bd8-bd68-4672-bada-b8a202a9327e.png', '/goods-img/c2905bd8-bd68-4672-bada-b8a202a9327e.png', '<p>商品介绍加载中...</p>', 2599, 2058, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10875, '小米8 游戏手机 全面屏 黑色', '全网通(6G+64G)', 51, '/goods-img/5afd1749-a3bc-41c2-90b2-928ede8aedda.jpg', '/goods-img/5afd1749-a3bc-41c2-90b2-928ede8aedda.jpg', '<p>商品介绍加载中...</p>', 1799, 1558, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10876, '小米8 游戏手机 全面屏 白色', '全网通(6G+64G)', 51, '/goods-img/a96dd5bc-2d74-4d57-9336-45a8ac09a363.jpg', '/goods-img/a96dd5bc-2d74-4d57-9336-45a8ac09a363.jpg', '<p>商品介绍加载中...</p>', 1799, 1550, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10877, '小米8 游戏手机 全面屏 白色', '全网通(6G+128G)', 51, '/goods-img/25e44283-a440-4e64-bb27-1887370c3d2e.jpg', '/goods-img/25e44283-a440-4e64-bb27-1887370c3d2e.jpg', '<p>商品介绍加载中...</p>', 1999, 1798, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10878, '小米8 游戏手机 全面屏 金色', '全网通(6G+128G)', 51, '/goods-img/6b5e5711-8ae6-4f66-bd22-30c9be85d3c6.jpg', '/goods-img/6b5e5711-8ae6-4f66-bd22-30c9be85d3c6.jpg', '<p>商品介绍加载中...</p>', 1999, 1849, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10879, '小米8 游戏手机 全面屏 黑色', '全网通(6G+128G)', 51, '/goods-img/040a3aa6-1699-4eca-ac67-5021cc419979.jpg', '/goods-img/040a3aa6-1699-4eca-ac67-5021cc419979.jpg', '<p>商品介绍加载中...</p>', 1999, 1849, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10880, '小米8 游戏手机 全面屏 金色', '全网通(6G+64G)', 51, '/goods-img/47c28778-88a4-42fd-bb4d-c93fe8df36b5.jpg', '/goods-img/47c28778-88a4-42fd-bb4d-c93fe8df36b5.jpg', '<p>商品介绍加载中...</p>', 1799, 1598, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10881, '小米8 游戏手机 全面屏 屏幕指纹版', '暮光金 全网通(8G+128G)', 51, '/goods-img/no-img.png', '/goods-img/no-img.png', '<p>商品介绍加载中...</p>', 3799, 2199, 10000, '1', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-24 19:46:59'),\n(10882, '小米8 游戏手机 全面屏 蓝色', '全网通(6G+64G)', 51, '/goods-img/no-img.png', '/goods-img/no-img.png', '<p>商品介绍加载中...</p>', 1799, 1598, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10883, '小米8 游戏手机 全面屏 金色', '全网通(6G+256G)', 51, '/goods-img/no-img.png', '/goods-img/no-img.png', '<p>商品介绍加载中...</p>', 3199, 2158, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10884, '小米8 游戏手机 全面屏 白色', '全网通(6G+256G)', 51, '/goods-img/no-img.png', '/goods-img/no-img.png', '<p>商品介绍加载中...</p>', 3199, 2158, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10885, '小米8 游戏手机 全面屏 蓝色', '全网通(6G+256G)', 51, '/goods-img/no-img.png', '/goods-img/no-img.png', '<p>商品介绍加载中...</p>', 3199, 2158, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10886, '小米8 游戏手机 全面屏 黑色', '全网通(6G+256G)', 51, '/goods-img/no-img.png', '/goods-img/no-img.png', '<p>商品介绍加载中...</p>', 3199, 3199, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10887, '小米8 游戏手机 全面屏 透明探索版', '全网通(8G+128G)', 51, '/goods-img/no-img.png', '/goods-img/no-img.png', '<p>商品介绍加载中...</p>', 4299, 4299, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-19 08:47:09'),\n(10888, '小米8 游戏手机 全面屏 屏幕指纹版', '暮光金 全网通(6G+128G)', 51, '/goods-img/no-img.png', '/goods-img/no-img.png', '<p>商品介绍加载中...</p>', 3399, 3399, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-19 08:47:09'),\n(10889, '小米8 游戏手机 全面屏 蓝色', '全网通(6G+128G)', 51, '/goods-img/no-img.png', '/goods-img/no-img.png', '<p>商品介绍加载中...</p>', 1849, 1849, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-19 08:47:09'),\n(10890, '小米 红米7 手机 Redmi7', 'AI双摄 拍照游戏手机 全网通双卡双待 亮黑色 4G+64G 全网通', 51, '/goods-img/b6084354-1841-4241-ba7b-7e97186a9076.jpg', '/goods-img/b6084354-1841-4241-ba7b-7e97186a9076.jpg', '<p>商品介绍加载中...</p>', 1299, 808, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-18 13:38:32'),\n(10891, '小米 红米7 手机 Redmi7', 'AI双摄 拍照游戏手机 全网通双卡双待 魅夜红 4G+64G 全网通', 51, '/goods-img/7b4e03b1-eca7-42f5-8dda-14d02d3ab318.jpg', '/goods-img/7b4e03b1-eca7-42f5-8dda-14d02d3ab318.jpg', '<p>商品介绍加载中...</p>', 1009, 818, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-22 23:33:12'),\n(10892, '小米 红米7 手机 Redmi7', 'AI双摄 拍照游戏手机 全网通双卡双待 梦幻蓝 3G+32G 全网通', 51, '/goods-img/7bca8b59-35f3-480a-a95d-99efcbb8cfda.jpg', '/goods-img/7bca8b59-35f3-480a-a95d-99efcbb8cfda.jpg', '<p>商品介绍加载中...</p>', 787, 715, 10000, '', 0, 0, '2019-09-18 13:38:32', 0, '2019-09-22 23:33:12'),\n(10893, 'HUAWEI Mate 30 Pro 双4000万徕卡电影四摄', '超曲面OLED环幕屏 8GB+256GB 全网通4G版（星河银）', 0, '/goods-img/mate30p2.png', '/goods-img/mate30p2.png', '<div id=\"activity_header\" style=\"margin:0px;padding:0px;color:#666666;font-family:tahoma, arial, \" background-color:#ffffff;\"=\"\">\n<div style=\"margin:0px;padding:0px;text-align:center;\">\n\t<br />\n</div>\n\t</div>\n<div id=\"J-detail-content\" style=\"margin:0px;padding:0px;color:#666666;font-family:tahoma, arial, \" background-color:#ffffff;\"=\"\">\n\t<div style=\"margin:0px auto;padding:0px;\">\n\t\t<img class=\"\" src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/huawei-1.jpg\" /><img border=\"0\" class=\"\" src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/huawei-3.jpg\" />\n\t</div>\n</div>', 5399, 5399, 10000, '重构想象', 0, 0, '2019-09-19 23:17:39', 0, '2019-09-19 23:17:39'),\n(10894, 'HUAWEI Mate 30 Pro', '超曲面OLED环幕屏 8GB+128GB 全网通4G版（翡冷翠）', 0, '/goods-img/mate30p3.png', '/goods-img/mate30p3.png', '<div id=\"activity_header\" style=\"margin:0px;padding:0px;color:#666666;font-family:tahoma, arial, \" background-color:#ffffff;\"=\"\">\n<div style=\"margin:0px;padding:0px;text-align:center;\">\n\t<br />\n</div>\n\t</div>\n<div id=\"J-detail-content\" style=\"margin:0px;padding:0px;color:#666666;font-family:tahoma, arial, \" background-color:#ffffff;\"=\"\">\n\t<div style=\"margin:0px auto;padding:0px;\">\n\t\t<img class=\"\" src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/huawei-1.jpg\" /><img border=\"0\" class=\"\" src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/huawei-3.jpg\" />\n\t</div>\n</div>', 5399, 5399, 10000, '重构想象', 0, 0, '2019-09-19 23:20:24', 0, '2019-09-19 23:20:24'),\n(10895, 'HUAWEI Mate 30 4000万超感光徕卡影像', 'OLED全面屏 8GB+128GB 全网通4G版 （罗兰紫）', 46, '/goods-img/mate30-3.png', '/goods-img/mate30-3.png', '<div id=\"activity_header\" style=\"margin:0px;padding:0px;color:#666666;font-family:tahoma, arial, \" background-color:#ffffff;\"=\"\">\n<div style=\"margin:0px;padding:0px;text-align:center;\">\n\t<br />\n</div>\n\t</div>\n<div id=\"J-detail-content\" style=\"margin:0px;padding:0px;color:#666666;font-family:tahoma, arial, \" background-color:#ffffff;\"=\"\">\n\t<div style=\"margin:0px auto;padding:0px;\">\n\t\t<img class=\"\" src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/huawei-1.jpg\" /><img border=\"0\" class=\"\" src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/huawei-3.jpg\" />\n\t</div>\n</div>', 3999, 3999, 10000, '重构想象', 0, 0, '2019-09-19 23:22:22', 0, '2019-11-27 00:16:03'),\n(10902, '华为 HUAWEI P40 冰霜银 全网通5G手机', '麒麟990 5G SoC芯片 5000万超感知徕卡三摄 30倍数字变焦 6GB+128GB', 46, 'https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/p40-silver.png', 'https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/p40-silver.png', '<img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/p40-detail.jpg\" alt=\"\" />', 4399, 4299, 10000, '超感知影像', 0, 0, '2020-03-27 10:07:37', 0, '2020-05-15 17:18:30'),\n(10905, 'Apple iPhone12 (A2404) 蓝色 支持移动联通电信5G 双卡双待手机', 'A14仿生芯片，6.1英寸超视网膜XDR显示屏，超瓷晶面板，升维大提速，现实力登场！', 47, 'https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/iPhone12-blue.png', 'https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/iPhone12-blue.png', '<img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/iphone12-detail.jpg\" alt=\"\">', 6299, 6199, 10000, '升维，大提速。', 0, 0, '2020-10-14 10:30:06', 0, '2020-10-16 17:13:43'),\n(10906, 'Apple iPhone12 Pro (A2408) 128GB 海蓝色 支持移动联通电信5G 双卡双待手机', 'A14仿生芯片，6.1英寸超视网膜XDR显示屏，激光雷达扫描仪，超瓷晶面板，现实力登场！', 47, 'https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/iphone-12-pro-blue-hero.png', 'https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/iphone-12-pro-blue-hero.png', '<img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/iphone12pro-detail.jpg\" alt=\"\" />', 8499, 8499, 10000, '自我再飞跃', 0, 0, '2020-10-14 10:32:55', 0, '2020-10-16 17:13:43'),\n(10907, 'HUAWEI Mate 40 Pro 全网通5G手机 8GB+512GB（秘银色）', '5nm麒麟9000旗舰芯片 | 超感光徕卡电影影象', 46, 'https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/mate40-silver.png', 'https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/mate40-silver.png', '<p><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/mate40pro-detail.png\" style=\"max-width:100%;\"><br></p>', 6488, 6488, 10000, '跃见非凡', 0, 0, '2020-10-22 22:07:32', 0, '2020-10-22 22:12:37'),\n(10908, 'HUAWEI Mate 40 Pro 全网通5G手机 8GB+512GB（黄色）', '5nm麒麟9000旗舰芯片 | 超感光徕卡电影影象', 46, 'https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/mate40-white.png', 'https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/mate40-white.png', '<p><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/mate40pro-detail.png\" style=\"max-width:100%;\"><br></p>', 6488, 6488, 9999, '跃见非凡', 0, 0, '2020-10-22 22:08:42', 0, '2021-04-20 21:08:32'),\n(10909, 'HUAWEI Mate 40 Pro+ 5G 全网通 12GB+256GB（陶瓷白）', '5nm麒麟9000旗舰芯片 | 超感光徕卡电影影象', 46, 'https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/mate40pro%2B.png', 'https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/mate40pro%2B.png', '<p><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/mate40pro%2Bdetail.png\" style=\"max-width:100%;\"/><br/></p>', 7988, 7988, 10000, '跃见非凡', 1, 0, '2020-10-22 22:12:15', 0, '2021-04-20 22:44:29'),\n(10915, 'Apple iPhone 13 (A2634) 256GB 粉色', '解锁超能力！超先进双摄系统，超强耐用性，超劲续航大提升！', 47, 'https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/iphone-13-pink-select-2021.png', 'https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/iphone-13-pink-select-2021.png', '<p><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/85c43cbe4acb2b03.jpg\" style=\"max-width:100%;\" contenteditable=\"false\"/><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/0ea6fddd4677b090.jpg\" style=\"max-width:100%;\" contenteditable=\"false\"/><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/840becb199034f03.jpg\" style=\"max-width:100%;\" contenteditable=\"false\"/></p>', 6999, 6799, 9999, '解锁超能力', 0, 0, '2021-12-28 13:32:06', 0, '2021-12-28 13:32:06'),\n(10916, 'Apple iPhone 13 Pro 远峰蓝色', '自适应高刷新率，画面更流畅、响应更灵敏，电影效果模式随手拍大片！', 47, 'https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/iphone-13-pro-family-hero.png', 'https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/iphone-13-pro-family-hero.png', '<p><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/05b406882a48787a.jpg\" style=\"max-width:100%;\" contenteditable=\"false\"/><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/2c934a1d8fc57091.jpg\" style=\"max-width:100%;\" contenteditable=\"false\"/><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/e9f22bbfc2bf5fc4.jpg\" style=\"max-width:100%;\" contenteditable=\"false\"/></p>', 8199, 7999, 10000, '强得很', 0, 0, '2021-12-28 13:39:01', 0, '2021-12-28 19:00:56'),\n(10917, '苹果（Apple）iPad2021年新款第9代平板电脑', '10.2英寸 银色 64G标配【 视网膜屏 】', 34, 'https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/ipad-2021-hero-silver-wifi-select.png', 'https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/ipad-2021-hero-silver-wifi-select.png', '<p><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/9e9c2c35f5408347.jpg\" style=\"max-width:100%;\" contenteditable=\"false\"/><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/31068f767ecc3c3f.jpg\" style=\"max-width:100%;\" contenteditable=\"false\"/><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/58d884d8a9f55dab.jpg\" style=\"max-width:100%;\" contenteditable=\"false\"/></p>', 2999, 2599, 10000, '事事玩得转', 0, 0, '2021-12-28 13:56:33', 0, '2021-12-28 13:56:33'),\n(10918, 'Apple AirPods (第三代)', 'AirPods第三代搭载空间音频和自适应均衡全新登场!更长续航\\\\无线充电\\\\抗汗抗水等更多功能提供美妙体验!', 33, 'https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/MME73_AV4_GEO_CN.jpeg', 'https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/MME73_AV4_GEO_CN.jpeg', '<p><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/a43190fbff6ae1c5.jpg\" style=\"max-width:100%;\" contenteditable=\"false\"/></p>', 1599, 1399, 10000, '美妙新声', 0, 0, '2021-12-28 14:04:07', 0, '2021-12-28 18:58:35'),\n(10919, 'Apple Watch Series 7 智能手表', '全盘坚固表里如一！显示屏更大，耐用性提升，充电速度更快！', 33, 'https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/MKUU3_VW_34FR%2Bwatch-45-alum-midnight-cell-7s_VW_34FR_WF_CO.jpeg', 'https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/MKUU3_VW_34FR%2Bwatch-45-alum-midnight-cell-7s_VW_34FR_WF_CO.jpeg', '<p><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/d7f304bd8560a03a.jpg\" style=\"max-width:100%;\" contenteditable=\"false\"/></p>', 2999, 3399, 10000, '全屏先手', 0, 0, '2021-12-28 14:10:45', 0, '2021-12-28 17:45:38'),\n(10920, 'MacBook Pro 16英寸 M1 Pro芯片', '16G 512G 银色。M1Pro和M1Max芯片，霸气不封顶，120Hz高刷Mini-LED屏幕，更长续航。', 35, 'https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/mbp16-silver-select-202110_GEO_CN.jpeg', 'https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/mbp16-silver-select-202110_GEO_CN.jpeg', '<p><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/fa24954da9025b01.jpg\" style=\"max-width:100%;\" contenteditable=\"false\"/><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/44cf6445e5637e03.jpg\" style=\"max-width:100%;\" contenteditable=\"false\"/></p>', 20999, 18999, 9999, '强者的强', 0, 0, '2021-12-28 15:13:27', 0, '2021-12-28 17:48:16'),\n(10921, 'HUAWEI P50 Pro 4G全网通 8GB+512GB可可茶金', '麒麟9000芯片,万象双环设计', 46, 'https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/p50-gold.png', 'https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/p50-gold.png', '<p><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/b94beab1debab233.jpg\" style=\"max-width:100%;\" contenteditable=\"false\"/><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/c4361ecbc5371e1d.jpg\" style=\"max-width:100%;\" contenteditable=\"false\"/><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/43dab8900a382d33.jpg\" style=\"max-width:100%;\" contenteditable=\"false\"/><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/5bd1c0e1cb4b16c5.jpg\" style=\"max-width:100%;\" contenteditable=\"false\"/><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/50afb0c192d2b725.jpg\" style=\"max-width:100%;\" contenteditable=\"false\"/><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/33b904994deefd6a.jpg\" style=\"max-width:100%;\" contenteditable=\"false\"/><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/f9cfa431ba024d0e.jpg\" style=\"max-width:100%;\" contenteditable=\"false\"/></p>', 7888, 7488, 9999, '万象新生', 0, 0, '2021-12-28 15:23:01', 0, '2021-12-28 17:45:10'),\n(10922, 'HUAWEI P50 雪域白', '骁龙888,4G全网通,原色双影像单元,万象双环设计', 46, 'https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/p50-white.png', 'https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/p50-white.png', '<p><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/b94beab1debab233.jpg\" style=\"max-width:100%;\" contenteditable=\"false\"/><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/c4361ecbc5371e1d.jpg\" style=\"max-width:100%;\" contenteditable=\"false\"/><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/43dab8900a382d33.jpg\" style=\"max-width:100%;\" contenteditable=\"false\"/><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/5bd1c0e1cb4b16c5.jpg\" style=\"max-width:100%;\" contenteditable=\"false\"/><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/50afb0c192d2b725.jpg\" style=\"max-width:100%;\" contenteditable=\"false\"/><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/33b904994deefd6a.jpg\" style=\"max-width:100%;\" contenteditable=\"false\"/><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/f9cfa431ba024d0e.jpg\" style=\"max-width:100%;\" contenteditable=\"false\"/></p>', 4888, 4488, 10000, '万象新生', 0, 0, '2021-12-28 15:45:32', 0, '2021-12-28 18:57:21'),\n(10923, 'HUAWEI P50 Pocket 4G全网通 超光谱影像系统 创新双屏操作体验 P50宝盒 8GB+256GB曜石黑华为折叠屏手机', '华为P50Pocket新品，华为年度旗舰折叠屏手机', 46, 'https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/p50-pocket-black.png', 'https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/p50-pocket-black.png', '<p><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/6bcd4bf18a7ffb3a.png\" style=\"max-width:100%;\" contenteditable=\"false\"/><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/ade4a041465d5504.png\" style=\"max-width:100%;\" contenteditable=\"false\"/><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/bed941b7f804cc35.jpg\" style=\"max-width:100%;\" contenteditable=\"false\"/><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/d660399655eb3fcd.jpg\" style=\"max-width:100%;\" contenteditable=\"false\"/><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/ae3ec76c1ec49fd5.jpg\" style=\"max-width:100%;\" contenteditable=\"false\"/><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/d844647031f6ad64.jpg\" style=\"max-width:100%;\" contenteditable=\"false\"/><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/cfe1e222444ab974.jpg\" style=\"max-width:100%;\" contenteditable=\"false\"/></p>', 9088, 8988, 10000, '折叠万象', 0, 0, '2021-12-28 15:57:12', 0, '2021-12-28 15:57:12'),\n(10924, 'HUAWEI P50 Pocket 4G全网通 超光谱影像系统 创新双屏操作体验 P50宝盒 12GB+512GB晶钻白华为折叠屏手机', '华为P50Pocket新品，华为年度旗舰折叠屏手机', 46, 'https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/p50-pocket-white.png', 'https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/p50-pocket-white.png', '<p><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/6bcd4bf18a7ffb3a.png\" style=\"max-width:100%;\" contenteditable=\"false\"/><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/ade4a041465d5504.png\" style=\"max-width:100%;\" contenteditable=\"false\"/><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/bed941b7f804cc35.jpg\" style=\"max-width:100%;\" contenteditable=\"false\"/><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/d660399655eb3fcd.jpg\" style=\"max-width:100%;\" contenteditable=\"false\"/><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/ae3ec76c1ec49fd5.jpg\" style=\"max-width:100%;\" contenteditable=\"false\"/><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/d844647031f6ad64.jpg\" style=\"max-width:100%;\" contenteditable=\"false\"/><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/cfe1e222444ab974.jpg\" style=\"max-width:100%;\" contenteditable=\"false\"/></p>', 12988, 10988, 10000, '折叠万象', 0, 0, '2021-12-28 16:00:58', 0, '2021-12-28 16:00:58'),\n(10925, 'HUAWEI P50 Pocket 4G全网通 超光谱影像系统 创新双屏操作体验 P50宝盒 12GB+512GB鎏光金华为折叠屏手机', '华为P50Pocket新品，华为年度旗舰折叠屏手机', 46, 'https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/p50-pocket-gold.png', 'https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/p50-pocket-gold.png', '<p><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/6bcd4bf18a7ffb3a.png\" style=\"max-width:100%;\" contenteditable=\"false\"/><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/ade4a041465d5504.png\" style=\"max-width:100%;\" contenteditable=\"false\"/><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/bed941b7f804cc35.jpg\" style=\"max-width:100%;\" contenteditable=\"false\"/><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/d660399655eb3fcd.jpg\" style=\"max-width:100%;\" contenteditable=\"false\"/><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/ae3ec76c1ec49fd5.jpg\" style=\"max-width:100%;\" contenteditable=\"false\"/><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/d844647031f6ad64.jpg\" style=\"max-width:100%;\" contenteditable=\"false\"/><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/cfe1e222444ab974.jpg\" style=\"max-width:100%;\" contenteditable=\"false\"/></p>', 12988, 10988, 10000, '折叠万象', 0, 0, '2021-12-28 16:02:50', 0, '2021-12-28 16:02:50'),\n(10926, '华为笔记本电脑MateBook X Pro 2022', '原色全面屏，轻薄高能，超级终端', 33, 'https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/MateBook%20X%20Pro.png', 'https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/MateBook%20X%20Pro.png', '<p><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/42abcf828cfce9a0.jpg\" style=\"max-width:100%;\" contenteditable=\"false\"/><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/9a85d2c903d08c2b.jpg\" style=\"max-width:100%;\" contenteditable=\"false\"/><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/32d396f4136a3526.jpg\" style=\"max-width:100%;\" contenteditable=\"false\"/><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/dc55c13b609732a9.jpg\" style=\"max-width:100%;\" contenteditable=\"false\"/><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/676e439bbe89e841.jpg\" style=\"max-width:100%;\" contenteditable=\"false\"/></p>', 11699, 10499, 10000, '入目惊鸿', 0, 0, '2021-12-28 17:31:30', 0, '2021-12-28 17:46:17'),\n(10927, 'HUAWEI MatePad Pro 12.6英寸', '8+256GB WIFI曜石灰 麒麟9000E OLED全面屏平板电脑', 34, 'https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/matepad-pro.png', 'https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/matepad-pro.png', '<p><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/bf678c398863f569.jpg\" style=\"max-width:100%;\" contenteditable=\"false\"/><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/a636bbede7beb83f.jpg\" style=\"max-width:100%;\" contenteditable=\"false\"/><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/116d1b95df07ba8f.jpg\" style=\"max-width:100%;\" contenteditable=\"false\"/></p>', 4899, 4699, 10000, '创造无界', 0, 0, '2021-12-28 17:50:31', 0, '2021-12-28 18:56:13'),\n(10928, 'HUAWEI WATCH 3 Pro智能手表', '运动智能手表 尊享款 eSIM独立通话强劲续航心脏与呼吸健康', 33, 'https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/watch-3-pro.png', 'https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/watch-3-pro.png', '<p><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/9229ee8ad59d2707.jpg\" style=\"max-width:100%;\" contenteditable=\"false\"/><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/7ee803abab7733a0.jpg\" style=\"max-width:100%;\" contenteditable=\"false\"/><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/90f7da3bba0bb301.jpg\" style=\"max-width:100%;\" contenteditable=\"false\"/></p>', 3999, 3899, 10000, '一表万象', 0, 0, '2021-12-28 18:39:05', 0, '2021-12-28 18:39:05'),\n(10929, '华为 HUAWEI Sound X 2021', '智能音箱幻彩光随声动', 33, 'https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/soundx.png', 'https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/soundx.png', '<p><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/899eb05d02c24fd0.jpg\" style=\"max-width:100%;\" contenteditable=\"false\"/><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/d522a0b27cbfc464.jpg\" style=\"max-width:100%;\" contenteditable=\"false\"/><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/73f5db99149ca4df.jpg\" style=\"max-width:100%;\" contenteditable=\"false\"/><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/f0958fdcfb630482.jpg\" style=\"max-width:100%;\" contenteditable=\"false\"/><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/161bdee0ba93b99c.jpg\" style=\"max-width:100%;\" contenteditable=\"false\"/></p>', 2399, 2199, 10000, '声声出色', 0, 0, '2021-12-28 18:41:39', 0, '2021-12-28 18:41:39'),\n(10930, '华为FreeBuds Pro无线耳机', '主动降噪真无线蓝牙耳机/入耳式耳机/环境音/人声透传/双连接', 33, 'https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/freebuds-pro.png', 'https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/freebuds-pro.png', '<p><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/3621e0fafb28f2fd.jpg\" style=\"max-width:100%;\" contenteditable=\"false\"/><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/e7ff8a58828263bc.jpg\" style=\"max-width:100%;\" contenteditable=\"false\"/><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/5d2f992b8d156647.jpg\" style=\"max-width:100%;\" contenteditable=\"false\"/><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/75d020ee6f3c8876.jpg\" style=\"max-width:100%;\" contenteditable=\"false\"/><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/a8a3313370c605ba.jpg\" style=\"max-width:100%;\" contenteditable=\"false\"/><img src=\"https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/goods-detail/3f41e81e866bcffc.jpg\" style=\"max-width:100%;\" contenteditable=\"false\"/></p>', 899, 749, 10000, '动态降噪 听我想听', 0, 0, '2021-12-28 18:47:15', 0, '2021-12-28 18:47:15');\n\n-- for AT mode you must to init this sql for you business database. the seata server not need it.\nCREATE TABLE IF NOT EXISTS `undo_log`\n(\n    `branch_id`     BIGINT       NOT NULL COMMENT 'branch transaction id',\n    `xid`           VARCHAR(128) NOT NULL COMMENT 'global transaction id',\n    `context`       VARCHAR(128) NOT NULL COMMENT 'undo_log context,such as serialization',\n    `rollback_info` LONGBLOB     NOT NULL COMMENT 'rollback info',\n    `log_status`    INT(11)      NOT NULL COMMENT '0:normal status,1:defense status',\n    `log_created`   DATETIME(6)  NOT NULL COMMENT 'create datetime',\n    `log_modified`  DATETIME(6)  NOT NULL COMMENT 'modify datetime',\n    UNIQUE KEY `ux_undo_log` (`xid`, `branch_id`)\n    ) ENGINE = InnoDB\n    AUTO_INCREMENT = 1\n    DEFAULT CHARSET = utf8mb4 COMMENT ='AT transaction mode undo table';"
  },
  {
    "path": "static-files/newbee_mall_cloud_order_db.sql",
    "content": "# 创建订单服务所需数据\nCREATE DATABASE /*!32312 IF NOT EXISTS*/`newbee_mall_cloud_order_db` /*!40100 DEFAULT CHARACTER SET utf8 */;\n\nUSE `newbee_mall_cloud_order_db`;\n\nDROP TABLE IF EXISTS `tb_newbee_mall_order`;\n\nCREATE TABLE `tb_newbee_mall_order` (\n                                        `order_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '订单表主键id',\n                                        `order_no` varchar(20) NOT NULL DEFAULT '' COMMENT '订单号',\n                                        `user_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '用户主键id',\n                                        `total_price` int(11) NOT NULL DEFAULT '1' COMMENT '订单总价',\n                                        `pay_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '支付状态:0.未支付,1.支付成功,-1:支付失败',\n                                        `pay_type` tinyint(4) NOT NULL DEFAULT '0' COMMENT '0.无 1.支付宝支付 2.微信支付',\n                                        `pay_time` timestamp DEFAULT NULL COMMENT '支付时间',\n                                        `order_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '订单状态:0.待支付 1.已支付 2.配货完成 3:出库成功 4.交易成功 -1.手动关闭 -2.超时关闭 -3.商家关闭',\n                                        `extra_info` varchar(100) NOT NULL DEFAULT '' COMMENT '订单body',\n                                        `is_deleted` tinyint(4) NOT NULL DEFAULT '0' COMMENT '删除标识字段(0-未删除 1-已删除)',\n                                        `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',\n                                        `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最新修改时间',\n                                        PRIMARY KEY (`order_id`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;\n\n# Dump of table tb_newbee_mall_order_address\n# ------------------------------------------------------------\n\nDROP TABLE IF EXISTS `tb_newbee_mall_order_address`;\n\nCREATE TABLE `tb_newbee_mall_order_address` (\n                                                `order_id` bigint(20) NOT NULL,\n                                                `user_name` varchar(30) NOT NULL DEFAULT '' COMMENT '收货人姓名',\n                                                `user_phone` varchar(11) NOT NULL DEFAULT '' COMMENT '收货人手机号',\n                                                `province_name` varchar(32) NOT NULL DEFAULT '' COMMENT '省',\n                                                `city_name` varchar(32) NOT NULL DEFAULT '' COMMENT '城',\n                                                `region_name` varchar(32) NOT NULL DEFAULT '' COMMENT '区',\n                                                `detail_address` varchar(64) NOT NULL DEFAULT '' COMMENT '收件详细地址(街道/楼宇/单元)',\n                                                PRIMARY KEY (`order_id`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='订单收货地址关联表';\n\n# Dump of table tb_newbee_mall_order_item\n# ------------------------------------------------------------\n\nDROP TABLE IF EXISTS `tb_newbee_mall_order_item`;\n\nCREATE TABLE `tb_newbee_mall_order_item` (\n                                             `order_item_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '订单关联购物项主键id',\n                                             `order_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '订单主键id',\n                                             `goods_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '关联商品id',\n                                             `goods_name` varchar(200) NOT NULL DEFAULT '' COMMENT '下单时商品的名称(订单快照)',\n                                             `goods_cover_img` varchar(200) NOT NULL DEFAULT '' COMMENT '下单时商品的主图(订单快照)',\n                                             `selling_price` int(11) NOT NULL DEFAULT '1' COMMENT '下单时商品的价格(订单快照)',\n                                             `goods_count` int(11) NOT NULL DEFAULT '1' COMMENT '数量(订单快照)',\n                                             `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',\n                                             PRIMARY KEY (`order_item_id`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;\n\nDROP TABLE IF EXISTS `tb_newbee_mall_user_address`;\n\nCREATE TABLE `tb_newbee_mall_user_address` (\n                                               `address_id` bigint(20) NOT NULL AUTO_INCREMENT,\n                                               `user_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '用户主键id',\n                                               `user_name` varchar(30) NOT NULL DEFAULT '' COMMENT '收货人姓名',\n                                               `user_phone` varchar(11) NOT NULL DEFAULT '' COMMENT '收货人手机号',\n                                               `default_flag` tinyint(4) NOT NULL DEFAULT '0' COMMENT '是否为默认 0-非默认 1-是默认',\n                                               `province_name` varchar(32) NOT NULL DEFAULT '' COMMENT '省',\n                                               `city_name` varchar(32) NOT NULL DEFAULT '' COMMENT '城',\n                                               `region_name` varchar(32) NOT NULL DEFAULT '' COMMENT '区',\n                                               `detail_address` varchar(64) NOT NULL DEFAULT '' COMMENT '收件详细地址(街道/楼宇/单元)',\n                                               `is_deleted` tinyint(4) NOT NULL DEFAULT '0' COMMENT '删除标识字段(0-未删除 1-已删除)',\n                                               `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '添加时间',\n                                               `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',\n                                               PRIMARY KEY (`address_id`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='收货地址表';\n\n-- for AT mode you must to init this sql for you business database. the seata server not need it.\nCREATE TABLE IF NOT EXISTS `undo_log`\n(\n    `branch_id`     BIGINT       NOT NULL COMMENT 'branch transaction id',\n    `xid`           VARCHAR(128) NOT NULL COMMENT 'global transaction id',\n    `context`       VARCHAR(128) NOT NULL COMMENT 'undo_log context,such as serialization',\n    `rollback_info` LONGBLOB     NOT NULL COMMENT 'rollback info',\n    `log_status`    INT(11)      NOT NULL COMMENT '0:normal status,1:defense status',\n    `log_created`   DATETIME(6)  NOT NULL COMMENT 'create datetime',\n    `log_modified`  DATETIME(6)  NOT NULL COMMENT 'modify datetime',\n    UNIQUE KEY `ux_undo_log` (`xid`, `branch_id`)\n    ) ENGINE = InnoDB\n    AUTO_INCREMENT = 1\n    DEFAULT CHARSET = utf8mb4 COMMENT ='AT transaction mode undo table';"
  },
  {
    "path": "static-files/newbee_mall_cloud_recommend_db.sql",
    "content": "# 创建推荐服务所需数据\nCREATE DATABASE /*!32312 IF NOT EXISTS*/`newbee_mall_cloud_recommend_db` /*!40100 DEFAULT CHARACTER SET utf8 */;\n\nUSE `newbee_mall_cloud_recommend_db`;\n\n# 创建首页推荐表\n\nDROP TABLE IF EXISTS `tb_newbee_mall_index_config`;\n\nCREATE TABLE `tb_newbee_mall_index_config` (\n                                               `config_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '首页配置项主键id',\n                                               `config_name` varchar(50) NOT NULL DEFAULT '' COMMENT '显示字符(配置搜索时不可为空，其他可为空)',\n                                               `config_type` tinyint(4) NOT NULL DEFAULT '0' COMMENT '1-搜索框热搜 2-搜索下拉框热搜 3-(首页)热销商品 4-(首页)新品上线 5-(首页)为你推荐',\n                                               `goods_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '商品id 默认为0',\n                                               `redirect_url` varchar(100) NOT NULL DEFAULT '##' COMMENT '点击后的跳转地址(默认不跳转)',\n                                               `config_rank` int(11) NOT NULL DEFAULT '0' COMMENT '排序值(字段越大越靠前)',\n                                               `is_deleted` tinyint(4) NOT NULL DEFAULT '0' COMMENT '删除标识字段(0-未删除 1-已删除)',\n                                               `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',\n                                               `create_user` int(11) NOT NULL DEFAULT '0' COMMENT '创建者id',\n                                               `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最新修改时间',\n                                               `update_user` int(11) DEFAULT '0' COMMENT '修改者id',\n                                               PRIMARY KEY (`config_id`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;\n\n# 新增首页推荐表数据\n\nINSERT INTO tb_newbee_mall_index_config\n(config_name, config_type, goods_id, redirect_url, config_rank, is_deleted, create_time, create_user, update_time, update_user)\nVALUES\n('热销商品 iPhone 12', 3, 10906, '##', 201, 0, '2021-03-08 18:55:49', 0, '2021-03-08 18:55:49', 0),\n('热销商品 华为Mate40 Pro', 3, 10908, '##', 300, 0, '2021-03-08 18:55:49', 0, '2021-03-08 18:55:49', 0),\n('新品上线 MackBook2021', 4, 10920, '##', 180, 0, '2021-03-08 18:55:49', 0, '2021-03-08 18:55:49', 0),\n('新品上线 华为 P50 Pro', 4, 10921, '##', 160, 0, '2021-03-08 18:55:49', 0, '2021-03-08 18:55:49', 0),\n('新品上线 Apple Watch', 4, 10919, '##', 101, 0, '2021-03-08 18:55:49', 0, '2021-03-08 18:55:49', 0),\n('纪梵希高定香榭天鹅绒唇膏', 5, 10233, '##', 80, 0, '2021-03-08 18:55:49', 0, '2021-03-08 18:55:49', 0),\n('P50 白色', 5, 10922, '##', 102, 0, '2021-03-08 18:55:49', 0, '2021-03-08 18:55:49', 0),\n('free buds pro', 5, 10930, '##', 102, 0, '2021-03-08 18:55:49', 0, '2021-03-08 18:55:49', 0),\n('iPhone 13', 5, 10916, '##', 101, 0, '2021-03-08 18:55:49', 0, '2021-03-08 18:55:49', 0),\n('华为Mate40 Pro', 5, 10907, '##', 80, 0, '2021-03-08 18:55:49', 0, '2021-03-08 18:55:49', 0),\n('MacBook Pro 2021', 5, 10920, '##', 100, 0, '2021-03-08 18:55:49', 0, '2021-03-08 18:55:49', 0),\n('WATCH 3 Pro', 5, 10928, '##', 99, 0, '2021-03-08 18:55:49', 0, '2021-03-08 18:55:49', 0),\n('塑料浴室座椅', 5, 10154, '##', 80, 0, '2021-03-08 18:55:49', 0, '2021-03-08 18:55:49', 0),\n('华为 soundx', 5, 10929, '##', 100, 0, '2021-03-08 18:55:49', 0, '2021-03-08 18:55:49', 0),\n('matepad pro', 5, 10906, '##', 0, 0, '2021-03-08 18:55:49', 0, '2021-03-08 18:55:49', 0),\n('热销商品 P40', 3, 10902, '##', 200, 0, '2021-03-08 18:55:49', 0, '2021-03-08 18:55:49', 0),\n('新品上线 华为 P50 Pocket', 4, 10925, '##', 200, 0, '2021-03-08 18:55:49', 0, '2021-03-08 18:55:49', 0),\n('新品上线 华为Mate X Pro', 4, 10926, '##', 200, 0, '2021-03-08 18:55:49', 0, '2021-03-08 18:55:49', 0),\n('华为 Mate 30 Pro', 5, 10927, '##', 101, 0, '2021-03-08 18:55:49', 0, '2021-03-08 18:55:49', 0),\n('新品上线 iPhone13', 4, 10915, '##', 190, 0, '2021-03-08 18:55:49', 0, '2021-03-08 18:55:49', 0),\n('Air Pods 第三代', 3, 10918, '##', 301, 0, '2021-03-08 18:55:49', 0, '2021-03-08 18:55:49', 0);\n\nDROP TABLE IF EXISTS `tb_newbee_mall_carousel`;\n\n# 创建轮播图表\n\nCREATE TABLE `tb_newbee_mall_carousel` (\n                                           `carousel_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '首页轮播图主键id',\n                                           `carousel_url` varchar(100) NOT NULL DEFAULT '' COMMENT '轮播图',\n                                           `redirect_url` varchar(100) NOT NULL DEFAULT '''##''' COMMENT '点击后的跳转地址(默认不跳转)',\n                                           `carousel_rank` int(11) NOT NULL DEFAULT '0' COMMENT '排序值(字段越大越靠前)',\n                                           `is_deleted` tinyint(4) NOT NULL DEFAULT '0' COMMENT '删除标识字段(0-未删除 1-已删除)',\n                                           `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',\n                                           `create_user` int(11) NOT NULL DEFAULT '0' COMMENT '创建者id',\n                                           `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',\n                                           `update_user` int(11) NOT NULL DEFAULT '0' COMMENT '修改者id',\n                                           PRIMARY KEY (`carousel_id`) USING BTREE\n) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;\n\n# 新增轮播图数据\n\nINSERT INTO `tb_newbee_mall_carousel` (`carousel_id`, `carousel_url`, `redirect_url`, `carousel_rank`, `is_deleted`, `create_time`, `create_user`, `update_time`, `update_user`)\nVALUES\n(1,'https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/banner2.jpg','##',200,1,'2021-08-23 17:50:45',0,'2021-11-10 00:23:01',0),\n(2,'https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/banner1.png','https://juejin.cn/book/7085254558678515742',13,0,'2021-11-29 00:00:00',0,'2021-11-29 00:00:00',0),\n(3,'https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/banner3.jpg','##',0,1,'2021-09-18 18:26:38',0,'2021-11-10 00:23:01',0),\n(5,'https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/banner2.png','https://juejin.cn/book/7085254558678515742',0,0,'2021-11-29 00:00:00',0,'2021-11-29 00:00:00',0),\n(6,'https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/banner1.png','##',101,1,'2021-09-19 23:37:40',0,'2021-11-07 00:15:52',0),\n(7,'https://newbee-mall.oss-cn-beijing.aliyuncs.com/images/banner2.png','##',99,1,'2021-09-19 23:37:58',0,'2021-10-22 00:15:01',0);"
  },
  {
    "path": "static-files/newbee_mall_cloud_user_db.sql",
    "content": "# 创建用户服务所需数据\nCREATE DATABASE /*!32312 IF NOT EXISTS*/`newbee_mall_cloud_user_db` /*!40100 DEFAULT CHARACTER SET utf8 */;\n\nUSE `newbee_mall_cloud_user_db`;\n\nDROP TABLE IF EXISTS `tb_newbee_mall_admin_user`;\n\n# 创建管理员用户表\n\nCREATE TABLE `tb_newbee_mall_admin_user` (\n                                             `admin_user_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '管理员id',\n                                             `login_user_name` varchar(50) NOT NULL COMMENT '管理员登陆名称',\n                                             `login_password` varchar(50) NOT NULL COMMENT '管理员登陆密码',\n                                             `nick_name` varchar(50) NOT NULL COMMENT '管理员显示昵称',\n                                             `locked` tinyint(4) DEFAULT '0' COMMENT '是否锁定 0未锁定 1已锁定无法登陆',\n                                             PRIMARY KEY (`admin_user_id`) USING BTREE\n) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;\n\n# 新增管理员用户数据\n\nINSERT INTO `tb_newbee_mall_admin_user` (`admin_user_id`, `login_user_name`, `login_password`, `nick_name`, `locked`)\nVALUES\n(1,'admin','e10adc3949ba59abbe56e057f20f883e','十三',0),\n(2,'newbee-admin1','e10adc3949ba59abbe56e057f20f883e','新蜂01',0),\n(3,'newbee-admin2','e10adc3949ba59abbe56e057f20f883e','新蜂02',0);\n\nDROP TABLE IF EXISTS `tb_newbee_mall_user`;\n\n# 创建商城用户表\n\nCREATE TABLE `tb_newbee_mall_user` (\n                                       `user_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '用户主键id',\n                                       `nick_name` varchar(50) NOT NULL DEFAULT '' COMMENT '用户昵称',\n                                       `login_name` varchar(11) NOT NULL DEFAULT '' COMMENT '登陆名称(默认为手机号)',\n                                       `password_md5` varchar(32) NOT NULL DEFAULT '' COMMENT 'MD5加密后的密码',\n                                       `introduce_sign` varchar(100) NOT NULL DEFAULT '' COMMENT '个性签名',\n                                       `is_deleted` tinyint(4) NOT NULL DEFAULT '0' COMMENT '注销标识字段(0-正常 1-已注销)',\n                                       `locked_flag` tinyint(4) NOT NULL DEFAULT '0' COMMENT '锁定标识字段(0-未锁定 1-已锁定)',\n                                       `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '注册时间',\n                                       PRIMARY KEY (`user_id`) USING BTREE\n) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;\n\n# 新增商城用户数据\n\nINSERT INTO `tb_newbee_mall_user` (`user_id`, `nick_name`, `login_name`, `password_md5`, `introduce_sign`, `is_deleted`, `locked_flag`, `create_time`)\nVALUES\n(1,'十三','13700002703','e10adc3949ba59abbe56e057f20f883e','我不怕千万人阻挡，只怕自己投降',0,0,'2022-05-22 08:44:57'),\n(6,'陈尼克','13711113333','e10adc3949ba59abbe56e057f20f883e','测试用户陈尼克',0,0,'2022-05-22 08:44:57');"
  }
]