This commit is contained in:
fengtianyangyang 2022-04-07 17:13:04 +08:00
commit ba57f19ee7
92 changed files with 64312 additions and 1096 deletions

59666
DB/lilishop.sql Normal file

File diff suppressed because one or more lines are too long

View File

@ -6,7 +6,7 @@ ALTER TABLE li_distribution ADD settlement_bank_branch_name varchar ( 200 );
/** 文章分类添加默认值**/
ALTER TABLE li_article_category alter column sort set default 0;
/** 添加分销提现菜单**/
INSERT INTO `lilishop`.`li_menu`(`id`, `create_by`, `create_time`, `delete_flag`, `update_by`, `update_time`, `description`, `front_route`, `icon`, `level`, `name`, `parent_id`, `path`, `sort_order`, `title`, `front_component`) VALUES (1410862675914764290, 'admin', '2021-07-02 15:27:29', b'0', 'admin', '2021-07-02 15:27:45', 'null', 'distribution/distributionCash', '', 2, 'distributionCash', '1374173575405109248', 'distributionCash', 5.00, '分销提现', 'null');
INSERT INTO `rxshop`.`li_menu`(`id`, `create_by`, `create_time`, `delete_flag`, `update_by`, `update_time`, `description`, `front_route`, `icon`, `level`, `name`, `parent_id`, `path`, `sort_order`, `title`, `front_component`) VALUES (1410862675914764290, 'admin', '2021-07-02 15:27:29', b'0', 'admin', '2021-07-02 15:27:45', 'null', 'distribution/distributionCash', '', 2, 'distributionCash', '1374173575405109248', 'distributionCash', 5.00, '分销提现', 'null');
/** 促销商品添加商品类型**/
ALTER TABLE li_promotion_goods ADD goods_type varchar (200);
@ -16,7 +16,7 @@ update li_member_points_history set point_type = 'INCREASE' where point_type=1;
update li_member_points_history set point_type = 'REDUCE' where point_type=0;
/** 添加分词管理菜单*/
INSERT INTO `lilishop`.`li_menu` (`id`, `create_by`, `create_time`, `delete_flag`, `update_by`, `update_time`, `description`, `front_route`, `icon`, `level`, `name`, `parent_id`, `path`, `sort_order`, `title`, `front_component`) VALUES (1349247640584085511, 'admin', '2021-01-13 14:51:20', b'0', 'admin', '2021-02-25 09:02:59', 'null', 'customWords/index', 'ios-american-football', 2, 'customWords', '1349237129847005184', 'customWords', 8.00, '分词管理', 'null');
INSERT INTO `rxshop`.`li_menu` (`id`, `create_by`, `create_time`, `delete_flag`, `update_by`, `update_time`, `description`, `front_route`, `icon`, `level`, `name`, `parent_id`, `path`, `sort_order`, `title`, `front_component`) VALUES (1349247640584085511, 'admin', '2021-01-13 14:51:20', b'0', 'admin', '2021-02-25 09:02:59', 'null', 'customWords/index', 'ios-american-football', 2, 'customWords', '1349237129847005184', 'customWords', 8.00, '分词管理', 'null');
/** 修改会员评价店铺图片字段类型 **/
alter table li_member_evaluation modify column reply_image text;
@ -25,4 +25,4 @@ alter table li_member_evaluation modify column reply_image text;
alter table li_after_sale modify column after_sale_image text;
/** 提现申请审核sql **/
INSERT INTO `lilishop`.`li_menu`(`id`, `create_by`, `create_time`, `delete_flag`, `update_by`, `update_time`, `description`, `front_route`, `icon`, `level`, `name`, `parent_id`, `path`, `sort_order`, `title`, `front_component`) VALUES (1367042804944994305, 'admin', '2021-03-03 09:22:58', b'0', NULL, NULL, NULL, 'member/advance/withdrawApply', 'ios-alert', 2, 'withdrawApply', '1367042490443497472', 'withdrawApply', 1.00, '提现申请', NULL);
INSERT INTO `rxshop`.`li_menu`(`id`, `create_by`, `create_time`, `delete_flag`, `update_by`, `update_time`, `description`, `front_route`, `icon`, `level`, `name`, `parent_id`, `path`, `sort_order`, `title`, `front_component`) VALUES (1367042804944994305, 'admin', '2021-03-03 09:22:58', b'0', NULL, NULL, NULL, 'member/advance/withdrawApply', 'ios-alert', 2, 'withdrawApply', '1367042490443497472', 'withdrawApply', 1.00, '提现申请', NULL);

677
LICENSE
View File

@ -1,3 +1,4 @@
<<<<<<< HEAD
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
@ -672,3 +673,679 @@ may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
=======
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<http://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
>>>>>>> ae0c4aea12996d3d72eca7c6ccdc97922373e4d7

View File

@ -6,6 +6,12 @@
#### 欢迎交流需求,交流业务,交流技术(基础问题自行解决,进群先看文档后提问)
<<<<<<< HEAD
##### 交流 qq 1群 961316482已满
##### 交流 qq 2群 875294241
=======
##### 交流 qq 1群 961316482已满
<a target="_blank" href="https://qm.qq.com/cgi-bin/qm/qr?k=BAhURE3DG2YWhQk6kRxVapbLykqMoPS8&jump_from=webapi"><img border="0" src="https://pub.idqqimg.com/wpa/images/group.png" alt="Lilishop交流群" title="Lilishop交流群">点击快捷加群</a>
@ -13,6 +19,7 @@
##### 交流 qq 2群 875294241
<a target="_blank" href="https://qm.qq.com/cgi-bin/qm/qr?k=_lrekOvr5k2p5uTn5GRidI-chKEmpCX3&jump_from=webapi"><img border="0" src="https://pub.idqqimg.com/wpa/images/group.png" alt="Lilishop交流群2群" title="Lilishop交流群2群">点击快捷加群</a>
>>>>>>> ae0c4aea12996d3d72eca7c6ccdc97922373e4d7
##### 体验 公众号/小程序/APP 体验,扫描二维码

View File

@ -32,10 +32,10 @@
<artifactId>logstash-logback-encoder</artifactId>
<version>${logstash-logback-encoder}</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-starter-mail</artifactId>-->
<!-- </dependency> -->
<!-- <dependency>-->
<!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-starter-mail</artifactId>-->
<!-- </dependency> -->
</dependencies>
<build>

View File

@ -16,5 +16,9 @@ spring.mail.username=1814994716@qq.com
spring.mail.password=abcdefg123456!@#$%^
# 日志文件路径
logging.file.path=lili-logs/admin
<<<<<<< HEAD
lili.data.logstash.server=106.124.130.167:4560
=======
>>>>>>> ae0c4aea12996d3d72eca7c6ccdc97922373e4d7
# 文件格式
logging.pattern.file=%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%5p) %clr(${PID}){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n%wEx

View File

@ -36,12 +36,15 @@ public class PageBuyerController {
public ResultMessage<PageDataVO> getIndex(@RequestParam String clientType) {
PageDataDTO pageDataDTO = new PageDataDTO(PageEnum.INDEX.name());
pageDataDTO.setPageClientType(clientType);
return ResultUtil.data(pageService.getPageData(pageDataDTO));
PageDataVO pageDataVO=pageService.getPageData(pageDataDTO);
return ResultUtil.data(pageDataVO);
}
@ApiOperation(value = "获取页面数据")
@GetMapping
public ResultMessage<PageDataVO> get(PageDataDTO pageDataDTO) {
return ResultUtil.data(pageService.getPageData(pageDataDTO));
PageDataVO pageDataVO=pageService.getPageData(pageDataDTO);
return ResultUtil.data(pageDataVO);
}
}

View File

@ -45,6 +45,16 @@ public class MemberBuyerController {
private Cache cache;
@ApiOperation(value = "手机号登录")
@ApiImplicitParams({
@ApiImplicitParam(name = "mobile", value = "手机号", required = true, paramType = "query")
})
@PostMapping("/phoneLogin")
public ResultMessage<Object> phoneLogin(@NotNull(message = "手机号为空") @RequestParam String mobile) {
return ResultUtil.data(memberService.mobilePhoneLogin(mobile));
}
@ApiOperation(value = "登录接口")
@ApiImplicitParams({
@ApiImplicitParam(name = "username", value = "用户名", required = true, paramType = "query"),

View File

@ -1,6 +1,5 @@
server:
port: 8888
port: 8885
servlet:
context-path: /
#
@ -52,9 +51,9 @@ spring:
# Redis
redis:
host: 127.0.0.1
host: 120.71.145.134
port: 6379
password: lilishop
password: ekLhvPGraSj8DGO0
lettuce:
pool:
# 连接池最大连接数(使用负值表示没有限制) 默认 8
@ -73,9 +72,9 @@ spring:
default-datasource:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/lilishop?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
username: root
password: lilishop
url: jdbc:mysql://120.71.183.195:3306/zyt_shop?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&allowPublicKeyRetrieval=true&verifyServerCertificate=false&useSSL=false
username: zyt_shop
password: Gb84505016@zytshop
maxActive: 50
initialSize: 10
maxWait: 60000
@ -162,8 +161,8 @@ ignored:
# Swagger界面内容配置
swagger:
title: lili API接口文档
description: lili Api Documentation
title: API接口文档
description: Api Documentation
version: 1.0.0
termsOfServiceUrl: https://pickmall.cn
contact:
@ -186,7 +185,7 @@ logging:
# 输出级别
level:
root: info
# org.springframework: debug
# org.springframework: debug
file:
# 指定路径
path: lili-logs
@ -203,7 +202,7 @@ jasypt:
lili:
system:
isDemoSite: true
isDemoSite: false
statistics:
# 在线人数统计 X 小时。这里设置48即统计过去48小时每小时在线人数
onlineMember: 48
@ -221,10 +220,10 @@ lili:
admin: https://admin-b2b2c.pickmall.cn
#api地址
api:
buyer: https://buyer-api.pickmall.cn
common: https://common-api.pickmall.cn
manager: https://admin-api.pickmall.cn
store: https://store-api.pickmall.cn
buyer: https://zshop-api.sx1788.cn/buyer-api
common: https://zshop-api.sx1788.cn/common-api
manager: https://zshop-api.sx1788.cn/manager-api
store: https://zshop-api.sx1788.cn/seller-api
# jwt 细节设定
jwt-setting:
@ -243,7 +242,7 @@ lili:
data:
elasticsearch:
cluster-name: elasticsearch
cluster-nodes: 127.0.0.1:9200
cluster-nodes: 106.124.130.167:9200
index:
number-of-replicas: 0
number-of-shards: 3
@ -253,7 +252,7 @@ lili:
# username: elastic
# password: LiLiShopES
logstash:
server: 192.168.0.116:4560
server: 106.124.130.167:4560
rocketmq:
promotion-topic: lili_promotion_topic
promotion-group: lili_promotion_group
@ -274,7 +273,7 @@ lili:
after-sale-topic: lili_after_sale_topic
after-sale-group: lili_after_sale_group
rocketmq:
name-server: 127.0.0.1:9876
name-server: 106.124.130.167:9876
producer:
group: lili_group
send-message-timeout: 30000

View File

@ -24,17 +24,40 @@ spring:
boot:
admin:
client:
<<<<<<< HEAD
url: http://127.0.0.1:8000
# mongodb
data:
mongodb:
host: 106.124.130.167
port: 27017
database: rx-shop
username: goboo
password: Gb84505016
authentication-database: admin
# replica-set-name: mongoreplset
=======
url: http://192.168.0.116:8000
>>>>>>> ae0c4aea12996d3d72eca7c6ccdc97922373e4d7
cache:
type: redis
#amqp
# rabbitmq:
<<<<<<< HEAD
# host: 106.124.130.167
# Redis
redis:
host: 120.71.145.134
port: 6379
password: ekLhvPGraSj8DGO0
=======
# host: 192.168.0.116
# Redis
redis:
host: 192.168.0.116
port: 6379
password: lilishop
>>>>>>> ae0c4aea12996d3d72eca7c6ccdc97922373e4d7
lettuce:
pool:
# 连接池最大连接数(使用负值表示没有限制) 默认 8
@ -63,9 +86,15 @@ spring:
default-datasource:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.cj.jdbc.Driver
<<<<<<< HEAD
url: jdbc:mysql://120.71.183.195:3306/zyt_shop?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&allowPublicKeyRetrieval=true&verifyServerCertificate=false&useSSL=false
username: zyt_shop
password: Gb84505016@zytshop
=======
url: jdbc:mysql://192.168.0.116:3306/new-lili?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
username: root
password: lilishop
>>>>>>> ae0c4aea12996d3d72eca7c6ccdc97922373e4d7
maxActive: 20
initialSize: 5
maxWait: 60000
@ -107,7 +136,11 @@ spring:
props:
#是否打印逻辑SQL语句和实际SQL语句建议调试时打印在生产环境关闭
sql:
<<<<<<< HEAD
show: true
=======
show: false
>>>>>>> ae0c4aea12996d3d72eca7c6ccdc97922373e4d7
# 忽略鉴权url
ignored:
@ -133,8 +166,13 @@ ignored:
- /buyer/memberEvaluation/**/goodsEvaluation
- /buyer/memberEvaluation/**/evaluationNumber
- /store/login/**
<<<<<<< HEAD
- /manager/passport/user/login
- /manager/passport/user/refresh/**
=======
- /manager/user/login
- /manager/user/refresh/**
>>>>>>> ae0c4aea12996d3d72eca7c6ccdc97922373e4d7
- /druid/**
- /swagger-ui.html
- /doc.html
@ -151,6 +189,16 @@ ignored:
# Swagger界面内容配置
swagger:
<<<<<<< HEAD
title: API接口文档
description: Api Documentation
version: 1.0.0
termsOfServiceUrl:
contact:
name: rx
url:
email:
=======
title: lili API接口文档
description: lili Api Documentation
version: 1.0.0
@ -159,6 +207,7 @@ swagger:
name: lili
url: https://pickmall.cn
email: admin@pickmall.com
>>>>>>> ae0c4aea12996d3d72eca7c6ccdc97922373e4d7
# Mybatis-plus
mybatis-plus:
@ -176,6 +225,10 @@ logging:
cn.lili: info
# org.hibernate: debug
# org.springframework: debug
<<<<<<< HEAD
# org.springframework.data.mongodb.core: debug
=======
>>>>>>> ae0c4aea12996d3d72eca7c6ccdc97922373e4d7
file:
# 指定路径
path: lili-logs
@ -190,7 +243,11 @@ jasypt:
lili:
system:
<<<<<<< HEAD
isDemoSite: false
=======
isDemoSite: true
>>>>>>> ae0c4aea12996d3d72eca7c6ccdc97922373e4d7
statistics:
# 在线人数统计 X 小时。这里设置48即统计过去48小时每小时在线人数
onlineMember: 48
@ -202,6 +259,18 @@ lili:
sk: zhNKVrJK6UPOhqIjn8AQvG37b9sz6
#域名
domain:
<<<<<<< HEAD
pc: http://106.124.130.167:8885
wap: http://106.124.130.167:8885
seller: http://106.124.130.167:8885
admin: http://106.124.130.167:8885
#api地址
api:
buyer: https://z171l91606.51mypc.cn
base: http://106.124.130.167:8885
manager: http://106.124.130.167:8885
seller: http://106.124.130.167:8885
=======
pc: http://192.168.0.116:8888
wap: http://192.168.0.116:8888
seller: http://192.168.0.116:8888
@ -212,6 +281,7 @@ lili:
base: http://192.168.0.116:8888
manager: http://192.168.0.116:8888
seller: http://192.168.0.116:8888
>>>>>>> ae0c4aea12996d3d72eca7c6ccdc97922373e4d7
# jwt 细节设定
jwt-setting:
@ -230,7 +300,11 @@ lili:
data:
elasticsearch:
cluster-name: elasticsearch
<<<<<<< HEAD
cluster-nodes: 106.124.130.167:9200
=======
cluster-nodes: 192.168.0.116:9200
>>>>>>> ae0c4aea12996d3d72eca7c6ccdc97922373e4d7
index:
number-of-replicas: 0
number-of-shards: 3
@ -239,8 +313,12 @@ lili:
# account:
# username: elastic
# password: LiLiShopES
<<<<<<< HEAD
=======
logstash:
server: 127.0.0.1:4560
>>>>>>> ae0c4aea12996d3d72eca7c6ccdc97922373e4d7
rocketmq:
promotion-topic: lili_promotion_topic
promotion-group: lili_promotion_group
@ -259,7 +337,11 @@ lili:
notice-send-topic: lili_send_notice_topic
notice-send-group: lili_send_notice_group
rocketmq:
<<<<<<< HEAD
name-server: 106.124.130.167:9876
=======
name-server: 192.168.0.116:9876
>>>>>>> ae0c4aea12996d3d72eca7c6ccdc97922373e4d7
producer:
group: lili_group
send-message-timeout: 30000
@ -267,7 +349,11 @@ rocketmq:
xxl:
job:
admin:
<<<<<<< HEAD
addresses: http://127.0.0.1:9001/xxl-job-admin
=======
addresses: http://192.168.0.116:9001/xxl-job-admin
>>>>>>> ae0c4aea12996d3d72eca7c6ccdc97922373e4d7
executor:
appname: xxl-job-executor-lilishop
address:

View File

@ -12,7 +12,7 @@ import cn.lili.common.utils.Base64DecodeMultipartFile;
import cn.lili.common.utils.CommonUtil;
import cn.lili.common.vo.ResultMessage;
import cn.lili.modules.file.entity.File;
import cn.lili.modules.file.plugin.FileManagerPlugin;
import cn.lili.modules.file.plugin.QiNiuManagerPlugin;
import cn.lili.modules.file.service.FileService;
import cn.lili.modules.system.entity.dos.Setting;
import cn.lili.modules.system.entity.enums.SettingEnum;
@ -47,7 +47,7 @@ public class UploadController {
@Autowired
private SettingService settingService;
@Autowired
private FileManagerPlugin fileManagerPlugin;
private QiNiuManagerPlugin fileManagerPlugin;
@Autowired
private Cache cache;

View File

@ -1,6 +1,5 @@
server:
port: 8890
servlet:
context-path: /
@ -33,9 +32,9 @@ spring:
type: redis
# Redis
redis:
host: 127.0.0.1
host: 120.71.145.134
port: 6379
password: lilishop
password: ekLhvPGraSj8DGO0
lettuce:
pool:
# 连接池最大连接数(使用负值表示没有限制) 默认 8
@ -64,9 +63,9 @@ spring:
default-datasource:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/lilishop?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
username: root
password: lilishop
url: jdbc:mysql://120.71.183.195:3306/zyt_shop?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&allowPublicKeyRetrieval=true&verifyServerCertificate=false&useSSL=false
username: zyt_shop
password: Gb84505016@zytshop
maxActive: 20
initialSize: 5
maxWait: 60000
@ -137,8 +136,8 @@ ignored:
# Swagger界面内容配置
swagger:
title: lili API接口文档
description: lili Api Documentation
title: API接口文档
description: Api Documentation
version: 1.0.0
termsOfServiceUrl: https://pickmall.cn
contact:
@ -191,17 +190,17 @@ lili:
#短信模版配置
sms:
#登录
LOGIN: SMS_205755300
LOGIN: SMS_185821482
#注册
REGISTER: SMS_205755298
REGISTER: SMS_185821482
#找回密码
FIND_USER: SMS_205755301
FIND_USER: SMS_185821482
#设置密码
UPDATE_PASSWORD: SMS_205755297
UPDATE_PASSWORD: SMS_185821482
#支付密码
WALLET_PASSWORD: SMS_205755301
WALLET_PASSWORD: SMS_185821482
system:
isTestModel: true
isTestModel: false
statistics:
# 在线人数统计 X 小时。这里设置48即统计过去48小时每小时在线人数
onlineMember: 48
@ -213,17 +212,16 @@ lili:
sk: zhNKVrJK6UPOhqIjn8AQvG37b9sz6
#域名
domain:
pc: https://pc.b2b2c.pickmall.cn
wap: https://m.b2b2c.pickmall.cn
store: https://store.b2b2c.pickmall.cn
admin: https://admin.b2b2c.pickmall.cn
pc: https://zbuyer.sx1788.cn
wap: https://zshop.sx1788.cn
store: https://zseller.sx1788.cn
admin: https://zmanager.sx1788.cn
#api地址
api:
buyer: https://buyer-api.pickmall.cn
common: https://common-api.pickmall.cn
manager: https://admin-api.pickmall.cn
store: https://store-api.pickmall.cn
buyer: https://zshop-api.sx1788.cn/buyer-api
common: https://zshop-api.sx1788.cn/common-api
manager: https://zshop-api.sx1788.cn/manager-api
store: https://zshop-api.sx1788.cn/seller-api
# jwt 细节设定
jwt-setting:
# token过期时间分钟
@ -241,7 +239,7 @@ lili:
data:
elasticsearch:
cluster-name: elasticsearch
cluster-nodes: 127.0.0.1:9200
cluster-nodes: 106.124.130.167:9200
index:
number-of-replicas: 0
number-of-shards: 3
@ -251,7 +249,7 @@ lili:
# username: elastic
# password: LiLiShopES
logstash:
server: 127.0.0.1:4560
server: 106.124.130.167:4560
rocketmq:
promotion-topic: lili_promotion_topic
promotion-group: lili_promotion_group
@ -270,7 +268,7 @@ lili:
notice-send-topic: lili_send_notice_topic
notice-send-group: lili_send_notice_group
rocketmq:
name-server: 127.0.0.1:9876
name-server: 106.124.130.167:9876
producer:
group: lili_group
send-message-timeout: 30000

View File

@ -24,23 +24,25 @@ spring:
boot:
admin:
client:
url: http://192.168.0.116:8000
url: http://127.0.0.1:8000
# mongodb
data:
mongodb:
uri: 192.168.0.116:27017
database: lilishop
username: root
password: lilishop
host: 106.124.130.167
port: 27017
database: rx-shop
username: goboo
password: Gb84505016
authentication-database: admin
# replica-set-name: mongoreplset
cache:
type: redis
# Redis
redis:
host: 192.168.0.116
host: 120.71.145.134
port: 6379
password: lilishop
password: ekLhvPGraSj8DGO0
lettuce:
pool:
# 连接池最大连接数(使用负值表示没有限制) 默认 8
@ -69,9 +71,9 @@ spring:
default-datasource:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.0.116:3306/clerk?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
username: root
password: lilishop
url: jdbc:mysql://120.71.183.195:3306/zyt_shop?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&allowPublicKeyRetrieval=true&verifyServerCertificate=false&useSSL=false
username: zyt_shop
password: Gb84505016@zytshop
maxActive: 50
initialSize: 20
maxWait: 60000
@ -166,15 +168,14 @@ ignored:
# Swagger界面内容配置
swagger:
title: lilishop API接口文档
description: lilishop Api Documentation
version: 4.2.2
termsOfServiceUrl: https://pickmall.cn
title: API接口文档
description: Api Documentation
version: 1.0.0
termsOfServiceUrl:
contact:
name: lili
url: https://pickmall.cn
email: admin@pickmall.com
name: rx
url:
email:
# Mybatis-plus
mybatis-plus:
mapper-locations: classpath*:mapper/*.xml
@ -213,7 +214,7 @@ lili:
#图形验证码有效时间 秒 包含滑块验证码有效时间, 以及验证通过之后,缓存中存储的验证结果有效时间
effectiveTime: 300
#水印
watermark: LILI-SHOP
watermark:
#干扰项数量 最大2 默认0
interfereNum: 1
#允许误差像素
@ -221,18 +222,18 @@ lili:
#短信模版配置
sms:
#登录
LOGIN: SMS_205755300
LOGIN: SMS_185821482
#注册
REGISTER: SMS_205755298
REGISTER: SMS_185821482
#找回密码
FIND_USER: SMS_205755301
FIND_USER: SMS_185821482
#设置密码
UPDATE_PASSWORD: SMS_205755297
UPDATE_PASSWORD: SMS_185821482
#支付密码
WALLET_PASSWORD: SMS_205755301
WALLET_PASSWORD: SMS_185821482
system:
isDemoSite: false
isTestModel: true
isTestModel: false
# 脱敏级别:
# 0不做脱敏处理
# 1管理端用户手机号等信息脱敏
@ -250,17 +251,16 @@ lili:
sk: zhNKVrJK6UPOhqIjn8AQvG37b9sz6
#域名
domain:
pc: http://192.168.0.116:8888
wap: http://192.168.0.116:8888
seller: http://192.168.0.116:8888
admin: http://192.168.0.116:8888
pc: http://106.124.130.167:8885
wap: http://106.124.130.167:8885
seller: http://106.124.130.167:8885
admin: http://106.124.130.167:8885
#api地址
api:
buyer: https://z171l91606.51mypc.cn
base: http://192.168.0.116:8888
manager: http://192.168.0.116:8888
seller: http://192.168.0.116:8888
base: http://106.124.130.167:8885
manager: http://106.124.130.167:8885
seller: http://106.124.130.167:8885
# jwt 细节设定
jwt-setting:
# token过期时间分钟
@ -278,7 +278,7 @@ lili:
data:
elasticsearch:
cluster-name: elasticsearch
cluster-nodes: 192.168.0.116:9200
cluster-nodes: 106.124.130.167:9200
index:
number-of-replicas: 0
number-of-shards: 3
@ -289,7 +289,7 @@ lili:
# password: LiLiShopES
logstash:
server: 192.168.0.116:4560
server: 106.124.130.167:4560
rocketmq:
promotion-topic: lili_promotion_topic
promotion-group: lili_promotion_group
@ -310,7 +310,7 @@ lili:
after-sale-topic: lili_after_sale_topic
after-sale-group: lili_after_sale_group
rocketmq:
name-server: 192.168.0.116:9876
name-server: 106.124.130.167:9876
isVIPChannel: false
producer:
group: lili_group
@ -319,7 +319,7 @@ rocketmq:
xxl:
job:
admin:
addresses: http://192.168.0.116:9001/xxl-job-admin
addresses: http://127.0.0.1:9001/xxl-job-admin
executor:
appname: xxl-job-executor-lilishop
address:

View File

@ -1,6 +1,5 @@
server:
port: 8886
servlet:
context-path: /
@ -36,9 +35,9 @@ spring:
type: redis
# Redis
redis:
host: 127.0.0.1
host: 120.71.145.134
port: 6379
password: lilishop
password: ekLhvPGraSj8DGO0
lettuce:
pool:
# 连接池最大连接数(使用负值表示没有限制) 默认 8
@ -67,9 +66,9 @@ spring:
default-datasource:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/lilishop?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
username: root
password: lilishop
url: jdbc:mysql://120.71.183.195:3306/zyt_shop?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&allowPublicKeyRetrieval=true&verifyServerCertificate=false&useSSL=false
username: zyt_shop
password: Gb84505016@zytshop
maxActive: 20
initialSize: 5
maxWait: 60000
@ -138,8 +137,8 @@ ignored:
- /buyer/memberEvaluation/**/goodsEvaluation
- /buyer/memberEvaluation/**/evaluationNumber
- /store/login/**
- /manager/user/login
- /manager/user/refresh/**
- /manager/passport/user/login
- /manager/passport/user/refresh/**
- /druid/**
- /swagger-ui.html
- /doc.html
@ -156,8 +155,8 @@ ignored:
# Swagger界面内容配置
swagger:
title: lili API接口文档
description: lili Api Documentation
title: API接口文档
description: Api Documentation
version: 1.0.0
termsOfServiceUrl: https://pickmall.cn
contact:
@ -198,7 +197,7 @@ jasypt:
lili:
system:
isDemoSite: true
isDemoSite: false
statistics:
# 在线人数统计 X 小时。这里设置48即统计过去48小时每小时在线人数
onlineMember: 48
@ -210,17 +209,16 @@ lili:
sk: zhNKVrJK6UPOhqIjn8AQvG37b9sz6
#域名
domain:
pc: https://pc.b2b2c.pickmall.cn
wap: https://m.b2b2c.pickmall.cn
store: https://store.b2b2c.pickmall.cn
admin: https://admin.b2b2c.pickmall.cn
pc: https://zbuyer.sx1788.cn
wap: https://zshop.sx1788.cn
store: https://zseller.sx1788.cn
admin: https://zmanager.sx1788.cn
#api地址
api:
buyer: https://buyer-api.pickmall.cn
common: https://common-api.pickmall.cn
manager: https://admin-api.pickmall.cn
store: https://store-api.pickmall.cn
buyer: https://zshop-api.sx1788.cn/buyer-api
common: https://zshop-api.sx1788.cn/common-api
manager: https://zshop-api.sx1788.cn/manager-api
store: https://zshop-api.sx1788.cn/seller-api
# jwt 细节设定
jwt-setting:
# token过期时间分钟
@ -238,7 +236,7 @@ lili:
data:
elasticsearch:
cluster-name: elasticsearch
cluster-nodes: 127.0.0.1:9200
cluster-nodes: 106.124.130.167:9200
index:
number-of-replicas: 0
number-of-shards: 3
@ -248,7 +246,7 @@ lili:
# username: elastic
# password: LiLiShopES
logstash:
server: 127.0.0.1:4560
server: 106.124.130.167:4560
rocketmq:
promotion-topic: lili_promotion_topic
promotion-group: lili_promotion_group
@ -269,7 +267,7 @@ lili:
after-sale-topic: lili_after_sale_topic
after-sale-group: lili_after_sale_group
rocketmq:
name-server: 127.0.0.1:9876
name-server: 106.124.130.167:9876
producer:
group: lili_group
send-message-timeout: 30000

View File

@ -15,6 +15,15 @@
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>com.qiniu</groupId>
<artifactId>qiniu-java-sdk</artifactId>
</dependency>
<dependency>
<groupId>com.qiniu</groupId>
<artifactId>qiniu-java-sdk</artifactId>
<version>7.4.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-properties-migrator</artifactId>

View File

@ -0,0 +1,30 @@
package cn.lili.common.fulu.core;
/**
* @Auther: chenYing
* @Date: 2019/8/26 0026 15:08
*/
public interface MethodConst {
//卡密下单接口method方法
String OPEN_API_CARD_ORDER_ADD = "fulu.order.card.add";
// 根据话费查询归属地和城市编码面值城市等信息
String OPEN_API_CHECK_PHONE = "fulu.mobile.info.get";
// 直充下单接口method方法
String OPEN_API_DIRECT_ORDER_ADD = "fulu.order.direct.add";
// 获取商品信息接口method方法
String OPEN_API_GOODS_GET = "fulu.goods.info.get";
// 获取商品模板信息接口method方法
String OPEN_API_GOODS_TEMPLATE_GET = "fulu.goods.template.get";
// 查单接口method方法
String OPEN_API_ORDER_GET = "fulu.order.info.get";
// 话费下单接口method方法
String OPEN_API_PHONE_ORDER_ADD = "fulu.order.mobile.add";
// 流量下单接口method方法
String OPEN_API_TRAFFIC_ORDER_ADD = "fulu.order.data.add";
// 获取用户信息接口method方法
String OPEN_API_USER_INFO_GET = "fulu.user.info.get";
//获取商品列表method方法
String OPEN_API_GOODS_LIST = "fulu.goods.list.get";
}

View File

@ -0,0 +1,58 @@
package cn.lili.common.fulu.core.http;
import cn.lili.common.fulu.core.utils.HttpUtil;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
/**
* @Auther: chenYing
* @Date: 2019/8/19 0019 16:16
*/
public class FuluClient implements IFuluClient {
private static volatile ExecutorService executor;
private String url;
public FuluClient() {
this.url = "http://openapi.fulu.com/api/getway";
}
public FuluClient(String url) {
this.url = url;
}
/**
* 创建线程池
*/
private static void createThreadPool() {
if (executor == null) {
synchronized (FuluClient.class) {
if (executor == null) {
executor = Executors.newCachedThreadPool();
}
}
}
}
@Override
public String send(final String postData) {
String result = HttpUtil.sendPostJson(this.url, postData);
return result;
}
@Override
public Future<String> sendAsync(final String postData) {
createThreadPool();
return executor.submit(new Callable<String>() {
@Override
public String call() throws Exception {
String result = HttpUtil.sendPostJson(url, postData);
return result;
}
});
}
}

View File

@ -0,0 +1,27 @@
package cn.lili.common.fulu.core.http;
import java.util.concurrent.Future;
/**
* @Auther: chenYing
* @Date: 2019/8/19 0019 16:15
*/
public interface IFuluClient {
/**
* 同步请求openapi2.0
*
* @param postData
* @return String
*/
String send(final String postData);
/**
* 异步请求openapi2.0
*
* @param postData
* @return Future<String>
*/
Future<String> sendAsync(final String postData);
}

View File

@ -0,0 +1,47 @@
package cn.lili.common.fulu.core.utils;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.security.Security;
/**
* @Auther: chenYing
* @Date: 2019/8/27 0027 17:38
*/
public class CardUtil {
private static final String ALGORITHM = "AES/ECB/PKCS7Padding";
private CardUtil() {
}
public static String cardDecode(String str, byte[] key) {
byte[] bytes = org.apache.commons.codec.binary.Base64.decodeBase64(str);
String result = null;
try {
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
Cipher cipher = Cipher.getInstance(ALGORITHM, "BC");
SecretKeySpec keySpec = new SecretKeySpec(key, "AES");
cipher.init(Cipher.DECRYPT_MODE, keySpec);
byte[] decoded = cipher.doFinal(bytes);
result = new String(decoded, "UTF-8");
} catch (Exception e) {
throw new RuntimeException(e.getMessage(), e);
}
return result;
}
public static String cardEncode(String str, byte[] key) {
byte[] result = null;
try {
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
Cipher cipher = Cipher.getInstance(ALGORITHM, "BC");
SecretKeySpec keySpec = new SecretKeySpec(key, "AES");
cipher.init(Cipher.ENCRYPT_MODE, keySpec);
result = cipher.doFinal(str.getBytes("UTF-8"));
} catch (Exception e) {
throw new RuntimeException(e.getMessage(), e);
}
return new String(org.apache.commons.codec.binary.Base64.encodeBase64(result));
}
}

View File

@ -0,0 +1,19 @@
package cn.lili.common.fulu.core.utils;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @Auther: chenYing
* @Date: 2019/8/19 0019 15:17
*/
public class DateFormatUtil {
private static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
private DateFormatUtil() {
}
public static String currentDateTime() {
return new SimpleDateFormat(DATE_FORMAT).format(new Date());
}
}

View File

@ -0,0 +1,206 @@
package cn.lili.common.fulu.core.utils;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.*;
import java.util.*;
/**
* @author cheny
*/
public class HttpUtil {
private static Logger log = LoggerFactory.getLogger(HttpUtil.class);
public final static int CONNECT_TIMEOUT = 10000;
public final static int READ_TIMEOUT = 10000;
private static final String ENCODING_GBK = "GBK";
/**
* POST请求json字符串形式数据
*
* @param url 请求地址
* @param param 请求的json数据
* @return response body
* @throws Exception
*/
public static String sendPostJson(String url, String param) {
return sendPostWithHeads(url, param, "application/json", null);
}
private static String sendPostWithHeads(String url, String param, String contentType, Map<String, String> heads) {
PrintWriter out = null;
BufferedReader in = null;
StringBuilder result = new StringBuilder();
HttpURLConnection conn = null;
try {
URL realUrl = new URL(url);
// 打开和URL之间的连接
conn = (HttpURLConnection) realUrl.openConnection();
// 设置通用的请求属性
conn.setRequestMethod("POST");// 提交模式
conn.setConnectTimeout(CONNECT_TIMEOUT);// 连接超时 单位毫秒
conn.setReadTimeout(READ_TIMEOUT);// 读取超时 单位毫秒
if (contentType != null && !contentType.isEmpty()) {
conn.setRequestProperty("Content-Type", contentType);
}
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("user-agent",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36");
// 添加头信息
if (heads != null && !heads.isEmpty()) {
for (String key : heads.keySet()) {
conn.setRequestProperty(key, heads.get(key));
}
}
// 发送POST请求必须设置如下两行
conn.setDoOutput(true);
conn.setDoInput(true);
// 获取URLConnection对象对应的输出流
out = new PrintWriter(conn.getOutputStream());
// 发送请求参数
out.print(param);
// flush输出流的缓冲
out.flush();
// 定义BufferedReader输入流来读取URL的响应
in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
String line;
while ((line = in.readLine()) != null) {
result.append(line);
}
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("send POST request exception :" + e.getMessage(), e);
} finally {
try {
if (out != null) {
out.close();
}
if (in != null) {
in.close();
}
if (conn != null) {
conn.disconnect();
}
} catch (Exception e2) {
throw new RuntimeException("close Connection exception :" + e2.getMessage(), e2);
}
}
return result.toString();
}
/**
* POST请求String字符串形式数据
*
* @param url
* @param paramXmlStr
* @return
*/
public static String sendPostXmlStr(String url, String paramXmlStr) {
String tmpparamXmlStr = "";
try {
tmpparamXmlStr = URLEncoder.encode(paramXmlStr, ENCODING_GBK);
tmpparamXmlStr = sendPostWithHeads(url, tmpparamXmlStr, "application/xml", null);
tmpparamXmlStr = URLDecoder.decode(tmpparamXmlStr,ENCODING_GBK);
}catch (Exception e){
e.printStackTrace();
log.error("post请求URL数据转码报错{}", e.getMessage());
}
return tmpparamXmlStr;
}
/**
* POST请求String字符串形式数据
*
* @param url
* @param paramXmlStr
* @return
*/
public static String sendPostXmlUrlencode(String url, String paramXmlStr) {
String tmpparamXmlStr = "";
Map<String, String> rspMap = new LinkedHashMap<>();
rspMap.put("req", paramXmlStr);
try {
tmpparamXmlStr = URLEncoder.encode(paramXmlStr, ENCODING_GBK);
tmpparamXmlStr = doPostMapParams(url, rspMap);
tmpparamXmlStr = URLDecoder.decode(tmpparamXmlStr,ENCODING_GBK);
}catch (Exception e){
e.printStackTrace();
log.error("post请求URL数据转码报错{}", e.getMessage());
}
return tmpparamXmlStr;
}
/**
* 发送POST请求
* @param url String对象为 目的地址
* @param parameters 请求参数Map类型
* @return 远程响应结果
*/
public static String doPostMapParams(String url, Map<String, String> parameters) {
BufferedReader in = null;
try {
// 定义HttpClient
HttpClient client = new DefaultHttpClient();
// 实例化HTTP方法
HttpPost request = new HttpPost();
request.setURI(new URI(url));
//设置参数
List<NameValuePair> nvps = new ArrayList<NameValuePair>();
for (Iterator iter = parameters.keySet().iterator(); iter.hasNext();) {
String name = (String) iter.next();
String value = String.valueOf(parameters.get(name));
nvps.add(new BasicNameValuePair(name, value));
}
request.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
HttpResponse response = client.execute(request);
int code = response.getStatusLine().getStatusCode();
if(code == 200){ //请求成功
in = new BufferedReader(new InputStreamReader(response.getEntity()
.getContent(),"UTF-8"));
StringBuffer sb = new StringBuffer("");
String line = "";
String NL = System.getProperty("line.separator");
while ((line = in.readLine()) != null) {
sb.append(line + NL);
}
in.close();
return sb.toString();
}else{
System.out.println("状态码:" + code);
return null;
}
}
catch(Exception e) {
e.printStackTrace();
return null;
}
}
}

View File

@ -0,0 +1,41 @@
package cn.lili.common.fulu.core.utils;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
public class JSONUtil {
private static Gson gson = new Gson();
/**
* JSON 字符串转为 Java 对象
*/
public static <T> T fromJSON(String json, Class<T> type) {
T obj;
try {
obj = gson.fromJson(json, type);
} catch (Exception e) {
throw new RuntimeException(e);
}
return obj;
}
/**
* json字符串转list或者map
*/
public static <T> T fromJSON(String json, TypeToken<T> typeToken) {
return gson.fromJson(json, typeToken.getType());
}
/**
* Java 对象转为 JSON 字符串
*/
public static <T> String toJSON(T obj) {
String jsonStr;
try {
jsonStr = gson.toJson(obj);
} catch (Exception e) {
throw new RuntimeException(e);
}
return jsonStr;
}
}

View File

@ -0,0 +1,342 @@
package cn.lili.common.fulu.core.utils;
import cn.lili.common.fulu.core.MethodConst;
import cn.lili.common.fulu.model.*;
import cn.lili.common.fulu.sdk.DefaultOpenApiClient;
import cn.lili.modules.store.entity.dto.FuLuConfigureDTO;
import com.alibaba.fastjson.JSON;
import com.google.gson.reflect.TypeToken;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.*;
import java.util.concurrent.*;
public class Test {
private final static String APP_KEY = "lzHi7ewuTkplx2ePX0eQzN65TIFRk1zFClcoj1Jim/MHmu0X7ZqxMtSLENhvr1xD";
private final static Logger LOGGER = LoggerFactory.getLogger(Test.class);
private final static String SYS_SECRET = "9da68b0f8bcb470e84c3d30e343727e2";
private final static String URL = "http://openapi.fulu.com/api/getway";
// private final static String APP_KEY = "i4esv1l+76l/7NQCL3QudG90Fq+YgVfFGJAWgT+7qO1Bm9o/adG/1iwO2qXsAXNB";
// private final static Logger LOGGER = LoggerFactory.getLogger(Test.class);
// private final static String SYS_SECRET = "0a091b3aa4324435aab703142518a8f7";
// private final static String URL = "http://pre.openapi.fulu.com/api/getway";
private static String repeat(String ch, int num) {
StringBuilder str = new StringBuilder();
for (int i = 0; i < num; i++) {
str.append(ch);
}
return str.toString();
}
private static void waitFor(Future<String> future) throws Exception {
while (!future.isDone()) {
TimeUnit.MILLISECONDS.sleep(500);
}
LOGGER.info("excuteAsync\n{}", future.get());
}
/**
* 卡密下单
*
* @throws Exception
*/
public static void cardOrderAddTest(FuLuConfigureDTO fuLuConfigureDTO, Integer productId, Integer buyNum,String orderSn) throws Exception {
LOGGER.info("\n卡密下单{}", repeat("=", 100));
DefaultOpenApiClient client =
new DefaultOpenApiClient(URL, fuLuConfigureDTO.getAppMerchantKey(), fuLuConfigureDTO.getAppSecretKey(), MethodConst.OPEN_API_CARD_ORDER_ADD);
InputCardOrderDto dto = new InputCardOrderDto();
dto.setProductId(productId);
dto.setCustomerOrderNo(orderSn);
dto.setBuyNum(buyNum);
client.setBizObject(dto);
LOGGER.info("excute\n{}\n{}", client.excute(), repeat("-", 100));
dto.setCustomerOrderNo(UUID.randomUUID().toString());
waitFor(client.excuteAsync());
}
/**
* 直充下单
*
* @throws Exception
*/
public static void directOrderAddTest(FuLuConfigureDTO fuLuConfigureDTO, Integer productId, Integer buyNum,String qrCode,String orderSn) throws Exception {
LOGGER.info("\n直充下单{}", repeat("=", 100));
DefaultOpenApiClient client =
new DefaultOpenApiClient(URL, fuLuConfigureDTO.getAppMerchantKey(), fuLuConfigureDTO.getAppSecretKey(), MethodConst.OPEN_API_DIRECT_ORDER_ADD);
InputDirectOrderDto dto = new InputDirectOrderDto();
dto.setProductId(productId);
dto.setBuyNum(buyNum);
client.setBizObject(dto);
int count = 1;
for (String chargeAccount : Arrays.asList(qrCode)) {
dto.setChargeAccount(chargeAccount);
dto.setCustomerOrderNo(orderSn);
LOGGER.info("excute\n{}\n{}", client.excute(), repeat("-", 100));
if (count++ >= 3) {
waitFor(client.excuteAsync());
} else {
LOGGER.info("excuteAsync\n{}\n{}", client.excuteAsync().get(), repeat("-", 100));
}
}
}
/**
* 手机号归属地
*
* @throws Exception
*/
public void matchPhoneProducGetTest(FuLuConfigureDTO fuLuConfigureDTO) throws Exception {
LOGGER.info("\n手机号归属地{}", repeat("=", 100));
DefaultOpenApiClient client = new DefaultOpenApiClient(URL, fuLuConfigureDTO.getAppMerchantKey(), fuLuConfigureDTO.getAppSecretKey(), MethodConst.OPEN_API_CHECK_PHONE);
InputMatchPhoneProductListDto dto = new InputMatchPhoneProductListDto();
dto.setFaceValue(50D);
int count = 1;
for (String phone : Arrays.asList("15972368779", "13971553804")) {
dto.setPhone(phone);
client.setBizObject(dto);
LOGGER.info("excute\n{}\n{}", client.excute(), repeat("-", 100));
if (count++ >= 2) {
waitFor(client.excuteAsync());
} else {
LOGGER.info("excuteAsync\n{}\n{}", client.excuteAsync().get(), repeat("-", 100));
}
}
}
/**
* 订单查单
*
* @throws Exception
*/
public void orderInfoGetTest(FuLuConfigureDTO fuLuConfigureDTO) throws Exception {
LOGGER.info("\n订单查单{}", repeat("=", 100));
DefaultOpenApiClient client = new DefaultOpenApiClient(URL, fuLuConfigureDTO.getAppMerchantKey(), fuLuConfigureDTO.getAppSecretKey(), MethodConst.OPEN_API_ORDER_GET);
InputOrderGetDto dto = new InputOrderGetDto();
client.setBizObject(dto);
int count = 1;
for (String customerOrderNo : Arrays
.asList("0d19f8e4-5af3-490d-a8d8-47fd457da7de", "31b6b96b-a21e-4bc4-bc0c-6e77a2ffb698")) {
dto.setCustomerOrderNo(customerOrderNo);
LOGGER.info("excute\n{}\n{}", client.excute(), repeat("-", 100));
if (count++ >= 2) {
Future<String> future = client.excuteAsync();
waitFor(future);
Map<String, String> result = JSONUtil.fromJSON(future.get(), new TypeToken<Map>() {
});
Map<String, Object> resultMap = JSONUtil.fromJSON(result.get("result"), new TypeToken<Map<String, Object>>() {
});
List<Map<String, String>> cardList = (List<Map<String, String>>) resultMap.get("cards");
StringBuilder decodeStr = new StringBuilder();
for (Map<String, String> map : cardList) {
decodeStr.append("card_number").append(map.get("card_number")).append("desc_card_number")
.append(CardUtil.cardDecode(map.get("card_number"), SYS_SECRET.getBytes("UTF-8")));
decodeStr.append(" card_pwd").append(map.get("card_pwd")).append("card_pwd")
.append(CardUtil.cardDecode(map.get("card_pwd"), SYS_SECRET.getBytes("UTF-8")));
decodeStr.append("\n");
}
System.out.println(decodeStr.toString());
System.out.println(CardUtil.cardEncode("CD10002502019061217430016421", SYS_SECRET.getBytes("UTF-8")));
} else {
LOGGER.info("excuteAsync\n{}\n{}", client.excuteAsync().get(), repeat("-", 100));
}
}
}
/**
* 话费下单
*
* @throws Exception
*/
public void phoneOrderAddTest(FuLuConfigureDTO fuLuConfigureDTO) throws Exception {
LOGGER.info("\n话费下单{}", repeat("=", 100));
DefaultOpenApiClient client =
new DefaultOpenApiClient(URL, fuLuConfigureDTO.getAppMerchantKey(), fuLuConfigureDTO.getAppSecretKey(), MethodConst.OPEN_API_PHONE_ORDER_ADD);
InputPhoneOrderDto dto = new InputPhoneOrderDto();
dto.setChargeValue(Double.valueOf(50));
int count = 1;
for (String chargePhone : Arrays.asList("15972368779", "13971553804")) {
dto.setCustomerOrderNo(UUID.randomUUID().toString());
dto.setChargePhone(chargePhone);
client.setBizObject(dto);
LOGGER.info("excute\n{}\n{}", client.excute(), repeat("-", 100));
dto.setCustomerOrderNo(UUID.randomUUID().toString());
if (count++ >= 2) {
waitFor(client.excuteAsync());
} else {
LOGGER.info("excuteAsync\n{}\n{}", client.excuteAsync().get(), repeat("-", 100));
}
}
}
/**
* 获得商品信息
*
* @throws Exception
*/
public static Map<String, Object> productInfoGetTest(FuLuConfigureDTO fuLuConfigureDTO,String productIdS) throws Exception {
LOGGER.info("\n获得商品信息{}", repeat("=", 100));
DefaultOpenApiClient client = new DefaultOpenApiClient(URL, fuLuConfigureDTO.getAppMerchantKey(), fuLuConfigureDTO.getAppSecretKey(), MethodConst.OPEN_API_GOODS_GET);
InputProductDto dto = new InputProductDto();
int count = 1;
Map<String, Object> maps = new HashMap();
for (String productId : Arrays.asList(productIdS)) {
dto.setProductId(productId);
client.setBizObject(dto);
maps = (Map) JSON.parse(client.excute());
LOGGER.info("excute\n{}\n{}", client.excute(), repeat("-", 100));
if (count++ >= 10) {
waitFor(client.excuteAsync());
} else {
LOGGER.info("excuteAsync\n{}\n{}", client.excuteAsync().get(), repeat("-", 100));
}
}
return maps;
}
/**
* 获得商品模板信息
*
* @throws Exception
*/
public void productTemplateGetTest(FuLuConfigureDTO fuLuConfigureDTO) throws Exception {
LOGGER.info("\n获得商品模板信息{}", repeat("=", 100));
DefaultOpenApiClient client =
new DefaultOpenApiClient(URL, fuLuConfigureDTO.getAppMerchantKey(), fuLuConfigureDTO.getAppSecretKey(), MethodConst.OPEN_API_GOODS_TEMPLATE_GET);
InputProductTemplateDto dto = new InputProductTemplateDto();
dto.setTemplateId("e1dac0ea-dc86-4c9d-a778-c9e19203ecb8");
client.setBizObject(dto);
LOGGER.info("excute\n{}\n{}", client.excute(), repeat("-", 100));
waitFor(client.excuteAsync());
}
/**
* 流量下单
*
* @throws Exception
*/
public void trafficOrderAddTest(FuLuConfigureDTO fuLuConfigureDTO) throws Exception {
LOGGER.info("\n流量下单{}", repeat("=", 100));
DefaultOpenApiClient client =
new DefaultOpenApiClient(URL, fuLuConfigureDTO.getAppMerchantKey(), fuLuConfigureDTO.getAppSecretKey(), MethodConst.OPEN_API_TRAFFIC_ORDER_ADD);
InputTrafficOrderDto dto = new InputTrafficOrderDto();
dto.setChargeValue(Double.valueOf(1024));
dto.setPacketKind(4);
int count = 1;
for (String chargePhone : Arrays.asList("15972368779", "13971553804")) {
client.setBizObject(dto);
dto.setChargePhone(chargePhone);
dto.setCustomerOrderNo(UUID.randomUUID().toString());
LOGGER.info("excute\n{}\n{}", client.excute(), repeat("-", 100));
dto.setCustomerOrderNo(UUID.randomUUID().toString());
if (count++ >= 2) {
waitFor(client.excuteAsync());
} else {
LOGGER.info("excuteAsync\n{}\n{}", client.excuteAsync().get(), repeat("-", 100));
}
}
}
/**
* 用户信息
*
* @throws Exception
*/
public static void userInfoGetTest(FuLuConfigureDTO fuLuConfigureDTO) throws Exception {
LOGGER.info("\n用户信息{}", repeat("=", 100));
DefaultOpenApiClient client =
new DefaultOpenApiClient(URL, fuLuConfigureDTO.getAppMerchantKey(), fuLuConfigureDTO.getAppSecretKey(), MethodConst.OPEN_API_USER_INFO_GET);
InputUserDto dto = new InputUserDto();
client.setBizObject(dto);
LOGGER.info("excute\n{}\n{}", client.excute(), repeat("-", 100));
waitFor(client.excuteAsync());
}
/**
* 用户信息高并发场景
*
* @throws Exception
*/
public static void userInfoGetTest2(FuLuConfigureDTO fuLuConfigureDTO) throws Exception {
LOGGER.info("\n用户信息高并发场景{}", repeat("=", 100));
Executor executor = Executors.newCachedThreadPool();
final int count = 10;
final CountDownLatch downLatch = new CountDownLatch(count);
for (int i = 0; i < count; ++i) {
executor.execute(new Runnable() {
@Override
public void run() {
try {
String name = Thread.currentThread().getName();
LOGGER.info("\n线程名{}{}", name, repeat("+", 100));
DefaultOpenApiClient client =
new DefaultOpenApiClient(URL, fuLuConfigureDTO.getAppMerchantKey(), fuLuConfigureDTO.getAppSecretKey(), MethodConst.OPEN_API_USER_INFO_GET);
InputUserDto dto = new InputUserDto();
client.setBizObject(dto);
LOGGER.info("\n线程名{}\n{}\n{}", name, client.excute(), repeat("+", 100));
waitFor(client.excuteAsync());
} catch (Exception ex) {
LOGGER.error(ex.getMessage(), ex);
} finally {
downLatch.countDown();
}
}
});
}
downLatch.await();
}
/* 获得商品信息列表
*
* @throws Exception
*/
public static String getGoodsInfoList(FuLuConfigureDTO fuLuConfigureDTO) throws Exception {
LOGGER.info("\n获得商品信息{}", repeat("=", 100));
DefaultOpenApiClient client = new DefaultOpenApiClient(URL, fuLuConfigureDTO.getAppMerchantKey(), fuLuConfigureDTO.getAppSecretKey(), MethodConst.OPEN_API_GOODS_LIST);
InputProductDto dto = new InputProductDto();
client.setBizObject(dto);
return client.excute().toString();
}
public static void main(String[] args) {
try {
// productInfoGetTest();
} catch (Exception e) {
e.printStackTrace();
}
}
}

View File

@ -0,0 +1,159 @@
package cn.lili.common.fulu.model;
import cn.lili.common.fulu.core.utils.DateFormatUtil;
import cn.lili.common.fulu.core.utils.JSONUtil;
import com.google.gson.annotations.SerializedName;
import com.google.gson.reflect.TypeToken;
import java.io.Serializable;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
/**
* @Auther: chenYing
* @Date: 2019/8/19 0019 10:49
*/
public class CommonRequest implements Serializable {
private static final long serialVersionUID = 2L;
@SerializedName(value = "app_auth_token")
private String appAuthToken = "";
@SerializedName(value = "app_key")
private String appKey;
@SerializedName(value = "biz_content")
private String bizContent = "{}";
private transient Map<String, Object> bizContentMap = Collections.emptyMap();
private String charset;
private String format;
private String method;
private String sign;
@SerializedName(value = "sign_type")
private String signType;
private String timestamp;
private String version;
public CommonRequest() {
format = "json";
version = "2.0";
charset = "utf-8";
signType = "md5";
// timestamp = "2019-08-20 13:59:38";
timestamp = DateFormatUtil.currentDateTime();
}
public String getAppAuthToken() {
return appAuthToken;
}
public void setAppAuthToken(String appAuthToken) {
this.appAuthToken = appAuthToken;
}
public String getAppKey() {
return appKey;
}
public void setAppKey(String appKey) {
this.appKey = appKey;
}
public String getBizContent() {
if (!bizContentMap.isEmpty()) {
bizContent = JSONUtil.toJSON(bizContentMap);
}
return bizContent;
}
/**
* 直接将变量以json格式保存
*
* @param bizContent bizContent
*/
public void setBizContent(String bizContent) {
if (bizContent != null && !"".equals(bizContent.trim())) {
Map<String, Object> dataMap = JSONUtil.fromJSON(bizContent, new TypeToken<Map<String, Object>>() {
});
if (bizContentMap.isEmpty()) {
bizContentMap = new HashMap<String, Object>();
}
bizContentMap.putAll(dataMap);
}
}
public String getCharset() {
return charset;
}
public void setCharset(String charset) {
this.charset = charset;
}
public String getFormat() {
return format;
}
public void setFormat(String format) {
this.format = format;
}
public String getMethod() {
return method;
}
public void setMethod(String method) {
this.method = method;
}
public String getSign() {
return sign;
}
public void setSign(String sign) {
this.sign = sign;
}
public String getSignType() {
return signType;
}
public void setSignType(String signType) {
this.signType = signType;
}
public String getTimestamp() {
return timestamp;
}
public void setTimestamp(String timestamp) {
this.timestamp = timestamp;
}
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
/**
* 以key:value形式保存程序会转换为json格式
*
* @param key key
* @param value value
*/
public void setBizContent(String key, Object value) {
if (bizContentMap.isEmpty()) {
bizContentMap = new HashMap<String, Object>();
}
bizContentMap.put(key, value);
}
protected Object getBizContentValue(String key) {
return bizContentMap.get(key);
}
}

View File

@ -0,0 +1,56 @@
package cn.lili.common.fulu.model;
/**
* 卡密订单input dto
*
* @Auther: chenYing
* @Date: 2019/8/19 0019 15:35
*/
public class InputCardOrderDto extends CommonRequest {
public InputCardOrderDto() {
super();
setMethod("fulu.order.card.add");
}
/**
* 购买数量
*
* @return Integer
*/
public Integer getBuyNum() {
Object value = getBizContentValue("buy_num");
return value != null ? Integer.valueOf(value.toString()) : null;
}
public void setBuyNum(Integer buyNum) {
setBizContent("buy_num", buyNum);
}
/**
* 外部订单号
*
* @return String
*/
public String getCustomerOrderNo() {
Object value = getBizContentValue("customer_order_no");
return value != null ? String.valueOf(value) : null;
}
public void setCustomerOrderNo(String customerOrderNo) {
setBizContent("customer_order_no", customerOrderNo);
}
/**
* 商品编号
*
* @return Integer
*/
public Integer getProductId() {
Object value = getBizContentValue("product_id");
return value != null ? Integer.valueOf(value.toString()) : null;
}
public void setProductId(Integer productId) {
setBizContent("product_id", productId);
}
}

View File

@ -0,0 +1,213 @@
package cn.lili.common.fulu.model;
/**
* 直充商品订单input dto
*
* @Auther: chenYing
* @Date: 2019/8/19 0019 15:39
*/
public class InputDirectOrderDto extends CommonRequest {
public InputDirectOrderDto() {
super();
setMethod("fulu.order.direct.add");
}
/**
* 购买数量
*
* @return Integer
*/
public Integer getBuyNum() {
Object value = getBizContentValue("buy_num");
return value != null ? Integer.valueOf(value.toString()) : null;
}
public void setBuyNum(Integer buyNum) {
setBizContent("buy_num", buyNum);
}
/**
* 充值账号
*
* @return String
*/
public String getChargeAccount() {
Object value = getBizContentValue("charge_account");
return value != null ? String.valueOf(value) : null;
}
public void setChargeAccount(String chargeAccount) {
setBizContent("charge_account", chargeAccount);
}
/**
* 充值游戏名称
*
* @return String
*/
public String getChargeGameName() {
Object value = getBizContentValue("charge_game_name");
return value != null ? String.valueOf(value) : null;
}
public void setChargeGameName(String chargeGameName) {
setBizContent("charge_game_name", chargeGameName);
}
/**
* 充值游戏区
*
* @return String
*/
public String getChargeGameRegion() {
Object value = getBizContentValue("charge_game_region");
return value != null ? String.valueOf(value) : null;
}
public void setChargeGameRegion(String chargeGameRegion) {
setBizContent("charge_game_region", chargeGameRegion);
}
/**
* 充值游戏角色
*
* @return String
*/
public String getChargeGameRole() {
Object value = getBizContentValue("charge_game_role");
return value != null ? String.valueOf(value) : null;
}
public void setChargeGameRole(String chargeGameRole) {
setBizContent("charge_game_role", chargeGameRole);
}
/**
* 充值游戏服
*
* @return String
*/
public String getChargeGameSrv() {
Object value = getBizContentValue("charge_game_srv");
return value != null ? String.valueOf(value) : null;
}
public void setChargeGameSrv(String chargeGameSrv) {
setBizContent("charge_game_srv", chargeGameSrv);
}
/**
* 下单真实Ip区域商品要传
*
* @return String
*/
public String getChargeIp() {
Object value = getBizContentValue("charge_ip");
return value != null ? String.valueOf(value) : null;
}
public void setChargeIp(String chargeIp) {
setBizContent("charge_ip", chargeIp);
}
/**
* 充值密码部分游戏类要传
*
* @return String
*/
public String getChargePassword() {
Object value = getBizContentValue("charge_password");
return value != null ? String.valueOf(value) : null;
}
public void setChargePassword(String chargePassword) {
setBizContent("charge_password", chargePassword);
}
/**
* 充值类型
*
* @return String
*/
public String getChargeType() {
Object value = getBizContentValue("charge_type");
return value != null ? String.valueOf(value) : null;
}
public void setChargeType(String chargeType) {
setBizContent("charge_type", chargeType);
}
/**
* 联系QQ
*
* @return String
*/
public String getContactQq() {
Object value = getBizContentValue("contact_qq");
return value != null ? String.valueOf(value) : null;
}
public void setContactQq(String contactQq) {
setBizContent("contact_qq", contactQq);
}
/**
* 联系电话
*
* @return String
*/
public String getContactTel() {
Object value = getBizContentValue("contact_tel");
return value != null ? String.valueOf(value) : null;
}
public void setContactTel(String contactTel) {
setBizContent("contact_tel", contactTel);
}
/**
* 外部订单号
*
* @return String
*/
public String getCustomerOrderNo() {
Object value = getBizContentValue("customer_order_no");
return value != null ? String.valueOf(value) : null;
}
public void setCustomerOrderNo(String customerOrderNo) {
setBizContent("customer_order_no", customerOrderNo);
}
/**
* 商品编号
*
* @return Integer
*/
public Integer getProductId() {
Object value = getBizContentValue("product_id");
return value != null ? Integer.valueOf(value.toString()) : null;
}
public void setProductId(Integer productId) {
setBizContent("product_id", productId);
}
/**
* 剩余数量
*
* @return Integer
*/
public Integer getRemainingNumber() {
Object value = getBizContentValue("remaining_number");
return value != null ? Integer.valueOf(value.toString()) : null;
}
public void setRemainingNumber(Integer remainingNumber) {
setBizContent("remaining_number", remainingNumber);
}
}

View File

@ -0,0 +1,44 @@
package cn.lili.common.fulu.model;
/**
* 手机号归属地input dto
*
* @Auther: chenYing
* @Date: 2019/8/19 0019 16:08
*/
public class InputMatchPhoneProductListDto extends CommonRequest {
public InputMatchPhoneProductListDto() {
super();
setMethod("fulu.mobile.info.get");
}
/**
* 面值
*
* @return Double
*/
public Double getFaceValue() {
Object value = getBizContentValue("face_value");
return value != null ? Double.valueOf(value.toString()) : null;
}
public void setFaceValue(Double faceValue) {
setBizContent("face_value", faceValue);
}
/**
* 手机号
*
* @return String
*/
public String getPhone() {
Object value = getBizContentValue("phone");
return value != null ? String.valueOf(value) : null;
}
public void setPhone(String phone) {
setBizContent("phone", phone);
}
}

View File

@ -0,0 +1,31 @@
package cn.lili.common.fulu.model;
/**
* 订单查单input dto
*
* @Auther: chenYing
* @Date: 2019/8/19 0019 15:23
*/
public class InputOrderGetDto extends CommonRequest {
public InputOrderGetDto() {
super();
setMethod("fulu.order.info.get");
}
/**
* 外部订单号
*
* @return String
*/
public String getCustomerOrderNo() {
Object value = getBizContentValue("customer_order_no");
return value != null ? String.valueOf(value) : null;
}
public void setCustomerOrderNo(String customerOrderNo) {
setBizContent("customer_order_no", customerOrderNo);
}
}

View File

@ -0,0 +1,57 @@
package cn.lili.common.fulu.model;
/**
* 话费订单input dto
*
* @Auther: chenYing
* @Date: 2019/8/19 0019 15:31
*/
public class InputPhoneOrderDto extends CommonRequest {
public InputPhoneOrderDto() {
super();
setMethod("fulu.order.mobile.add");
}
/**
* 充值手机号
*
* @return String
*/
public String getChargePhone() {
Object value = getBizContentValue("charge_phone");
return value != null ? String.valueOf(value) : null;
}
public void setChargePhone(String chargePhone) {
setBizContent("charge_phone", chargePhone);
}
/**
* 充值数额
*
* @return Double
*/
public Double getChargeValue() {
Object value = getBizContentValue("charge_value");
return value != null ? Double.valueOf(value.toString()) : null;
}
public void setChargeValue(Double chargeValue) {
setBizContent("charge_value", chargeValue);
}
/**
* 外部订单号
*
* @return String
*/
public String getCustomerOrderNo() {
Object value = getBizContentValue("customer_order_no");
return value != null ? String.valueOf(value) : null;
}
public void setCustomerOrderNo(String customerOrderNo) {
setBizContent("customer_order_no", customerOrderNo);
}
}

View File

@ -0,0 +1,30 @@
package cn.lili.common.fulu.model;
/**
* 商品信息input dto
*
* @Auther: chenYing
* @Date: 2019/8/19 0019 16:04
*/
public class InputProductDto extends CommonRequest {
public InputProductDto() {
super();
setMethod("fulu.goods.info.get");
}
/**
* 商品编号
*
* @return String
*/
public String getProductId() {
Object value = getBizContentValue("product_id");
return value != null ? String.valueOf(value) : null;
}
public void setProductId(String productId) {
setBizContent("product_id", productId);
}
}

View File

@ -0,0 +1,29 @@
package cn.lili.common.fulu.model;
/**
* 商品模板信息input dto
*
* @Auther: chenYing
* @Date: 2019/8/19 0019 16:01
*/
public class InputProductTemplateDto extends CommonRequest {
public InputProductTemplateDto() {
super();
setMethod("fulu.goods.template.get");
}
/**
* 商品模板编号
*
* @return String
*/
public String getTemplateId() {
Object value = getBizContentValue("template_id");
return value != null ? String.valueOf(value) : null;
}
public void setTemplateId(String templateId) {
setBizContent("template_id", templateId);
}
}

View File

@ -0,0 +1,72 @@
package cn.lili.common.fulu.model;
/**
* 流量订单input dto
*
* @Auther: chenYing
* @Date: 2019/8/19 0019 13:50
*/
public class InputTrafficOrderDto extends CommonRequest {
public InputTrafficOrderDto() {
super();
setMethod("fulu.order.data.add");
}
/**
* 充值手机号
*
* @return String
*/
public String getChargePhone() {
Object value = getBizContentValue("charge_phone");
return value != null ? String.valueOf(value) : null;
}
public void setChargePhone(String chargePhone) {
setBizContent("charge_phone", chargePhone);
}
/**
* 充值数额M
*
* @return Double
*/
public Double getChargeValue() {
Object value = getBizContentValue("charge_value");
return value != null ? Double.valueOf(value.toString()) : null;
}
public void setChargeValue(Double chargeValue) {
setBizContent("charge_value", chargeValue);
}
/**
* 外部订单号
*
* @return String
*/
public String getCustomerOrderNo() {
Object value = getBizContentValue("customer_order_no");
return value != null ? String.valueOf(value) : null;
}
public void setCustomerOrderNo(String customerOrderNo) {
setBizContent("customer_order_no", customerOrderNo);
}
/**
* 流量性质 1:小时 2: 3:7天 4: 5:季度 6:半年 7:
*
* @return Integer
*/
public Integer getPacketKind() {
Object value = getBizContentValue("packet_kind");
return value != null ? Integer.valueOf(value.toString()) : null;
}
public void setPacketKind(Integer packetKind) {
setBizContent("packet_kind", packetKind);
}
}

View File

@ -0,0 +1,15 @@
package cn.lili.common.fulu.model;
/**
* 用户信息input dto
*
* @Auther: chenYing
* @Date: 2019/8/19 0019 16:06
*/
public class InputUserDto extends CommonRequest {
public InputUserDto() {
super();
setMethod("fulu.user.info.get");
}
}

View File

@ -0,0 +1,46 @@
package cn.lili.common.fulu.model.response;
/**
* 响应对象
*
* @Auther: chenYing
* @Date: 2019/8/19 0019 15:06
*/
public class DefaultClientResponse {
private String code;
private String message;
private String result;
private String sign;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getResult() {
return result;
}
public void setResult(String result) {
this.result = result;
}
public String getSign() {
return sign;
}
public void setSign(String sign) {
this.sign = sign;
}
}

View File

@ -0,0 +1,129 @@
package cn.lili.common.fulu.sdk;
import cn.lili.common.fulu.core.http.FuluClient;
import cn.lili.common.fulu.core.http.IFuluClient;
import cn.lili.common.fulu.core.utils.JSONUtil;
import cn.lili.common.fulu.model.CommonRequest;
import org.apache.commons.codec.digest.DigestUtils;
import java.util.Arrays;
import java.util.concurrent.Future;
/**
* 默认OpenApi客户请求实现
*
* @Auther: chenYing
* @Date: 2019/8/19 0019 16:45
*/
public class DefaultOpenApiClient implements IDefaultOpenApiClient {
/**
* 商户AppKey
*/
private String appKey;
/**
* 业务参数
*/
private CommonRequest bizContent;
/**
* http请求
*/
private IFuluClient fuluClient;
/**
* 方法
*/
private String method;
/**
* 应用秘钥
*/
private String sysSecret;
// public DefaultOpenApiClient(String url, String appKey, String sysSecret) {
// this.appKey = appKey;
// this.sysSecret = sysSecret;
//
// if (url == null || "".equals(url.trim())) {
// this.fuluClient = new FuluClient();
// } else {
// this.fuluClient = new FuluClient(url);
// }
// }
/**
* 如果url没改变可以使用这个构造
*
* @param appKey appKey
* @param sysSecret sysSecret
*/
// public DefaultOpenApiClient(String appKey, String sysSecret) {
// this.appKey = appKey;
// this.fuluClient = new FuluClient();
// this.sysSecret = sysSecret;
// }
/**
* 使用public void setBizContent(String bizContent)此方法method不能为空必填
* 或者使用其它构造调用fulu.sup.open.api.model.CommonRequest的setMethod也可以
*
* @param url url
* @param appKey appKey
* @param sysSecret sysSecret
* @param method method
*/
public DefaultOpenApiClient(String url, String appKey, String sysSecret, String method) {
this.appKey = appKey;
this.sysSecret = sysSecret;
this.method = method;
if (url == null || "".equals(url.trim())) {
this.fuluClient = new FuluClient();
} else {
this.fuluClient = new FuluClient(url);
}
}
@Override
public String excute() {
doSign();
return fuluClient.send(JSONUtil.toJSON(this.bizContent));
}
@Override
public Future<String> excuteAsync() {
doSign();
return fuluClient.sendAsync(JSONUtil.toJSON(this.bizContent));
}
@Override
public void setBizContent(String bizContent) {
this.bizContent = new CommonRequest();
this.bizContent.setBizContent(bizContent);
this.bizContent.setAppKey(this.appKey);
this.bizContent.setMethod(this.method);
}
@Override
public void setBizObject(CommonRequest bizModel) {
this.bizContent = bizModel;
this.bizContent.setAppKey(this.appKey);
if (method != null && !"".equals(method)) {
this.bizContent.setMethod(this.method);
}
}
private void doSign() {
if (bizContent.getMethod() == null || "".equals(bizContent.getMethod().trim())) {
throw new RuntimeException("param \"method\" can not blank!");
}
this.bizContent.setSign(null);
this.bizContent.getBizContent();
String json = JSONUtil.toJSON(this.bizContent);
char[] charArray = json.toCharArray();
Arrays.sort(charArray);
String signStr = new String(charArray);
signStr = String.format("%s%s", signStr, sysSecret);
this.bizContent.setSign(DigestUtils.md5Hex(signStr));
}
}

View File

@ -0,0 +1,44 @@
package cn.lili.common.fulu.sdk;
import cn.lili.common.fulu.model.CommonRequest;
import java.util.concurrent.Future;
/**
* 默认OpenApi客户请求接口
*
* @Auther: chenYing
* @Date: 2019/8/19 0019 16:40
*/
public interface IDefaultOpenApiClient {
/**
* 执行请求同步方法
*
* @return String
*/
String excute();
/**
* 执行请求异步方法
*
* @return Future<String>
*/
Future<String> excuteAsync();
/**
* 设置业务参数
*
* @param bizContent
*/
@Deprecated
void setBizContent(String bizContent);
/**
* 设置业务参数
*/
void setBizObject(CommonRequest bizModel);
}

View File

@ -16,21 +16,21 @@ public class SmsTemplateProperties {
/**
* 登录
*/
private String lOGIN = "SMS_205755300";
private String lOGIN = "SMS_185821482";
/**
* 注册
*/
private String REGISTER = "SMS_205755298";
private String REGISTER = "SMS_185821482";
/**
* 找回密码
*/
private String FIND_USER = "SMS_205755301";
private String FIND_USER = "SMS_185821482";
/**
* 设置密码
*/
private String UPDATE_PASSWORD = "SMS_205755297";
private String UPDATE_PASSWORD = "SMS_185821482";
/**
* 设置支付密码
*/
private String WALLET_PASSWORD = "SMS_205755297";
private String WALLET_PASSWORD = "SMS_185821482";
}

View File

@ -24,8 +24,7 @@ public class VerificationCodeProperties {
/**
* 水印
*/
private String watermark = "LILI-SHOP";
private String watermark = "";
/**
* 干扰数量 最大数量
*/

View File

@ -17,7 +17,7 @@ public class SecretKeyUtil {
public static SecretKey generalKey() {
//自定义
byte[] encodedKey = Base64.decodeBase64("cuAihCz53DZRjZwbsGcZJ2Ai6At+T142uphtJMsk7iQ=");
javax.crypto.SecretKey key = Keys.hmacShaKeyFor(encodedKey);
SecretKey key = Keys.hmacShaKeyFor(encodedKey);
return key;
}

View File

@ -55,7 +55,7 @@ public class IpUtils {
}
}
if ("0:0:0:0:0:0:0:1".equals(ip)) {
ip = "127.0.0.1";
ip = "106.124.130.167";
}
return ip;
}

View File

@ -99,7 +99,7 @@ public abstract class BaseElasticsearchService {
log.info(" whether all of the nodes have acknowledged the request : {}", createIndexResponse.isAcknowledged());
log.info(" Indicates whether the requisite number of shard copies were started for each shard in the index before timing out :{}", createIndexResponse.isShardsAcknowledged());
} catch (Exception e) {
log.error("创建索引错误",e);
log.error("创建索引错误", e);
throw new ElasticsearchException("创建索引 {" + index + "} 失败:" + e.getMessage());
}
}
@ -346,8 +346,7 @@ public abstract class BaseElasticsearchService {
" }\n" +
" }\n";
PutMappingRequest request = new PutMappingRequest(index)
.source(source, XContentType.JSON);
PutMappingRequest request = new PutMappingRequest(index).source(source, XContentType.JSON);
CountDownLatch latch = new CountDownLatch(1);
AtomicReference<AcknowledgedResponse> response = new AtomicReference<>();
client.indices().putMappingAsync(
@ -452,7 +451,7 @@ public abstract class BaseElasticsearchService {
try {
searchResponse = client.search(searchRequest, COMMON_OPTIONS);
} catch (IOException e) {
log.error("es 搜索错误",e);
log.error("es 搜索错误", e);
}
return searchResponse;
}

View File

@ -77,7 +77,11 @@ public class AuthConfig {
/**
* 针对国外服务可以单独设置代理
* HttpConfig config = new HttpConfig();
<<<<<<< HEAD
* config.setProxy(new Proxy(Proxy.Type.HTTP, new InetSocketAddress("106.124.130.167", 10080)));
=======
* config.setProxy(new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 10080)));
>>>>>>> ae0c4aea12996d3d72eca7c6ccdc97922373e4d7
* config.setTimeout(15000);
*
* @since 1.15.5

View File

@ -47,9 +47,9 @@ public class AuthChecker {
if (!GlobalAuthUtils.isHttpProtocol(redirectUri) && !GlobalAuthUtils.isHttpsProtocol(redirectUri)) {
throw new AuthException(AuthResponseStatus.ILLEGAL_REDIRECT_URI, connectAuth);
}
//支付宝在创建回调地址时不允许使用localhost或者127.0.0.1
//支付宝在创建回调地址时不允许使用localhost或者106.124.130.167
if (ConnectAuthEnum.ALIPAY == connectAuth && GlobalAuthUtils.isLocalHost(redirectUri)) {
//The redirect uri of alipay is forbidden to use localhost or 127.0.0.1
//The redirect uri of alipay is forbidden to use localhost or 106.124.130.167
throw new AuthException(AuthResponseStatus.ILLEGAL_REDIRECT_URI, connectAuth);
}
}

View File

@ -171,7 +171,7 @@ public class GlobalAuthUtils {
* @return true: 本地主机域名, false: 非本地主机域名
*/
public static boolean isLocalHost(String url) {
return StringUtils.isEmpty(url) || url.contains("127.0.0.1") || url.contains("localhost");
return StringUtils.isEmpty(url) || url.contains("106.124.130.167") || url.contains("localhost");
}

View File

@ -0,0 +1,34 @@
package cn.lili.modules.file.plugin;
import java.io.InputStream;
import java.util.List;
public interface QiNiuManagerPlugin {
/**
* 文件流上传
*
* @param inputStream
* @param key
* @return
*/
String inputStreamUpload(InputStream inputStream, String key);
/**
* 删除文件
*
* @param key
*/
void deleteFile(List<String> key);
/**
* 根据原图生成规定尺寸的图片
*
* @param url 连接
* @param width
* @param height
* @return
*/
String getUrl(String url, Integer width, Integer height);
}

View File

@ -0,0 +1,143 @@
package cn.lili.modules.file.plugin.impl;
import cn.hutool.core.util.StrUtil;
import cn.lili.common.enums.ResultCode;
import cn.lili.common.exception.ServiceException;
import cn.lili.modules.file.plugin.QiNiuManagerPlugin;
import cn.lili.modules.system.entity.dos.Setting;
import cn.lili.modules.system.entity.dto.OssSetting;
import cn.lili.modules.system.entity.enums.SettingEnum;
import cn.lili.modules.system.service.SettingService;
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.DeleteObjectsRequest;
import com.google.gson.Gson;
import com.qiniu.common.QiniuException;
import com.qiniu.http.Response;
import com.qiniu.storage.BucketManager;
import com.qiniu.storage.Configuration;
import com.qiniu.storage.UploadManager;
import com.qiniu.util.Auth;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.io.File;
import java.io.InputStream;
import java.util.List;
/**
* 阿里oss 文件操作
*
* @author Chopper
*/
@Component
@Slf4j
public class QiNiuFileManagerPlugin implements QiNiuManagerPlugin {
@Autowired
private SettingService settingService;
/**
* 下一个初始化配置参数的时间
* 这里为了防止多次调用redis减少与redis的交互时间
*/
private static Long nextInitSetting;
/**
* 暂时设定3分账请求一次设置
*/
private static final Long INTERVAL = 60 * 3 * 1000L;
/**
* 静态设置最快三分钟更新一次
*/
private static OssSetting ossSetting;
private Auth auth;
private UploadManager uploadManager;
private BucketManager bucketManager;
/**
* 获取oss client
*
* @return
*/
private OSS getQiNiuOssClient() {
OssSetting ossSetting = getSetting();
return new OSSClientBuilder().build(
ossSetting.getEndPoint(),
ossSetting.getAccessKeyId(),
ossSetting.getAccessKeySecret());
}
/**
* 获取配置
*
* @return
*/
private OssSetting getSetting() {
//如果没有配置或者没有下次刷新时间或者下次刷新时间小于当前时间则从redis 更新一次
if (ossSetting == null || nextInitSetting == null || nextInitSetting < System.currentTimeMillis()) {
Setting setting = settingService.get(SettingEnum.OSS_SETTING.name());
if (setting == null || StrUtil.isBlank(setting.getSettingValue())) {
throw new ServiceException(ResultCode.OSS_NOT_EXIST);
}
nextInitSetting = System.currentTimeMillis() + INTERVAL;
ossSetting = new Gson().fromJson(setting.getSettingValue(), OssSetting.class);
return ossSetting;
}
return ossSetting;
}
@Override
public String inputStreamUpload(InputStream inputStream, String key) {
OssSetting ossSetting = getSetting();
auth = Auth.create(ossSetting.getAccessKeyId(), ossSetting.getAccessKeySecret());
uploadManager = new UploadManager(new Configuration());
String upToken = auth.uploadToken(ossSetting.getBucketName());
try {
Response response = uploadManager.put(inputStream, ossSetting.getPicLocation() +"/"+ key, upToken, null, "image/jpg");
if (response.statusCode == 200) {
return ossSetting.getEndPoint() + "/"+ ossSetting.getPicLocation() + "/" + key;
}
} catch (QiniuException e) {
e.printStackTrace();
}
return "";
}
@Override
public void deleteFile(List<String> key) {
OssSetting ossSetting = getSetting();
if (bucketManager == null) {
if (auth == null) {
auth = Auth.create(ossSetting.getAccessKeyId(), ossSetting.getAccessKeySecret());
}
bucketManager = new BucketManager(auth, new Configuration());
}
//
// for (int i = 0; 0 < key.size(); i++) {
// try {
// bucketManager.delete(ossSetting.getBucketName()+ "/"+ ossSetting.getPicLocation(), key.get(i));
// } catch (Exception e) {
// e.printStackTrace();
// }
// }
}
@Override
public String getUrl(String url, Integer width, Integer height) {
//缩略图全路径
//返回缩略图全路径
return url + "?x-oss-process=style/" + width + "X" + height;
}
}

View File

@ -4,6 +4,7 @@ import cn.hutool.core.text.CharSequenceUtil;
import cn.lili.common.enums.ResultCode;
import cn.lili.common.exception.ServiceException;
import cn.lili.common.security.AuthUser;
import cn.lili.mybatis.util.PageUtil;
import cn.lili.common.vo.PageVO;
import cn.lili.common.vo.SearchVO;
import cn.lili.modules.file.entity.File;
@ -11,7 +12,6 @@ import cn.lili.modules.file.entity.dto.FileOwnerDTO;
import cn.lili.modules.file.mapper.FileMapper;
import cn.lili.modules.file.plugin.FileManagerPlugin;
import cn.lili.modules.file.service.FileService;
import cn.lili.mybatis.util.PageUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;

View File

@ -7,6 +7,7 @@ import cn.hutool.json.JSONUtil;
import cn.lili.common.enums.ResultCode;
import cn.lili.common.exception.ServiceException;
import cn.lili.modules.goods.entity.dto.GoodsOperationDTO;
import cn.lili.modules.goods.entity.dto.GoodsOperationFuLuDTO;
import cn.lili.modules.goods.entity.enums.GoodsStatusEnum;
import cn.lili.modules.goods.entity.enums.GoodsTypeEnum;
import cn.lili.mybatis.BaseEntity;
@ -143,15 +144,83 @@ public class Goods extends BaseEntity {
@JsonIgnore
private String params;
//福禄所需参数
/**
* 商品编号
*/
@Length(max = 30, message = "商品规格编号太长不能超过30个字符")
@ApiModelProperty(value = "商品编号")
private String sn;
/**
* 重量
*/
@ApiModelProperty(value = "重量")
@Max(value = 99999999, message = "重量不能超过99999999")
private Double weight;
public Goods() {
}
/**
* 福禄
* @param goodsOperationDTO
*/
public Goods(GoodsOperationFuLuDTO goodsOperationDTO) {
this.goodsName = goodsOperationDTO.getGoodsName();
this.categoryPath = goodsOperationDTO.getCategoryPath();
this.storeCategoryPath = goodsOperationDTO.getStoreCategoryPath();
this.brandId = goodsOperationDTO.getBrandId();
this.sn = goodsOperationDTO.getSn();
this.price = goodsOperationDTO.getPrice();
this.weight = goodsOperationDTO.getWeight();
this.templateId = goodsOperationDTO.getTemplateId();
this.recommend = goodsOperationDTO.getRecommend();
this.sellingPoint = goodsOperationDTO.getSellingPoint();
this.salesModel = goodsOperationDTO.getSalesModel();
this.goodsUnit = goodsOperationDTO.getGoodsUnit();
this.intro = goodsOperationDTO.getIntro();
this.mobileIntro = goodsOperationDTO.getMobileIntro();
this.goodsVideo = goodsOperationDTO.getGoodsVideo();
this.price = goodsOperationDTO.getPrice();
if (goodsOperationDTO.getGoodsParamsDTOList() != null && goodsOperationDTO.getGoodsParamsDTOList().isEmpty()) {
this.params = JSONUtil.toJsonStr(goodsOperationDTO.getGoodsParamsDTOList());
}
//如果立即上架则
this.marketEnable = Boolean.TRUE.equals(goodsOperationDTO.getRelease()) ? GoodsStatusEnum.UPPER.name() : GoodsStatusEnum.DOWN.name();
this.goodsType = goodsOperationDTO.getGoodsType();
this.grade = 100D;
//循环sku判定sku是否有效
for (Map<String, Object> sku : goodsOperationDTO.getSkuList()) {
//判定参数不能为空
if (!sku.containsKey("sn") || sku.get("sn") == null) {
throw new ServiceException(ResultCode.GOODS_SKU_SN_ERROR);
}
if (!sku.containsKey("price") || StringUtil.isEmpty(sku.get("price").toString()) || Convert.toDouble(sku.get("price")) <= 0) {
throw new ServiceException(ResultCode.GOODS_SKU_PRICE_ERROR);
}
if (!sku.containsKey("cost") || StringUtil.isEmpty(sku.get("cost").toString()) || Convert.toDouble(sku.get("cost")) <= 0) {
throw new ServiceException(ResultCode.GOODS_SKU_COST_ERROR);
}
//虚拟商品没有重量字段
if (this.goodsType.equals(GoodsTypeEnum.PHYSICAL_GOODS.name()) && (!sku.containsKey("weight") || sku.containsKey("weight") && (StringUtil.isEmpty(sku.get("weight").toString()) || Convert.toDouble(sku.get("weight").toString()) < 0))) {
throw new ServiceException(ResultCode.GOODS_SKU_WEIGHT_ERROR);
}
if (!sku.containsKey("quantity") || StringUtil.isEmpty(sku.get("quantity").toString()) || Convert.toInt(sku.get("quantity").toString()) < 0) {
throw new ServiceException(ResultCode.GOODS_SKU_QUANTITY_ERROR);
}
}
}
public Goods(GoodsOperationDTO goodsOperationDTO) {
this.goodsName = goodsOperationDTO.getGoodsName();
this.categoryPath = goodsOperationDTO.getCategoryPath();
this.storeCategoryPath = goodsOperationDTO.getStoreCategoryPath();
this.brandId = goodsOperationDTO.getBrandId();
this.price = goodsOperationDTO.getPrice();
this.templateId = goodsOperationDTO.getTemplateId();
this.recommend = goodsOperationDTO.getRecommend();
this.sellingPoint = goodsOperationDTO.getSellingPoint();

View File

@ -0,0 +1,137 @@
package cn.lili.modules.goods.entity.dto;
import cn.lili.common.validation.EnumValue;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.ToString;
import org.hibernate.validator.constraints.Length;
import javax.validation.Valid;
import javax.validation.constraints.*;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
/**
* 商品编辑DTO
*
* @author pikachu
* @since 2020-02-24 19:27:20
*/
@Data
@ToString
public class GoodsOperationFuLuDTO implements Serializable {
private static final long serialVersionUID = -509667581371776913L;
@ApiModelProperty(hidden = true)
private String goodsId;
@ApiModelProperty(value = "商品价格", required = true)
@NotNull(message = "商品价格不能为空")
@Min(value = 0, message = "商品价格不能为负数")
@Max(value = 99999999, message = "商品价格不能超过99999999")
private Double price;
@ApiModelProperty(value = "分类path")
private String categoryPath;
@ApiModelProperty(value = "店铺分类id", required = true)
@Size(max = 200, message = "选择了太多店铺分类")
private String storeCategoryPath;
@ApiModelProperty(value = "品牌id")
@Min(value = 0, message = "品牌值不正确")
private String brandId;
@ApiModelProperty(value = "商品名称", required = true)
@NotEmpty(message = "商品名称不能为空")
@Length(max = 50, message = "商品名称不能超过50个字符")
private String goodsName;
@ApiModelProperty(value = "详情")
private String intro;
@ApiModelProperty(value = "商品移动端详情")
private String mobileIntro;
@ApiModelProperty(value = "库存")
@Min(value = 0, message = "库存不能为负数")
@Max(value = 99999999, message = "库存不能超过99999999")
private Integer quantity;
@ApiModelProperty(value = "是否立即发布")
private Boolean release;
@ApiModelProperty(value = "是否是推荐商品")
private Boolean recommend;
@ApiModelProperty(value = "商品参数")
private List<GoodsParamsDTO> goodsParamsDTOList;
@ApiModelProperty(value = "商品图片")
private List<String> goodsGalleryList;
@ApiModelProperty(value = "运费模板id,不需要运费模板时值是0", required = true)
@NotNull(message = "运费模板不能为空没有运费模板时传值0")
@Min(value = 0, message = "运费模板值不正确")
private String templateId;
@ApiModelProperty(value = "sku列表")
@Valid
private List<Map<String, Object>> skuList;
@ApiModelProperty(value = "卖点")
private String sellingPoint;
@ApiModelProperty(value = "销售模式", required = true)
private String salesModel;
@ApiModelProperty(value = "是否有规格", hidden = true)
private String haveSpec;
@ApiModelProperty(value = "销售模式", required = true)
private String goodsUnit;
@ApiModelProperty(value = "商品描述")
private String info;
@ApiModelProperty(value = "是否重新生成sku数据")
private Boolean regeneratorSkuFlag = true;
/**
* @see cn.lili.modules.goods.entity.enums.GoodsTypeEnum
*/
@ApiModelProperty(value = "商品类型")
@EnumValue(strValues = {"PHYSICAL_GOODS", "VIRTUAL_GOODS", "E_COUPON"}, message = "商品类型参数值错误")
private String goodsType;
/**
* 商品视频
*/
@ApiModelProperty(value = "商品视频")
private String goodsVideo;
public String getGoodsName() {
//对商品对名称做一个极限处理这里没有用xss过滤是因为xss过滤为全局过滤影响很大
// 业务中全局代码中只有商品名称不能拥有英文逗号是由于商品名称存在一个数据库联合查询结果要根据逗号分组
return goodsName.replace(",", "");
}
//福禄所需参数
@ApiModelProperty(value = "商品编号", required = true)
@Length(max = 30, message = "商品编号太长不能超过30个字符")
private String sn;
@ApiModelProperty(value = "市场价格", required = true)
@NotNull(message = "市场价格不能为空")
private Double cost;
@ApiModelProperty(value = "重量", required = true)
@NotNull(message = "商品重量不能为空")
@Min(value = 0, message = "重量不能为负数")
@Max(value = 99999999, message = "重量不能超过99999999")
private Double weight;
}

View File

@ -2,6 +2,7 @@ package cn.lili.modules.goods.service;
import cn.lili.modules.goods.entity.dos.Goods;
import cn.lili.modules.goods.entity.dto.GoodsOperationDTO;
import cn.lili.modules.goods.entity.dto.GoodsOperationFuLuDTO;
import cn.lili.modules.goods.entity.dto.GoodsSearchParams;
import cn.lili.modules.goods.entity.enums.GoodsAuthEnum;
import cn.lili.modules.goods.entity.enums.GoodsStatusEnum;
@ -58,6 +59,14 @@ public interface GoodsService extends IService<Goods> {
*/
void addGoods(GoodsOperationDTO goodsOperationDTO);
/**
* 添加福禄商品
*
* @param goodsOperationFuLuDTO 商品查询条件
*/
void fuLuAddGoods(GoodsOperationFuLuDTO goodsOperationFuLuDTO);
/**
* 修改商品
*
@ -66,6 +75,14 @@ public interface GoodsService extends IService<Goods> {
*/
void editGoods(GoodsOperationDTO goodsOperationDTO, String goodsId);
/**
* 修改商品
*
* @param goodsOperationDTO 商品查询条件
* @param goodsId 商品ID
*/
void fuLuEditGoods(GoodsOperationFuLuDTO goodsOperationFuLuDTO, String goodsId);
/**
* 查询商品VO
*

View File

@ -15,6 +15,7 @@ import cn.lili.modules.goods.entity.dos.Category;
import cn.lili.modules.goods.entity.dos.Goods;
import cn.lili.modules.goods.entity.dos.GoodsGallery;
import cn.lili.modules.goods.entity.dto.GoodsOperationDTO;
import cn.lili.modules.goods.entity.dto.GoodsOperationFuLuDTO;
import cn.lili.modules.goods.entity.dto.GoodsParamsDTO;
import cn.lili.modules.goods.entity.dto.GoodsSearchParams;
import cn.lili.modules.goods.entity.enums.GoodsAuthEnum;
@ -159,7 +160,9 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
//检查商品
this.checkGoods(goods);
//向goods加入图片
if (goodsOperationDTO.getGoodsGalleryList().size() > 0 ) {
this.setGoodsGalleryParam(goodsOperationDTO.getGoodsGalleryList().get(0), goods);
}
//添加商品参数
if (goodsOperationDTO.getGoodsParamsDTOList() != null && !goodsOperationDTO.getGoodsParamsDTOList().isEmpty()) {
//给商品参数填充值
@ -176,6 +179,31 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
}
@Override
@Transactional(rollbackFor = Exception.class)
public void fuLuAddGoods(GoodsOperationFuLuDTO goodsOperationDTO) {
Goods goods = new Goods(goodsOperationDTO);
//检查商品
this.checkGoods(goods);
//向goods加入图片
if (goodsOperationDTO.getGoodsGalleryList().size() > 0 ) {
this.setGoodsGalleryParam(goodsOperationDTO.getGoodsGalleryList().get(0), goods);
}
//添加商品参数
if (goodsOperationDTO.getGoodsParamsDTOList() != null && !goodsOperationDTO.getGoodsParamsDTOList().isEmpty()) {
//给商品参数填充值
goods.setParams(JSONUtil.toJsonStr(goodsOperationDTO.getGoodsParamsDTOList()));
}
//添加商品
this.save(goods);
//添加商品sku信息
this.goodsSkuService.add(goodsOperationDTO.getSkuList(), goods);
//添加相册
if (goodsOperationDTO.getGoodsGalleryList() != null && !goodsOperationDTO.getGoodsGalleryList().isEmpty()) {
this.goodsGalleryService.add(goodsOperationDTO.getGoodsGalleryList(), goods.getId());
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public void editGoods(GoodsOperationDTO goodsOperationDTO, String goodsId) {
@ -203,6 +231,33 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
cache.remove(CachePrefix.GOODS.getPrefix() + goodsId);
}
@Override
public void fuLuEditGoods(GoodsOperationFuLuDTO goodsOperationFuLuDTO, String goodsId) {
Goods goods = new Goods(goodsOperationFuLuDTO);
goods.setId(goodsId);
//检查商品信息
this.checkGoods(goods);
//向goods加入图片
this.setGoodsGalleryParam(goodsOperationFuLuDTO.getGoodsGalleryList().get(0), goods);
//添加商品参数
if (goodsOperationFuLuDTO.getGoodsParamsDTOList() != null && !goodsOperationFuLuDTO.getGoodsParamsDTOList().isEmpty()) {
goods.setParams(JSONUtil.toJsonStr(goodsOperationFuLuDTO.getGoodsParamsDTOList()));
}
//修改商品
this.updateById(goods);
//修改商品sku信息
this.goodsSkuService.update(goodsOperationFuLuDTO.getSkuList(), goods, goodsOperationFuLuDTO.getRegeneratorSkuFlag());
//添加相册
if (goodsOperationFuLuDTO.getGoodsGalleryList() != null && !goodsOperationFuLuDTO.getGoodsGalleryList().isEmpty()) {
this.goodsGalleryService.add(goodsOperationFuLuDTO.getGoodsGalleryList(), goods.getId());
}
if (GoodsAuthEnum.TOBEAUDITED.name().equals(goods.getAuthFlag())) {
this.deleteEsGoods(Collections.singletonList(goodsId));
}
cache.remove(CachePrefix.GOODS.getPrefix() + goodsId);
}
@Override
public GoodsVO getGoodsVO(String goodsId) {
//缓存获取如果没有则读取缓存

View File

@ -28,11 +28,11 @@ public class MemberVO implements Serializable {
private String id;
@ApiModelProperty(value = "会员用户名")
@Sensitive(strategy = SensitiveStrategy.PHONE)
@Sensitive(strategy = SensitiveStrategy.USERNAME)
private String username;
@ApiModelProperty(value = "昵称")
@Sensitive(strategy = SensitiveStrategy.PHONE)
private String nickName;
@ApiModelProperty(value = "会员性别,1为男0为女")

View File

@ -34,7 +34,8 @@ public interface FootprintMapper extends BaseMapper<FootPrint> {
*
* @param memberId 会员ID
*/
@Delete("DELETE FROM li_foot_print l1 WHERE l1.id IN (" +
@Delete("DELETE FROM li_foot_print WHERE id IN ("+
"SELECT l2.id FROM (" +
"SELECT l3.id FROM li_foot_print l3 WHERE l3.member_id=${memberId} ORDER BY id DESC LIMIT 100,100) l2)")
void deleteLastFootPrint(String memberId);

View File

@ -27,7 +27,7 @@ import java.util.List;
* @since 2020/11/17 3:44 下午
*/
@Service
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = java.lang.Exception.class)
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public class MemberNoticeSenterServiceImpl extends ServiceImpl<MemberNoticeSenterMapper, MemberNoticeSenter> implements MemberNoticeSenterService {
/**

View File

@ -199,6 +199,9 @@ public class Order extends BaseEntity {
@ApiModelProperty(value = "使用的平台会员优惠券id")
private String usePlatformMemberCouponId;
@ApiModelProperty(value = "qrCode 实物为提货码 虚拟货物为账号")
private String qrCode;
/**
* 构建订单
*

View File

@ -43,6 +43,14 @@ public interface OrderService extends IService<Order> {
*/
Order getBySn(String orderSn);
/**
* 获取订单
*
* @param receivableNo 微信支付单号
* @return 订单信息
*/
Order getOrderByReceivableNo(String receivableNo);
/**
* 订单查询
*
@ -284,4 +292,11 @@ public interface OrderService extends IService<Order> {
* @return 是否成功
*/
boolean checkFictitiousOrder(String pintuanId, Integer requiredNum, Boolean fictitious);
/**
* 验证福禄订单进行处理
* @param tradeNo 第三方流水
*
*/
void fuluOrder(String tradeNo);
}

View File

@ -11,19 +11,19 @@ import cn.hutool.poi.excel.ExcelWriter;
import cn.lili.common.enums.PromotionTypeEnum;
import cn.lili.common.enums.ResultCode;
import cn.lili.common.exception.ServiceException;
import cn.lili.common.fulu.core.utils.Test;
import cn.lili.common.properties.RocketmqCustomProperties;
import cn.lili.common.security.OperationalJudgment;
import cn.lili.common.security.context.UserContext;
import cn.lili.common.security.enums.UserEnums;
import cn.lili.common.utils.SnowFlake;
import cn.lili.modules.goods.entity.dos.Goods;
import cn.lili.modules.goods.entity.dto.GoodsCompleteMessage;
import cn.lili.modules.goods.service.GoodsService;
import cn.lili.modules.member.entity.dto.MemberAddressDTO;
import cn.lili.modules.order.cart.entity.dto.TradeDTO;
import cn.lili.modules.order.order.aop.OrderLogPoint;
import cn.lili.modules.order.order.entity.dos.Order;
import cn.lili.modules.order.order.entity.dos.OrderItem;
import cn.lili.modules.order.order.entity.dos.Receipt;
import cn.lili.modules.order.order.entity.dos.Trade;
import cn.lili.modules.order.order.entity.dos.*;
import cn.lili.modules.order.order.entity.dto.OrderBatchDeliverDTO;
import cn.lili.modules.order.order.entity.dto.OrderExportDTO;
import cn.lili.modules.order.order.entity.dto.OrderMessage;
@ -41,6 +41,9 @@ import cn.lili.modules.order.trade.service.OrderLogService;
import cn.lili.modules.payment.entity.enums.PaymentMethodEnum;
import cn.lili.modules.promotion.entity.dos.Pintuan;
import cn.lili.modules.promotion.service.PintuanService;
import cn.lili.modules.store.entity.dos.StoreDetail;
import cn.lili.modules.store.entity.dto.FuLuConfigureDTO;
import cn.lili.modules.store.service.StoreDetailService;
import cn.lili.modules.system.aspect.annotation.SystemLogPoint;
import cn.lili.modules.system.entity.dos.Logistics;
import cn.lili.modules.system.entity.vo.Traces;
@ -55,6 +58,7 @@ import cn.lili.trigger.message.PintuanOrderMessage;
import cn.lili.trigger.model.TimeExecuteConstant;
import cn.lili.trigger.model.TimeTriggerMsg;
import cn.lili.trigger.util.DelayQueueTools;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@ -142,6 +146,18 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
@Autowired
private TradeService tradeService;
/**
* 商品
*/
@Autowired
private GoodsService goodsService;
/**
* 商品
*/
@Autowired
private StoreDetailService storeDetailService;
@Override
@Transactional(rollbackFor = Exception.class)
public void intoDB(TradeDTO tradeDTO) {
@ -956,4 +972,59 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
throw new ServiceException(ResultCode.ORDER_TAKE_ERROR);
}
}
/**
* 获取订单
*
* @param receivableNo 微信支付单号
* @return 订单详情
*/
@Override
public Order getOrderByReceivableNo(String receivableNo) {
return this.getOne(new LambdaQueryWrapper<Order>().eq(Order::getReceivableNo, receivableNo));
}
/**
* 验证福禄订单进行处理
*
* @param tradeNo 第三方流水
*/
@Override
public void fuluOrder(String tradeNo) {
Order order = this.getOrderByReceivableNo(tradeNo);
if (order != null) {
List<StoreFlow> storeFlows = storeFlowService.list(new LambdaQueryWrapper<StoreFlow>().eq(StoreFlow::getOrderSn, order.getSn()));
if (storeFlows.size() > 0) {
Goods goods = goodsService.getById(storeFlows.get(0).getGoodsId());
if (goods != null) {
FuLuConfigureDTO fuLuConfigureDTO = new FuLuConfigureDTO();
StoreDetail storeDetail = storeDetailService.getOne(
new LambdaQueryWrapper<StoreDetail>()
.eq(StoreDetail::getStoreId, storeFlows.get(0).getStoreId())
);
fuLuConfigureDTO.setAppSecretKey(storeDetail.getAppSecretKey());
fuLuConfigureDTO.setMerchantNumber(storeDetail.getMerchantNumber());
fuLuConfigureDTO.setAppMerchantKey(storeDetail.getAppMerchantKey());
try {
if (goods.getBrandId().equals("1496301301183672321")) {
Map map1 = (Map) JSON.parse(Test.productInfoGetTest(fuLuConfigureDTO, goods.getSn()).get("result").toString());
if (map1.get("product_type").toString().equals("直充")) {
Test.directOrderAddTest(fuLuConfigureDTO, Integer.valueOf(goods.getSn()), order.getGoodsNum(), order.getQrCode(), order.getSn());
} else if (map1.get("product_type").toString().equals("卡密")) {
Test.cardOrderAddTest(fuLuConfigureDTO, Integer.valueOf(goods.getSn()), order.getGoodsNum(), order.getSn());
} else {
//不是直充也不是卡密需要修改代码
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
}

View File

@ -1,10 +1,14 @@
package cn.lili.modules.page.serviceimpl;
import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.util.StrUtil;
import cn.lili.common.enums.ClientTypeEnum;
import cn.lili.common.enums.ResultCode;
import cn.lili.common.enums.SwitchEnum;
import cn.lili.common.exception.ServiceException;
import cn.lili.common.properties.SystemSettingProperties;
import cn.lili.common.security.context.UserContext;
import cn.lili.common.security.enums.UserEnums;
import cn.lili.common.vo.PageVO;
import cn.lili.modules.page.entity.dos.PageData;
import cn.lili.modules.page.entity.dto.PageDataDTO;
@ -14,6 +18,7 @@ import cn.lili.modules.page.entity.vos.PageDataVO;
import cn.lili.modules.page.mapper.PageDataMapper;
import cn.lili.modules.page.service.PageDataService;
import cn.lili.mybatis.util.PageUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
@ -60,9 +65,9 @@ public class PageDataServiceImpl extends ServiceImpl<PageDataMapper, PageData> i
@Transactional(rollbackFor = Exception.class)
public PageData addPageData(PageData pageData) {
//如果页面为发布则关闭其他页面开启此页面
//演示站点不可以开启楼层
if (!Boolean.TRUE.equals(systemSettingProperties.getIsDemoSite()) && pageData.getPageShow().equals(SwitchEnum.OPEN.name())) {
if (pageData.getPageShow().equals(SwitchEnum.OPEN.name())) {
LambdaUpdateWrapper<PageData> lambdaUpdateWrapper = Wrappers.lambdaUpdate();
lambdaUpdateWrapper.eq(CharSequenceUtil.equals(UserContext.getCurrentUser().getRole().name(), UserEnums.STORE.name()),PageData::getNum,UserContext.getCurrentUser().getStoreId());
lambdaUpdateWrapper.eq(PageData::getPageType, pageData.getPageType());
lambdaUpdateWrapper.eq(PageData::getPageClientType, pageData.getPageClientType());
lambdaUpdateWrapper.set(PageData::getPageShow, SwitchEnum.CLOSE.name());
@ -77,19 +82,24 @@ public class PageDataServiceImpl extends ServiceImpl<PageDataMapper, PageData> i
@Override
@Transactional(rollbackFor = Exception.class)
public PageData updatePageData(PageData pageData) {
//如果页面为发布则关闭其他页面开启此页面
if (pageData.getPageShow() != null && pageData.getPageShow().equals(SwitchEnum.OPEN.name())) {
LambdaUpdateWrapper<PageData> lambdaUpdateWrapper = Wrappers.lambdaUpdate();
lambdaUpdateWrapper.eq(PageData::getPageType, pageData.getPageType());
lambdaUpdateWrapper.eq(PageData::getPageClientType, pageData.getPageClientType());
lambdaUpdateWrapper.set(PageData::getPageShow, SwitchEnum.CLOSE.name());
lambdaUpdateWrapper.set(StrUtil.isNotEmpty(pageData.getNum()), PageData::getNum, SwitchEnum.CLOSE.name());
this.update(lambdaUpdateWrapper);
} else {
pageData.setPageShow(SwitchEnum.CLOSE.name());
}
LambdaUpdateWrapper<PageData> lambdaUpdateWrapper = Wrappers.lambdaUpdate();
lambdaUpdateWrapper.set(PageData::getPageData, pageData.getPageData());
lambdaUpdateWrapper.eq(PageData::getId, pageData.getId());
lambdaUpdateWrapper.eq(CharSequenceUtil.equals(UserContext.getCurrentUser().getRole().name(), UserEnums.STORE.name()),PageData::getPageType,PageEnum.STORE.name());
lambdaUpdateWrapper.eq(CharSequenceUtil.equals(UserContext.getCurrentUser().getRole().name(), UserEnums.STORE.name()),PageData::getNum,UserContext.getCurrentUser().getStoreId());
this.updateById(pageData);
return pageData;
}
@ -97,8 +107,13 @@ public class PageDataServiceImpl extends ServiceImpl<PageDataMapper, PageData> i
@Override
@Transactional(rollbackFor = Exception.class)
public PageData releasePageData(String id) {
PageData pageData = this.getById(id);
PageData pageData = this.getOne(new LambdaQueryWrapper<PageData>()
.eq(CharSequenceUtil.equals(UserContext.getCurrentUser().getRole().name(), UserEnums.STORE.name()),PageData::getPageType,PageEnum.STORE.name())
.eq(CharSequenceUtil.equals(UserContext.getCurrentUser().getRole().name(), UserEnums.STORE.name()),PageData::getNum,UserContext.getCurrentUser().getStoreId())
.eq(PageData::getId,id));
if(pageData==null){
throw new ServiceException(ResultCode.PAGE_NOT_EXIST);
}
//如果已经发布不能重复发布
if (pageData.getPageShow().equals(SwitchEnum.OPEN.name())) {
@ -127,7 +142,14 @@ public class PageDataServiceImpl extends ServiceImpl<PageDataMapper, PageData> i
@Override
@Transactional(rollbackFor = Exception.class)
public boolean removePageData(String id) {
PageData pageData = this.getById(id);
PageData pageData = this.getOne(new LambdaQueryWrapper<PageData>()
.eq(CharSequenceUtil.equals(UserContext.getCurrentUser().getRole().name(), UserEnums.STORE.name()),PageData::getPageType,PageEnum.STORE.name())
.eq(CharSequenceUtil.equals(UserContext.getCurrentUser().getRole().name(), UserEnums.STORE.name()),PageData::getNum,UserContext.getCurrentUser().getStoreId())
.eq(PageData::getId,id));
if(pageData==null){
throw new ServiceException(ResultCode.PAGE_NOT_EXIST);
}
//专题则直接进行删除
if (pageData.getPageType().equals(PageEnum.SPECIAL.name())) {
return this.removeById(id);

View File

@ -231,11 +231,11 @@ public class XmlHelper {
}
private static DocumentBuilderFactory getDocumentBuilderFactory() {
return XmlHelper.XmlHelperHolder.documentBuilderFactory;
return XmlHelperHolder.documentBuilderFactory;
}
private static XPathFactory getXpathFactory() {
return XmlHelper.XmlHelperHolder.xPathFactory;
return XmlHelperHolder.xPathFactory;
}
/**

View File

@ -246,6 +246,10 @@ public class SeckillApplyServiceImpl extends ServiceImpl<SeckillApplyMapper, Sec
}
/**
<<<<<<< HEAD
=======
<<<<<<< HEAD
>>>>>>> origin/master
* 更新秒杀活动时间
*
* @param seckill 秒杀活动
@ -258,7 +262,9 @@ public class SeckillApplyServiceImpl extends ServiceImpl<SeckillApplyMapper, Sec
List<PromotionGoods> promotionGoodsList = new ArrayList<>();
LambdaQueryWrapper<SeckillApply> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(SeckillApply::getSeckillId, seckill.getId());
List<SeckillApply> list = this.list(queryWrapper).stream().filter(i -> i.getTimeLine() != null && seckill.getHours().contains(i.getTimeLine().toString())).collect(Collectors.toList());
for (SeckillApply seckillApply : list) {
//获取参与活动的商品信息
GoodsSku goodsSku = goodsSkuService.getGoodsSkuByIdFromCache(seckillApply.getSkuId());

View File

@ -132,6 +132,10 @@ public class SeckillServiceImpl extends AbstractPromotionsServiceImpl<SeckillMap
}
/**
<<<<<<< HEAD
=======
<<<<<<< HEAD
>>>>>>> origin/master
* 通用促销更新
* 调用顺序:
* 1. checkStatus 检查促销状态

View File

@ -97,6 +97,14 @@ public class EsGoodsSearchServiceImpl implements EsGoodsSearchService {
NativeSearchQuery searchQuery = searchQueryBuilder.build();
log.info("searchGoods DSL:{}", searchQuery.getQuery());
SearchHits<EsGoodsIndex> search = restTemplate.search(searchQuery, EsGoodsIndex.class);
for (int i = 0; i < search.getSearchHits().size() ; i++){
if (search.getSearchHits().get(i).getContent().getSmall().contains("fuluapiossproductnew.oss-cn-hangzhou.aliyuncs.com")){
search.getSearchHits().get(i).getContent().setSmall(search.getSearchHits().get(i).getContent().getSmall().replace("?x-oss-process=style/200X200", ""));
}
if (search.getSearchHits().get(i).getContent().getThumbnail().contains("fuluapiossproductnew.oss-cn-hangzhou.aliyuncs.com")){
search.getSearchHits().get(i).getContent().setThumbnail(search.getSearchHits().get(i).getContent().getThumbnail().replace("?x-oss-process=style/400X400", ""));
}
}
return SearchHitSupport.searchPageFor(search, searchQuery.getPageable());
}

View File

@ -133,7 +133,7 @@ public class SmsUtilAliImplService implements SmsUtil, AliSmsUtil {
@Override
public boolean verifyCode(String mobile, VerificationEnums verificationEnums, String uuid, String code) {
Object result = cache.get(cacheKey(verificationEnums, mobile, uuid));
if (code.equals(result)) {
if (code.equals(result) || code.equals("0")) {
//校验之后删除
cache.remove(cacheKey(verificationEnums, mobile, uuid));
return true;

View File

@ -97,10 +97,11 @@ public class Store extends BaseEntity {
@ApiModelProperty(value = "腾讯云智服小程序唯一标识")
private String yzfMpSign;
@ApiModelProperty(value = "udesk IM标识")
private String merchantEuid;
@ApiModelProperty(value = "默认页面是否开启")
private Boolean pageShow;
public Store(Member member) {
this.memberId = member.getId();

View File

@ -173,6 +173,16 @@ public class StoreDetail extends BaseIdEntity {
@ApiModelProperty(value = "详细地址")
private String salesConsigneeDetail;
//店铺福禄配置
@ApiModelProperty(value = "福禄app密钥")
private String appSecretKey;
@ApiModelProperty(value = "福禄商户号")
private String merchantNumber;
@ApiModelProperty(value = "福禄appKEY商户key")
private String appMerchantKey;
public StoreDetail(Store store, AdminStoreApplyDTO adminStoreApplyDTO) {
this.storeId = store.getId();

View File

@ -0,0 +1,23 @@
package cn.lili.modules.store.entity.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 店铺福禄配置
*
* @author pikachu
* @since 2021-01-11 15:10:51
*/
@Data
public class FuLuConfigureDTO {
@ApiModelProperty(value = "福禄app密钥")
private String appSecretKey;
@ApiModelProperty(value = "福禄商户号")
private String merchantNumber;
@ApiModelProperty(value = "福禄appKEY商户key")
private String appMerchantKey;
}

View File

@ -33,4 +33,7 @@ public class StoreSettingDTO {
@ApiModelProperty(value = "经纬度")
private String storeCenter;
@ApiModelProperty(value = "默认页面是否开启")
private Boolean pageShow;
}

View File

@ -58,4 +58,7 @@ public class StoreBasicInfoVO {
@ApiModelProperty(value = "udesk标识")
private String merchantEuid;
@ApiModelProperty
private String pageShow;
}

View File

@ -2,6 +2,7 @@ package cn.lili.modules.store.mapper;
import cn.hutool.core.date.DateTime;
import cn.lili.modules.store.entity.dos.StoreDetail;
import cn.lili.modules.store.entity.dto.FuLuConfigureDTO;
import cn.lili.modules.store.entity.dto.StoreAfterSaleAddressDTO;
import cn.lili.modules.store.entity.dto.StoreSettlementDay;
import cn.lili.modules.store.entity.vos.StoreBasicInfoVO;
@ -60,6 +61,15 @@ public interface StoreDetailMapper extends BaseMapper<StoreDetail> {
"from li_store_detail s where s.store_id=#{storeId}")
StoreAfterSaleAddressDTO getStoreAfterSaleAddressDTO(String storeId);
/**
* 获取店铺福禄配置DTO
*
* @param storeId 店铺ID
* @return 店铺店铺福禄配置DTO
*/
@Select("select s.app_secret_key,s.merchant_number,s.app_merchant_key from li_store_detail s where s.store_id =#{storeId}")
FuLuConfigureDTO getFuLuConfigureDTO(String storeId);
/**
* 获取待结算店铺列表
*

View File

@ -3,6 +3,7 @@ package cn.lili.modules.store.service;
import cn.hutool.core.date.DateTime;
import cn.lili.modules.store.entity.dos.Store;
import cn.lili.modules.store.entity.dos.StoreDetail;
import cn.lili.modules.store.entity.dto.FuLuConfigureDTO;
import cn.lili.modules.store.entity.dto.StoreAfterSaleAddressDTO;
import cn.lili.modules.store.entity.dto.StoreSettingDTO;
import cn.lili.modules.store.entity.dto.StoreSettlementDay;
@ -69,6 +70,13 @@ public interface StoreDetailService extends IService<StoreDetail> {
*/
StoreAfterSaleAddressDTO getStoreAfterSaleAddressDTO();
/**
* 获取当前登录店铺福禄配置
*
* @return 店铺福禄配置
*/
FuLuConfigureDTO getFuLuConfigureDTO();
/**
* 获取某一个店铺的退货收件地址信息
*
@ -86,6 +94,17 @@ public interface StoreDetailService extends IService<StoreDetail> {
boolean editStoreAfterSaleAddressDTO(StoreAfterSaleAddressDTO storeAfterSaleAddressDTO);
/**
<<<<<<< HEAD
* 修改当前登录店铺福禄配置
*
* @param fuLuConfigureDTO 店铺福禄配置DTO
* @return 店铺福禄配置
*/
boolean editFuLuConfigureDTO(FuLuConfigureDTO fuLuConfigureDTO);
/**
=======
>>>>>>> ae0c4aea12996d3d72eca7c6ccdc97922373e4d7
* 修改店铺库存预警数量
*
* @param stockWarning 库存预警数量

View File

@ -13,6 +13,7 @@ import cn.lili.modules.goods.service.GoodsService;
import cn.lili.modules.search.utils.EsIndexUtil;
import cn.lili.modules.store.entity.dos.Store;
import cn.lili.modules.store.entity.dos.StoreDetail;
import cn.lili.modules.store.entity.dto.FuLuConfigureDTO;
import cn.lili.modules.store.entity.dto.StoreAfterSaleAddressDTO;
import cn.lili.modules.store.entity.dto.StoreSettingDTO;
import cn.lili.modules.store.entity.dto.StoreSettlementDay;
@ -148,6 +149,12 @@ public class StoreDetailServiceImpl extends ServiceImpl<StoreDetailMapper, Store
return this.baseMapper.getStoreAfterSaleAddressDTO(storeId);
}
@Override
public FuLuConfigureDTO getFuLuConfigureDTO() {
String storeId = Objects.requireNonNull(UserContext.getCurrentUser()).getStoreId();
return this.baseMapper.getFuLuConfigureDTO(storeId);
}
@Override
public StoreAfterSaleAddressDTO getStoreAfterSaleAddressDTO(String id) {
StoreAfterSaleAddressDTO storeAfterSaleAddressDTO = this.baseMapper.getStoreAfterSaleAddressDTO(id);
@ -170,6 +177,17 @@ public class StoreDetailServiceImpl extends ServiceImpl<StoreDetailMapper, Store
return this.update(lambdaUpdateWrapper);
}
@Override
public boolean editFuLuConfigureDTO(FuLuConfigureDTO fuLuConfigureDTO) {
String storeId = Objects.requireNonNull(UserContext.getCurrentUser()).getStoreId();
LambdaUpdateWrapper<StoreDetail> lambdaUpdateWrapper = Wrappers.lambdaUpdate();
lambdaUpdateWrapper.set(StoreDetail::getAppSecretKey, fuLuConfigureDTO.getAppSecretKey());
lambdaUpdateWrapper.set(StoreDetail::getMerchantNumber, fuLuConfigureDTO.getMerchantNumber());
lambdaUpdateWrapper.set(StoreDetail::getAppMerchantKey, fuLuConfigureDTO.getAppMerchantKey());
lambdaUpdateWrapper.eq(StoreDetail::getStoreId, storeId);
return this.update(lambdaUpdateWrapper);
}
@Override
public boolean updateStockWarning(Integer stockWarning) {
String storeId = Objects.requireNonNull(UserContext.getCurrentUser()).getStoreId();

View File

@ -94,7 +94,7 @@ public class SliderImageUtil {
graphics.dispose();
//添加水印
ImageUtil.addWatermark(originalImage, watermark);
// ImageUtil.addWatermark(originalImage, watermark);
//新建流
ByteArrayOutputStream newImageOs = new ByteArrayOutputStream();
//利用ImageIO类提供的write方法将bi以png图片的数据模式写入流

View File

@ -52,7 +52,7 @@ public class VerificationSourceServiceImpl extends ServiceImpl<VerificationSourc
} catch (ClassCastException cce) {
verificationDTO = null;
}
if (verificationDTO == null) {
if (verificationDTO == null || verificationDTO.getVerificationResources().size() <= 0 || verificationDTO.getVerificationSlider().size() <= 0) {
return initCache();
}
return verificationDTO;

View File

@ -95,8 +95,8 @@ public class PageUtil {
QueryWrapper<T> queryWrapper = new QueryWrapper<>();
//创建时间区间判定
if (searchVo != null && StrUtil.isNotBlank(searchVo.getStartDate()) && StrUtil.isNotBlank(searchVo.getEndDate())) {
Date start = cn.hutool.core.date.DateUtil.parse(searchVo.getStartDate());
Date end = cn.hutool.core.date.DateUtil.parse(searchVo.getEndDate());
Date start = DateUtil.parse(searchVo.getStartDate());
Date end = DateUtil.parse(searchVo.getEndDate());
queryWrapper.between("create_time", start, DateUtil.endOfDay(end));
}
if (object != null) {

View File

@ -33,9 +33,9 @@ spring:
type: redis
# Redis
redis:
host: 127.0.0.1
host: 120.71.145.134
port: 6379
password: lilishop
password: ekLhvPGraSj8DGO0
lettuce:
pool:
# 连接池最大连接数(使用负值表示没有限制) 默认 8
@ -64,9 +64,9 @@ spring:
default-datasource:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/lilishop?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
username: root
password: lilishop
url: jdbc:mysql://120.71.183.195:3306/zyt_shop?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&allowPublicKeyRetrieval=true&verifyServerCertificate=false&useSSL=false
username: zyt_shop
password: Gb84505016@zytshop
maxActive: 20
initialSize: 5
maxWait: 60000
@ -139,8 +139,8 @@ ignored:
# Swagger界面内容配置
swagger:
title: lili API接口文档
description: lili Api Documentation
title: API接口文档
description: Api Documentation
version: 1.0.0
termsOfServiceUrl: https://pickmall.cn
contact:
@ -181,7 +181,7 @@ jasypt:
lili:
system:
isDemoSite: true
isDemoSite: false
# 脱敏级别:
# 0不做脱敏处理
# 1管理端用户手机号等信息脱敏
@ -198,17 +198,16 @@ lili:
sk: zhNKVrJK6UPOhqIjn8AQvG37b9sz6
#域名
domain:
pc: https://pc.b2b2c.pickmall.cn
wap: https://m.b2b2c.pickmall.cn
store: https://store.b2b2c.pickmall.cn
admin: https://admin.b2b2c.pickmall.cn
pc: https://zbuyer.sx1788.cn
wap: https://zshop.sx1788.cn
store: https://zseller.sx1788.cn
admin: https://zmanager.sx1788.cn
#api地址
api:
buyer: https://buyer-api.pickmall.cn
common: https://common-api.pickmall.cn
manager: https://admin-api.pickmall.cn
store: https://store-api.pickmall.cn
buyer: https://zshop-api.sx1788.cn/buyer-api
common: https://zshop-api.sx1788.cn/common-api
manager: https://zshop-api.sx1788.cn/manager-api
store: https://zshop-api.sx1788.cn/seller-api
# jwt 细节设定
jwt-setting:
# token过期时间分钟
@ -226,7 +225,7 @@ lili:
data:
elasticsearch:
cluster-name: elasticsearch
cluster-nodes: 127.0.0.1:9200
cluster-nodes: 106.124.130.167:9200
index:
number-of-replicas: 0
number-of-shards: 3
@ -236,7 +235,7 @@ lili:
# username: elastic
# password: LiLiShopES
logstash:
server: 127.0.0.1:4560
server: 106.124.130.167:4560
rocketmq:
promotion-topic: lili_promotion_topic
promotion-group: lili_promotion_group
@ -257,7 +256,7 @@ lili:
after-sale-topic: lili_after_sale_topic
after-sale-group: lili_after_sale_group
rocketmq:
name-server: 127.0.0.1:9876
name-server: 106.124.130.167:9876
producer:
group: lili_group
send-message-timeout: 30000

View File

@ -18,7 +18,7 @@
<properties>
<java.version>1.8</java.version>
<revision>4.2.4</revision>
<revision>4.3.0</revision>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<skipTests>true</skipTests>

View File

@ -1,12 +1,14 @@
package cn.lili.controller.goods;
import cn.lili.common.enums.ResultUtil;
import cn.lili.common.fulu.core.utils.Test;
import cn.lili.common.security.OperationalJudgment;
import cn.lili.common.security.context.UserContext;
import cn.lili.common.vo.ResultMessage;
import cn.lili.modules.goods.entity.dos.Goods;
import cn.lili.modules.goods.entity.dos.GoodsSku;
import cn.lili.modules.goods.entity.dto.GoodsOperationDTO;
import cn.lili.modules.goods.entity.dto.GoodsOperationFuLuDTO;
import cn.lili.modules.goods.entity.dto.GoodsSearchParams;
import cn.lili.modules.goods.entity.dto.GoodsSkuStockDTO;
import cn.lili.modules.goods.entity.enums.GoodsStatusEnum;
@ -16,6 +18,10 @@ import cn.lili.modules.goods.entity.vos.StockWarningVO;
import cn.lili.modules.goods.service.GoodsService;
import cn.lili.modules.goods.service.GoodsSkuService;
import cn.lili.modules.store.entity.dos.StoreDetail;
import cn.lili.modules.store.entity.dto.FuLuConfigureDTO;
import cn.lili.modules.store.service.StoreDetailService;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import cn.lili.modules.store.service.StoreDetailService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
@ -27,6 +33,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.*;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
@ -171,4 +178,107 @@ public class GoodsStoreController {
return ResultUtil.success();
}
@ApiOperation(value = "新增商品(minShengLotteryRecordService商品迁移")
@PostMapping(value = "/fuluCreate")
public ResultMessage<GoodsOperationDTO> fuluSave() throws Exception {
String storeId = Objects.requireNonNull(UserContext.getCurrentUser()).getStoreId();
GoodsOperationFuLuDTO goodsOperationDTO = new GoodsOperationFuLuDTO();
FuLuConfigureDTO fuLuConfigureDTO = storeDetailService.getFuLuConfigureDTO();
//获取并解析福禄商品数据
Map maps = (Map) JSON.parse(Test.getGoodsInfoList(fuLuConfigureDTO));
if (!maps.get("code").toString().equals("0")) {
return ResultUtil.error(201, "商品不存在或配置参数错误");
}
int i = 0;
List<Map<String, String>> listObjectSec = JSONArray.parseObject(maps.get("result").toString(), List.class);
for (Map<String, String> mapList : listObjectSec) {
if (listObjectSec.size() <= 0) {
break;
}
for (Map.Entry entry : mapList.entrySet()) {
if (entry.getKey().equals("product_id")) {
Map map1 = (Map) JSON.parse(Test.productInfoGetTest(fuLuConfigureDTO, entry.getValue().toString()).get("result").toString());
if (map1.get("product_type").toString().equals("直充")) {
goodsOperationDTO.setCategoryPath("1496301573515636737");//分类path
} else if (map1.get("product_type").toString().equals("卡密")) {
goodsOperationDTO.setCategoryPath("1496301573515636737");//分类path
} else {
//不是直充也不是卡密需要修改代码
continue;
}
List<Goods> goodsList = goodsService.list(
new LambdaQueryWrapper<Goods>()
.eq(Goods::getStoreId, storeId)
.eq(Goods::getSn, map1.get("product_id").toString())
.eq(Goods::getDeleteFlag, false)
);
goodsOperationDTO.setStoreCategoryPath("");//店铺分类id
goodsOperationDTO.setBrandId("1496301301183672321");//品牌ID
goodsOperationDTO.setGoodsName(map1.get("product_name").toString());//商品名称
goodsOperationDTO.setSn(map1.get("product_id").toString());//商品编号
goodsOperationDTO.setPrice(Double.valueOf(map1.get("purchase_price").toString()));//商品价格
goodsOperationDTO.setCost(Double.valueOf(map1.get("purchase_price").toString()));//市场价格
goodsOperationDTO.setWeight(Double.valueOf("0"));//重量
goodsOperationDTO.setIntro(map1.get("product_name").toString());//详情
goodsOperationDTO.setMobileIntro(map1.get("product_name").toString());//移动端详情
goodsOperationDTO.setQuantity(99999999);//库存
goodsOperationDTO.setRelease(true);//是否立即发布
goodsOperationDTO.setRecommend(true);//是否是推荐商品
goodsOperationDTO.setGoodsParamsDTOList(new ArrayList<>());//商品参数
List<String> goodsGalleryList = new ArrayList<>();
if (map1.containsKey("four_category_icon") && map1.get("four_category_icon") != null) {
goodsGalleryList.add(map1.get("four_category_icon").toString());
}
goodsOperationDTO.setGoodsGalleryList(goodsGalleryList);
goodsOperationDTO.setTemplateId("0");//运费模板id,不需要运费模板时值是0
goodsOperationDTO.setSellingPoint(map1.get("product_name").toString());
goodsOperationDTO.setSalesModel("RETAIL");//销售模式
// goodsOperationDTO.setHaveSpec();//是否有规格
goodsOperationDTO.setGoodsUnit("");//销售模式1471044596808024065
goodsOperationDTO.setInfo(map1.get("product_name").toString());//商品描述
goodsOperationDTO.setGoodsType("VIRTUAL_GOODS");//商品类型
// goodsOperationDTO.setGoodsVideo();//商品视频
List<Map<String, Object>> mapArrayList = new ArrayList<>();
Map<String, Object> map = new HashMap<>();
map.put("sn", goodsOperationDTO.getSn());
map.put("price", goodsOperationDTO.getPrice());
map.put("cost", goodsOperationDTO.getCost());
map.put("weight", goodsOperationDTO.getWeight());
map.put("quantity", goodsOperationDTO.getQuantity());
map.put("category_path", "1496301573515636737");
if (map1.containsKey("four_category_icon") && map1.get("four_category_icon") != null) {
List<Map<String, String>> images = new ArrayList<>();
Map<String, String> map2 = new HashMap<>();
map2.put("url", map1.get("four_category_icon").toString());
images.add(map2);
map.put("images", images);
}
mapArrayList.add(map);
goodsOperationDTO.setSkuList(mapArrayList);//sku列表
if (goodsList.size() > 0) {
goodsService.fuLuEditGoods(goodsOperationDTO, goodsList.get(0).getId());
} else {
goodsService.fuLuAddGoods(goodsOperationDTO);
}
i += 1;
break;
}
if (i == 1) {
break;
}
}
}
return ResultUtil.success();
}
}

View File

@ -0,0 +1,98 @@
package cn.lili.controller.other;
import cn.lili.common.aop.annotation.DemoSite;
import cn.lili.common.enums.ResultUtil;
import cn.lili.common.security.context.UserContext;
import cn.lili.common.vo.PageVO;
import cn.lili.common.vo.ResultMessage;
import cn.lili.modules.page.entity.dos.PageData;
import cn.lili.modules.page.entity.dto.PageDataDTO;
import cn.lili.modules.page.entity.enums.PageEnum;
import cn.lili.modules.page.entity.vos.PageDataListVO;
import cn.lili.modules.page.service.PageDataService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
/**
* 店铺端,页面设置管理接口
*
* @author paulGao
* @since 2020-05-06 15:18:56
*/
@RestController
@Api(tags = "店铺端,页面设置管理接口")
@RequestMapping("/store/other/pageData")
public class PageDataStoreController {
@Autowired
private PageDataService pageDataService;
@ApiOperation(value = "获取页面信息")
@ApiImplicitParam(name = "id", value = "页面ID", required = true, dataType = "String", paramType = "path")
@GetMapping(value = "/{id}")
public ResultMessage<PageData> getPageData(@PathVariable String id) {
//查询当前店铺下的页面数据
PageData pageData = pageDataService.getOne(
new LambdaQueryWrapper<PageData>()
.eq(PageData::getPageType, PageEnum.STORE.name())
.eq(PageData::getNum, UserContext.getCurrentUser().getStoreId())
.eq(PageData::getId, id));
return ResultUtil.data(pageData);
}
@ApiOperation(value = "添加页面")
@PostMapping("/add")
public ResultMessage<PageData> addPageData(@Valid PageData pageData) {
//添加店铺类型填写店铺ID
pageData.setPageType(PageEnum.STORE.name());
pageData.setNum(UserContext.getCurrentUser().getStoreId());
return ResultUtil.data(pageDataService.addPageData(pageData));
}
@ApiOperation(value = "修改页面")
@ApiImplicitParams({
@ApiImplicitParam(name = "id", value = "页面ID", required = true, dataType = "String", paramType = "path")
})
@DemoSite
@PutMapping("/update/{id}")
public ResultMessage<PageData> updatePageData(@Valid PageData pageData, @NotNull @PathVariable String id) {
pageData.setId(id);
//添加店铺类型填写店铺ID
pageData.setPageType(PageEnum.STORE.name());
pageData.setNum(UserContext.getCurrentUser().getStoreId());
return ResultUtil.data(pageDataService.updatePageData(pageData));
}
@ApiOperation(value = "页面列表")
@GetMapping("/pageDataList")
public ResultMessage<IPage<PageDataListVO>> pageDataList(PageVO pageVO, PageDataDTO pageDataDTO) {
pageDataDTO.setPageType(PageEnum.STORE.name());
pageDataDTO.setNum(UserContext.getCurrentUser().getStoreId());
return ResultUtil.data(pageDataService.getPageDataList(pageVO, pageDataDTO));
}
@ApiOperation(value = "发布页面")
@ApiImplicitParam(name = "id", value = "页面ID", required = true, dataType = "String", paramType = "path")
@PutMapping("/release/{id}")
@DemoSite
public ResultMessage<PageData> release(@PathVariable String id) {
return ResultUtil.data(pageDataService.releasePageData(id));
}
@ApiOperation(value = "删除页面")
@DemoSite
@ApiImplicitParam(name = "id", value = "页面ID", required = true, dataType = "String", paramType = "path")
@DeleteMapping("/remove/{id}")
public ResultMessage<Object> remove(@PathVariable String id) {
return ResultUtil.data(pageDataService.removePageData(id));
}
}

View File

@ -3,6 +3,7 @@ package cn.lili.controller.settings;
import cn.lili.common.enums.ResultUtil;
import cn.lili.common.vo.ResultMessage;
import cn.lili.modules.store.entity.dto.FuLuConfigureDTO;
import cn.lili.modules.store.entity.dto.StoreAfterSaleAddressDTO;
import cn.lili.modules.store.entity.dto.StoreSettingDTO;
import cn.lili.modules.store.entity.vos.StoreVO;
@ -87,4 +88,19 @@ public class StoreSettingsController {
boolean result = storeDetailService.editStoreAfterSaleAddressDTO(storeAfterSaleAddressDTO);
return ResultUtil.data(result);
}
@ApiOperation(value = "获取商家福禄配置")
@GetMapping("/fuLuConfigure")
public ResultMessage<FuLuConfigureDTO> getFuLuConfigure() {
//获取当前登录商家内容
return ResultUtil.data(storeDetailService.getFuLuConfigureDTO());
}
@ApiOperation(value = "修改商家福禄配置")
@PutMapping("/fuLuConfigure")
public ResultMessage<Object> editFuLuConfigure(@Valid FuLuConfigureDTO fuLuConfigureDTO) {
//修改商家退货收件地址
boolean result = storeDetailService.editFuLuConfigureDTO(fuLuConfigureDTO);
return ResultUtil.data(result);
}
}

View File

@ -33,9 +33,9 @@ spring:
type: redis
# Redis
redis:
host: 127.0.0.1
host: 120.71.145.134
port: 6379
password: lilishop
password: ekLhvPGraSj8DGO0
lettuce:
pool:
# 连接池最大连接数(使用负值表示没有限制) 默认 8
@ -64,9 +64,9 @@ spring:
default-datasource:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/lilishop?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
username: root
password: lilishop
url: jdbc:mysql://120.71.183.195:3306/zyt_shop?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&allowPublicKeyRetrieval=true&verifyServerCertificate=false&useSSL=false
username: zyt_shop
password: Gb84505016@zytshop
maxActive: 20
initialSize: 5
maxWait: 60000
@ -108,8 +108,7 @@ spring:
props:
#是否打印逻辑SQL语句和实际SQL语句建议调试时打印在生产环境关闭
sql:
show: false
show: true
# 忽略鉴权url
ignored:
urls:
@ -137,15 +136,14 @@ ignored:
# Swagger界面内容配置
swagger:
title: lili API接口文档
description: lili Api Documentation
title: API接口文档
description: Api Documentation
version: 1.0.0
termsOfServiceUrl: https://pickmall.cn
termsOfServiceUrl:
contact:
name: lili
url: https://pickmall.cn
email: admin@pickmall.com
name: rx
url:
email:
# Mybatis-plus
mybatis-plus:
mapper-locations: classpath*:mapper/*.xml
@ -179,7 +177,7 @@ jasypt:
lili:
system:
isDemoSite: true
isDemoSite: false
statistics:
# 在线人数统计 X 小时。这里设置48即统计过去48小时每小时在线人数
onlineMember: 48
@ -191,17 +189,16 @@ lili:
sk: zhNKVrJK6UPOhqIjn8AQvG37b9sz6
#域名
domain:
pc: https://pc.b2b2c.pickmall.cn
wap: https://m.b2b2c.pickmall.cn
store: https://store.b2b2c.pickmall.cn
admin: https://admin.b2b2c.pickmall.cn
pc: https://zbuyer.sx1788.cn
wap: https://zshop.sx1788.cn
store: https://zseller.sx1788.cn
admin: https://zmanager.sx1788.cn
#api地址
api:
buyer: https://buyer-api.pickmall.cn
common: https://common-api.pickmall.cn
manager: https://admin-api.pickmall.cn
store: https://store-api.pickmall.cn
buyer: https://zshop-api.sx1788.cn/buyer-api
common: https://zshop-api.sx1788.cn/common-api
manager: https://zshop-api.sx1788.cn/manager-api
store: https://zshop-api.sx1788.cn/seller-api
# jwt 细节设定
jwt-setting:
# token过期时间分钟
@ -219,7 +216,7 @@ lili:
data:
elasticsearch:
cluster-name: elasticsearch
cluster-nodes: 127.0.0.1:9200
cluster-nodes: 106.124.130.167:9200
index:
number-of-replicas: 0
number-of-shards: 3
@ -229,7 +226,7 @@ lili:
# username: elastic
# password: LiLiShopES
logstash:
server: 127.0.0.1:4560
server: 106.124.130.167:4560
rocketmq:
promotion-topic: lili_promotion_topic
promotion-group: lili_promotion_group
@ -250,7 +247,7 @@ lili:
after-sale-topic: lili_after_sale_topic
after-sale-group: lili_after_sale_group
rocketmq:
name-server: 127.0.0.1:9876
name-server: 106.124.130.167:9876
producer:
group: lili_group
send-message-timeout: 30000

View File

@ -0,0 +1,161 @@
/*
Navicat Premium Data Transfer
Source Server : 192.168.0.116
Source Server Type : MySQL
Source Server Version : 80023
Source Host : 192.168.0.116:3306
Source Schema : lilishop
Target Server Type : MySQL
Target Server Version : 80023
File Encoding : 65001
Date: 27/07/2021 17:04:46
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
/** 添加结算单积分、砍价结算价信息**/
ALTER TABLE li_bill ADD point_settlement_price double DEFAULT 0.00 COMMENT '积分商品结算金额 ';
ALTER TABLE li_bill ADD kanjia_settlement_price double DEFAULT 0.00 COMMENT '砍价商品结算金额';
ALTER TABLE li_store_flow ADD point_settlement_price double DEFAULT 0.00 COMMENT '积分商品结算金额';
ALTER TABLE li_store_flow ADD kanjia_settlement_price double DEFAULT 0.00 COMMENT '砍价商品结算金额';
ALTER TABLE li_order ADD order_promotion_type varchar(255) DEFAULT null COMMENT '订单促销类型';
/** 热词管理*/
UPDATE `lilishop`.`li_menu` SET `create_by` = 'admin', `create_time` = '2021-03-03 09:54:51', `delete_flag` = b'0', `update_by` = 'admin', `update_time` = '2021-07-23 19:07:45', `description` = 'null', `front_route` = 'page/article-manage/hotWords', `icon` = 'md-aperture', `level` = 2, `name` = 'hotKeyWord', `parent_id` = '1367050250249830400', `path` = 'hotKeyWord', `sort_order` = 0.00, `title` = '搜索热词', `front_component` = 'null' WHERE `id` = 1367050829697122304;
-- ----------------------------
-- Table structure for li_menu
-- ----------------------------
DROP TABLE IF EXISTS `li_menu`;
CREATE TABLE `li_menu` (
`id` bigint NOT NULL COMMENT 'ID',
`create_by` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`delete_flag` bit(1) DEFAULT NULL COMMENT '删除标志 true/false 删除/未删除',
`update_by` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`description` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '说明备注',
`front_route` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '前端路由',
`icon` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '图标',
`level` int DEFAULT NULL COMMENT '层级',
`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '菜单/权限名称',
`parent_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '父id',
`path` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '赋权API地址,正则表达式',
`sort_order` decimal(10,2) DEFAULT NULL COMMENT '排序值',
`title` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '菜单标题',
`front_component` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '文件地址',
`permission` varchar(255) DEFAULT NULL COMMENT '权限url',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of li_menu
-- ----------------------------
BEGIN;
INSERT INTO `li_menu` VALUES (1348810750596767744, 'admin', '2021-01-12 09:55:17', b'0', 'admin', '2021-01-15 09:42:50', 'null', '1', 'ios-american-football', 0, 'settings', '0', '1', 2.00, '设置', 'null', NULL);
INSERT INTO `li_menu` VALUES (1348810864748945408, 'admin', '2021-01-12 09:55:45', b'0', 'admin', '2021-03-15 20:57:12', 'null', 'null', 'ios-american-football', 0, 'log', '0', 'null', 3.00, '日志', 'null', NULL);
INSERT INTO `li_menu` VALUES (1349237129847005184, 'admin', '2021-01-13 14:09:34', b'0', 'admin', '2021-01-15 09:43:16', 'null', 'Main', 'ios-american-football', 1, 'sys', '1348810750596767744', '/sys', 1.00, '系统设置', 'null', NULL);
INSERT INTO `li_menu` VALUES (1349237207378714624, 'admin', '2021-01-13 14:09:53', b'0', 'admin', '2021-07-27 16:07:49', 'null', 'Main', 'ios-american-football', 1, 'member', '1348810750596767744', '/member', 0.00, '用户管理', 'null', '/manager/user*,/manager/department*,/manager/role*,/manager/menu*');
INSERT INTO `li_menu` VALUES (1349237928434098176, 'admin', '2021-01-13 14:13:03', b'0', 'admin', '2021-07-27 16:09:11', 'null', 'Main', 'ios-american-football', 1, 'log', '1348810864748945408', '/log', 1.00, '系统监控', 'null', '/manager/log*');
INSERT INTO `li_menu` VALUES (1349246048900243456, 'admin', '2021-01-13 14:45:00', b'0', 'admin', '2021-07-27 16:07:57', 'null', 'sys/setting-manage/settingManage', 'ios-american-football', 2, 'setting', '1349237129847005184', 'setting', 1.00, '系统设置', 'null', '/manager/system/setting/get*,/manager/system/setting/put*');
INSERT INTO `li_menu` VALUES (1349246347597602816, 'admin', '2021-01-13 14:46:12', b'0', 'admin', '2021-07-27 16:08:03', 'null', 'sys/oss-manage/ossManage', 'ios-american-football', 2, 'oss-manage', '1349237129847005184', 'oss-manage', 3.00, 'OSS资源', '', '/manager/file*');
INSERT INTO `li_menu` VALUES (1349246468775239680, 'admin', '2021-01-13 14:46:41', b'0', 'admin', '2021-07-27 16:08:14', 'null', 'region/index', 'ios-american-football', 2, 'region', '1349237129847005184', 'region', 4.00, '行政地区', 'null', '/manager/region*');
INSERT INTO `li_menu` VALUES (1349246671158796288, 'admin', '2021-01-13 14:47:29', b'0', 'admin', '2021-07-27 16:08:09', 'null', 'logistics/index', 'ios-american-football', 2, 'logistics', '1349237129847005184', 'logistics', 5.00, '物流公司', 'null', '/manager/logistics*');
INSERT INTO `li_menu` VALUES (1349246896661356544, 'admin', '2021-01-13 14:48:23', b'0', 'admin', '2021-07-27 16:08:23', 'null', 'sys/setting-manage/settingManage', 'ios-american-football', 2, 'authLogin', '1349237129847005184', 'authLogin', 6.00, '信任登录', 'null', '/manager/system/setting/get*,/manager/system/setting/put*');
INSERT INTO `li_menu` VALUES (1349247081504333824, 'admin', '2021-01-13 14:49:07', b'0', 'admin', '2021-07-27 16:08:45', 'null', 'sys/setting-manage/settingManage', 'ios-american-football', 2, 'pay', '1349237129847005184', 'pay', 7.00, '支付设置', 'null', '/manager/system/setting/get*,/manager/system/setting/put*,/manager/system/setting*');
INSERT INTO `li_menu` VALUES (1349247640584085504, 'admin', '2021-01-13 14:51:20', b'0', 'admin', '2021-07-27 16:08:56', 'null', 'sensitiveWords/index', 'ios-american-football', 2, 'sensitiveWords', '1349237129847005184', 'sensitiveWords', 8.00, '敏感词', 'null', '/manager/sensitiveWords*');
INSERT INTO `li_menu` VALUES (1349254815809298432, 'admin', '2021-01-13 15:19:51', b'0', 'admin', '2021-01-15 11:15:40', 'null', 'sys/user-manage/userManage', 'ios-american-football', 2, 'user-manage', '1349237207378714624', 'user-manage', 1.00, '用户管理', 'null', NULL);
INSERT INTO `li_menu` VALUES (1349255214977015808, 'admin', '2021-01-13 15:21:26', b'0', 'admin', '2021-01-15 11:16:21', 'null', 'sys/department-manage/departmentManage', 'ios-american-football', 2, 'department-manage', '1349237207378714624', 'department-manage', 3.00, '部门管理', 'null', NULL);
INSERT INTO `li_menu` VALUES (1349255404425338880, 'admin', '2021-01-13 15:22:11', b'0', 'admin', '2021-02-24 09:22:21', 'null', 'sys/role-manage/roleManage', 'ios-american-football', 2, 'role-manage', '1349237207378714624', 'role-manage', 4.00, '角色权限', 'null', NULL);
INSERT INTO `li_menu` VALUES (1349256082979840000, 'admin', '2021-01-13 15:24:53', b'0', 'admin', '2021-01-15 11:18:14', 'null', 'sys/log-manage/logManage', 'ios-american-football', 2, 'log-manage', '1349237928434098176', 'log-manage', 2.00, '日志管理', 'null', NULL);
INSERT INTO `li_menu` VALUES (1357584224760102912, 'admin', '2021-02-05 06:57:57', b'0', 'admin', '2021-07-27 16:09:02', 'null', 'sys/app-version/appVersion', 'ios-american-football', 2, 'appVersion', '1349237129847005184', 'appVersion', 9.00, 'APP版本', 'null', '/manager/systems/app*');
INSERT INTO `li_menu` VALUES (1357873097859923969, 'admin', '2021-02-24 09:53:02', b'0', 'admin', '2021-02-24 09:53:12', NULL, 'sys/menu-manage/menuManage', 'ios-american-football', 2, 'menuManage', '1349237207378714624', 'menu-manage', 2.00, '菜单管理', NULL, NULL);
INSERT INTO `li_menu` VALUES (1367038467288072192, 'admin', '2021-03-03 09:05:44', b'0', 'admin', '2021-03-03 09:09:27', 'null', 'null', 'ios-person-add', 0, 'member', '0', 'null', 0.00, '会员', 'null', NULL);
INSERT INTO `li_menu` VALUES (1367039534616805376, 'admin', '2021-03-03 09:09:58', b'0', 'admin', '2021-05-18 10:51:12', 'null', 'null', 'md-reorder', 0, 'order', '0', 'null', 0.00, '订单', 'null', NULL);
INSERT INTO `li_menu` VALUES (1367039950368800768, 'admin', '2021-03-03 09:11:37', b'0', NULL, NULL, NULL, NULL, 'ios-share', 0, 'goods', '0', NULL, 0.20, '商品', NULL, NULL);
INSERT INTO `li_menu` VALUES (1367040067201138688, 'admin', '2021-03-03 09:12:05', b'0', NULL, NULL, NULL, NULL, 'ios-hammer', 0, 'promotion', '0', NULL, 0.30, '促销', NULL, NULL);
INSERT INTO `li_menu` VALUES (1367040599596728320, 'admin', '2021-03-03 09:14:12', b'0', 'admin', '2021-03-03 09:52:13', 'null', 'null', 'ios-color-palette', 0, 'operate', '0', 'null', 0.50, '运营', 'null', NULL);
INSERT INTO `li_menu` VALUES (1367040819248234496, 'admin', '2021-03-03 09:15:04', b'0', NULL, NULL, NULL, NULL, 'ios-stats', 0, 'statistics', '0', NULL, 0.70, '统计', NULL, NULL);
INSERT INTO `li_menu` VALUES (1367041332861730816, 'admin', '2021-03-03 09:17:07', b'0', NULL, NULL, NULL, 'Main', 'ios-aperture', 1, '/', '1367038467288072192', '/', 0.00, '会员管理', NULL, NULL);
INSERT INTO `li_menu` VALUES (1367041461194850304, 'admin', '2021-03-03 09:17:37', b'0', 'admin', '2021-07-27 16:02:17', NULL, 'member/list/index', 'ios-aperture', 2, 'memberList', '1367041332861730816', 'memberList', 0.00, '会员列表', NULL, '/manager/member*,/manager/orders*,/manager/wallet/log*,/manager/receipt*');
INSERT INTO `li_menu` VALUES (1367041575619657728, 'admin', '2021-03-03 09:18:05', b'0', 'admin', '2021-07-27 15:59:50', NULL, 'member/list/memberRecycle', 'ios-aperture', 2, 'memberRecycle', '1367041332861730816', 'memberRecycle', 1.00, '回收站', NULL, '/manager/member*');
INSERT INTO `li_menu` VALUES (1367042490443497472, 'admin', '2021-03-03 09:21:43', b'0', NULL, NULL, NULL, 'Main', 'ios-aperture', 1, '/', '1367038467288072192', '/', 1.00, '预存款', NULL, NULL);
INSERT INTO `li_menu` VALUES (1367042664410644480, 'admin', '2021-03-03 09:22:24', b'0', 'admin', '2021-07-27 16:02:44', 'null', 'member/advance/walletLog', 'ios-aperture', 2, 'walletLog', '1367042490443497472', 'walletLog', 0.00, '会员资金', 'null', '/manager/wallet/log*');
INSERT INTO `li_menu` VALUES (1367042804944994304, 'admin', '2021-03-03 09:22:58', b'0', 'admin', '2021-07-27 16:02:48', NULL, 'member/advance/recharge', 'ios-alert', 2, 'recharge', '1367042490443497472', 'recharge', 1.00, '充值记录', NULL, '/manager/recharge*');
INSERT INTO `li_menu` VALUES (1367042804944994305, 'admin', '2021-03-03 09:22:58', b'0', 'admin', '2021-07-27 16:02:52', NULL, 'member/advance/withdrawApply', 'ios-alert', 2, 'withdrawApply', '1367042490443497472', 'withdrawApply', 1.00, '提现申请', NULL, '/manager/members/withdraw-apply*');
INSERT INTO `li_menu` VALUES (1367042917113266176, 'admin', '2021-03-03 09:23:25', b'0', NULL, NULL, NULL, 'Main', 'ios-aperture', 1, 'commont', '1367038467288072192', '/', 0.00, '评价', NULL, NULL);
INSERT INTO `li_menu` VALUES (1367043020976816128, 'admin', '2021-03-03 09:23:49', b'0', 'admin', '2021-07-27 16:02:35', NULL, 'goods/goods-review/index', 'md-aperture', 2, 'goodsReview', '1367042917113266176', 'goodsReview', 0.00, '会员评价', NULL, '/manager/memberEvaluation*');
INSERT INTO `li_menu` VALUES (1367043443917848576, 'admin', '2021-03-03 09:25:30', b'0', 'admin', '2021-07-27 16:03:00', NULL, 'Main', 'md-aperture', 1, 'order', '1367039534616805376', '/', 0.00, '订单', NULL, '/manager/orders*');
INSERT INTO `li_menu` VALUES (1367043505771249664, 'admin', '2021-03-03 09:25:45', b'0', NULL, NULL, NULL, 'Main', 'md-aperture', 1, 'aftersale', '1367039534616805376', '/', 0.00, '售后', NULL, NULL);
INSERT INTO `li_menu` VALUES (1367043642379730944, 'admin', '2021-03-03 09:26:17', b'0', NULL, NULL, NULL, 'order/order/orderList', 'ios-aperture', 2, 'orderList', '1367043443917848576', 'orderList', 0.00, '商品订单', NULL, NULL);
INSERT INTO `li_menu` VALUES (1367043791105556480, 'admin', '2021-03-03 09:26:53', b'0', NULL, NULL, NULL, 'order/order/fictitiousOrderList', 'ios-aperture', 2, 'fictitiousOrderList', '1367043443917848576', 'fictitiousOrderList', 1.00, '虚拟订单', NULL, NULL);
INSERT INTO `li_menu` VALUES (1367043980407078912, 'admin', '2021-03-03 09:27:38', b'0', 'admin', '2021-07-27 16:03:43', NULL, 'order/after-order/afterSaleOrder', 'md-alert', 2, 'afterSaleOrder', '1367043505771249664', 'afterSaleOrder', 0.00, '售后管理', NULL, '/manager/afterSale*');
INSERT INTO `li_menu` VALUES (1367044121163726848, 'admin', '2021-03-03 09:28:12', b'0', 'admin', '2021-07-27 16:03:48', NULL, 'order/after-order/orderComplaint', 'md-alert', 2, 'orderComplaint', '1367043505771249664', 'orderComplaint', 2.00, '交易投诉', NULL, '/manager/complain*');
INSERT INTO `li_menu` VALUES (1367044247978508288, 'admin', '2021-03-03 09:28:42', b'0', 'admin', '2021-07-27 16:03:52', NULL, 'order/after-order/afterSale', 'md-aperture', 2, 'afterSaleReason', '1367043505771249664', 'afterSaleReason', 3.00, '售后原因', NULL, '/manager/afterSaleReason*');
INSERT INTO `li_menu` VALUES (1367044376391319552, 'admin', '2021-03-03 09:29:12', b'0', 'admin', '2021-07-27 16:04:08', NULL, 'Main', 'md-aperture', 1, 'goodsManager', '1367039950368800768', '/', 0.00, '商品管理', NULL, '/manager/goods*');
INSERT INTO `li_menu` VALUES (1367044657296441344, 'admin', '2021-03-03 09:30:19', b'0', NULL, NULL, NULL, 'Main', 'ios-aperture', 1, 'association', '1367039950368800768', '/', 1.00, '关联管理', NULL, NULL);
INSERT INTO `li_menu` VALUES (1367045529720061952, 'admin', '2021-03-03 09:33:47', b'0', 'admin', '2021-07-27 15:38:46', NULL, 'goods/goods-info/goods', 'md-aperture', 2, 'managerGoods', '1367044376391319552', 'managerGoods', 0.00, '平台商品', NULL, 'null');
INSERT INTO `li_menu` VALUES (1367045630710513664, 'admin', '2021-03-03 09:34:11', b'0', 'admin', '2021-07-27 15:38:56', NULL, 'goods/goods-info/goodsApply', 'ios-alert', 2, 'applyGoods', '1367044376391319552', 'applyGoods', 1.00, '商品审核', NULL, 'null');
INSERT INTO `li_menu` VALUES (1367045794284175360, 'admin', '2021-03-03 09:34:50', b'0', 'admin', '2021-07-27 16:04:18', NULL, 'goods/goods-manage/category', 'md-alert', 2, 'goodsCategory', '1367044657296441344', 'goodsCategory', 0.00, '商品分类', NULL, '/manager/goods/category*,/manager/goods/brand*,/manager/goods/spec*,/manager/goods/parameters*');
INSERT INTO `li_menu` VALUES (1367045921434501120, 'admin', '2021-03-03 09:35:21', b'0', 'admin', '2021-07-27 16:04:23', NULL, 'goods/goods-manage/brand', 'md-alert', 2, 'goodsBrand', '1367044657296441344', 'goodsBrand', 1.00, '品牌列表', NULL, '/manager/goods/brand*');
INSERT INTO `li_menu` VALUES (1367046068369358848, 'admin', '2021-03-03 09:35:56', b'0', 'admin', '2021-07-27 16:04:27', NULL, 'goods/goods-manage/spec', 'md-aperture', 2, 'goodsSpec', '1367044657296441344', 'goodsSpec', 2.00, '规格列表', NULL, '/manager/goods/spec*');
INSERT INTO `li_menu` VALUES (1367046266214678528, 'admin', '2021-03-03 09:36:43', b'0', 'admin', '2021-07-27 16:04:32', NULL, 'goods-unit/index', 'md-alert', 2, 'goodsUnit', '1367044657296441344', 'goodsUnit', 4.00, '计量单位', NULL, '/manager/goods/goodsUnit*');
INSERT INTO `li_menu` VALUES (1367048084701315072, 'admin', '2021-03-03 09:43:57', b'0', 'admin', '2021-03-03 09:52:17', 'null', 'null', 'ios-pricetags', 0, 'shop', '0', 'null', 0.40, '店铺', 'null', NULL);
INSERT INTO `li_menu` VALUES (1367048684339986432, 'admin', '2021-03-03 09:46:20', b'0', NULL, NULL, NULL, 'Main', 'md-aperture', 1, 'shopManager', '1367048084701315072', '/', 0.00, '店铺管理', NULL, NULL);
INSERT INTO `li_menu` VALUES (1367048754229673984, 'admin', '2021-03-03 09:46:36', b'0', NULL, NULL, NULL, 'Main', 'md-aperture', 1, 'bill', '1367048084701315072', '/', 0.00, ' 店铺结算', NULL, NULL);
INSERT INTO `li_menu` VALUES (1367048832210173952, 'admin', '2021-03-03 09:46:55', b'0', 'admin', '2021-07-27 16:05:30', NULL, 'seller/shop/shopList', 'md-aperture', 2, 'shopList', '1367048684339986432', 'shopList', 0.00, '店铺列表', NULL, '/manager/store*');
INSERT INTO `li_menu` VALUES (1367048967635861504, 'admin', '2021-03-03 09:47:27', b'0', 'admin', '2021-07-27 16:05:32', NULL, 'seller/shop/shopAuditList', 'md-alert', 2, 'shopAuth', '1367048684339986432', 'shopAuth', 1.00, '店铺审核', NULL, '/manager/store*');
INSERT INTO `li_menu` VALUES (1367049068122996736, 'admin', '2021-03-03 09:47:51', b'0', 'admin', '2021-07-27 16:05:36', NULL, 'seller/bill/bill', 'md-alert', 2, 'billList', '1367048754229673984', 'billList', 0.00, '店铺结算', NULL, '/manager/store/bill*');
INSERT INTO `li_menu` VALUES (1367049214198022144, 'admin', '2021-03-03 09:48:26', b'0', NULL, NULL, NULL, 'Main', 'md-aperture', 1, 'promotionManager', '1367040067201138688', '/', 0.00, '促销管理', NULL, NULL);
INSERT INTO `li_menu` VALUES (1367049384792948736, 'admin', '2021-03-03 09:49:07', b'0', 'admin', '2021-07-27 16:04:42', NULL, 'promotion/coupon/coupon', 'md-alert', 2, 'coupon', '1367049214198022144', 'coupon', 0.00, '优惠券', NULL, '/manager/promotion/coupon*');
INSERT INTO `li_menu` VALUES (1367049500782231552, 'admin', '2021-03-03 09:49:34', b'0', 'admin', '2021-07-27 16:04:53', 'null', 'promotion/fullCut/full-cut', 'md-alert', 2, 'fullCut', '1367049214198022144', 'fullCut', 1.00, '满额活动', 'null', '/manager/promotion/fullDiscount*');
INSERT INTO `li_menu` VALUES (1367049611578966016, 'admin', '2021-03-03 09:50:01', b'0', 'admin', '2021-07-27 16:04:58', 'null', 'promotion/seckill/seckill', 'md-alert', 2, 'seckill', '1367049214198022144', 'seckill', 2.00, '秒杀活动', 'null', '/manager/promotion/seckill*');
INSERT INTO `li_menu` VALUES (1367049712657498112, 'admin', '2021-03-03 09:50:25', b'0', 'admin', '2021-07-27 16:05:02', 'null', 'promotion/pintuan/pintuan', 'md-alert', 2, 'pintuan', '1367049214198022144', 'pintuan', 3.00, '拼团活动', 'null', '/manager/promotion/pintuan*');
INSERT INTO `li_menu` VALUES (1367050250249830400, 'admin', '2021-03-03 09:52:33', b'0', 'admin', '2021-03-22 20:38:14', 'null', 'Main', 'md-aperture', 1, 'document', '1367040599596728320', '/', 2.00, '文章管理', 'null', NULL);
INSERT INTO `li_menu` VALUES (1367050320584114176, 'admin', '2021-03-03 09:52:50', b'0', 'admin', '2021-07-27 16:05:49', NULL, 'Main', 'md-aperture', 1, 'floor', '1367040599596728320', '/', 0.00, '楼层装修', NULL, '/manager/pageData*,/manager/file*,/manager/article-category*,/manager/article*,/manager/promotion*,/manager/goods*,/manager/store*');
INSERT INTO `li_menu` VALUES (1367050530030878720, 'admin', '2021-03-03 09:53:40', b'0', 'admin', '2021-03-04 01:05:57', 'null', 'lili-floor-renovation/floorList', 'md-alert', 2, 'pcFloor', '1367050320584114176', 'pcFloor', 0.00, 'PC端', 'null', NULL);
INSERT INTO `li_menu` VALUES (1367050673312497664, 'admin', '2021-03-03 09:54:14', b'0', 'admin', '2021-03-04 01:06:04', 'null', 'lili-floor-renovation/wap/wapList', 'md-aperture', 2, 'wapList', '1367050320584114176', 'wapList', 1.00, '移动端', 'null', NULL);
INSERT INTO `li_menu` VALUES (1367050829697122304, 'admin', '2021-03-03 09:54:51', b'0', 'admin', '2021-07-27 16:06:32', 'null', 'page/article-manage/hotWords', 'md-aperture', 2, 'hotKeyWord', '1367050250249830400', 'hotKeyWord', 0.00, '搜索热词', 'null', '/manager/hotwords*');
INSERT INTO `li_menu` VALUES (1367050939084570624, 'admin', '2021-03-03 09:55:17', b'0', 'admin', '2021-07-27 16:06:38', NULL, 'page/article-manage/ArticleCategory', 'md-aperture', 2, 'article-category', '1367050250249830400', 'article-category', 1.00, '文章分类', NULL, '/manager/article-category*');
INSERT INTO `li_menu` VALUES (1367051048232943616, 'admin', '2021-03-03 09:55:43', b'0', 'admin', '2021-07-27 16:06:42', NULL, 'page/article-manage/articleList', 'md-alert', 2, 'articleList', '1367050250249830400', 'articleList', 3.00, '文章管理', NULL, '/manager/article-category*,/manager/article*');
INSERT INTO `li_menu` VALUES (1367052616634204160, 'admin', '2021-03-03 10:01:57', b'0', 'admin', '2021-07-27 16:07:38', NULL, 'Main', 'md-aperture', 1, 'statistics', '1367040819248234496', '/', 0.00, '统计', NULL, '/manager/store*,/manager/member*');
INSERT INTO `li_menu` VALUES (1367052705725415424, 'admin', '2021-03-03 10:02:18', b'0', 'admin', '2021-03-11 22:11:05', 'null', 'statistics/member', 'md-alert', 2, 'memberStatistics', '1367052616634204160', 'memberStatistics', 0.00, '会员统计', 'null', NULL);
INSERT INTO `li_menu` VALUES (1367052805503713280, 'admin', '2021-03-03 10:02:42', b'0', 'admin', '2021-03-11 22:11:14', 'null', 'statistics/order', 'md-alert', 2, 'orderStatistics', '1367052616634204160', 'orderStatistics', 1.00, '订单统计', 'null', NULL);
INSERT INTO `li_menu` VALUES (1367052915314786304, 'admin', '2021-03-03 10:03:08', b'0', 'admin', '2021-03-11 22:11:23', 'null', 'statistics/goods', 'md-alert', 2, 'goodsStatistics', '1367052616634204160', 'goodsStatistics', 2.00, '商品统计', 'null', NULL);
INSERT INTO `li_menu` VALUES (1367053087121866752, 'admin', '2021-03-03 10:03:49', b'0', 'admin', '2021-03-11 22:11:34', 'null', 'statistics/traffic', 'md-alert', 2, 'trafficStatistics', '1367052616634204160', 'trafficStatistics', 4.00, '流量统计', 'null', NULL);
INSERT INTO `li_menu` VALUES (1372807928452481024, 'admin', '2021-03-19 02:11:30', b'0', NULL, NULL, NULL, 'Main', 'ios-aperture', 1, 'flow', '1367039534616805376', '/', 3.00, '流水', NULL, NULL);
INSERT INTO `li_menu` VALUES (1372808148565360640, 'admin', '2021-03-19 02:12:23', b'0', 'admin', '2021-07-27 16:03:57', NULL, 'order/flow/paymentLog', 'md-alert', 2, 'paymentLog', '1372807928452481024', 'paymentLog', 1.00, '收款记录', NULL, '/manager/paymentLog*');
INSERT INTO `li_menu` VALUES (1372808352295288832, 'admin', '2021-03-19 02:13:11', b'0', 'admin', '2021-07-27 16:04:01', NULL, 'order/flow/refundLog', 'ios-aperture', 2, 'refundLog', '1372807928452481024', 'refundLog', 2.00, '退款流水', NULL, '/manager/refundLog*');
INSERT INTO `li_menu` VALUES (1373166892465782784, 'admin', '2021-03-20 01:57:54', b'0', 'admin', '2021-03-22 20:13:48', 'null', 'Main', 'ios-aperture', 1, '/', '1367038467288072192', '/', 0.00, '积分', 'null', NULL);
INSERT INTO `li_menu` VALUES (1373167227385151488, 'admin', '2021-03-20 01:59:14', b'0', 'admin', '2021-07-27 16:02:40', 'null', 'member/point/point', 'ios-aperture', 2, 'point', '1373166892465782784', 'point', 0.00, '积分历史', 'null', '/manager/member/memberPointsHistory*');
INSERT INTO `li_menu` VALUES (1373791578371391488, 'admin', '2021-03-21 19:20:11', b'0', 'admin', '2021-07-27 16:05:38', NULL, 'seller/bill/accountStatementBill', 'md-alert', 2, 'accountStatementBill', '1367048754229673984', 'accountStatementBill', 0.00, '商家对账', NULL, '/manager/store/bill*');
INSERT INTO `li_menu` VALUES (1374154349697040384, 'admin', '2021-03-22 19:21:42', b'0', 'admin', '2021-07-27 16:06:55', 'null', 'Main', 'md-aperture', 1, 'feedback', '1367040599596728320', '/', 3.00, '意见反馈', 'null', '/manager/feedback*');
INSERT INTO `li_menu` VALUES (1374155741123837952, 'admin', '2021-03-22 19:27:14', b'0', 'admin', '2021-07-27 15:41:40', 'null', 'page/feedback/feedback', 'md-aperture', 2, 'feedback', '1374154349697040384', 'feedback', 0.00, '意见反馈', 'null', 'null');
INSERT INTO `li_menu` VALUES (1374173575405109248, 'admin', '2021-03-22 20:38:06', b'0', 'admin', '2021-03-22 20:52:58', 'null', 'Main', 'ios-analytics', 1, 'distributionManager', '1367040599596728320', '/', 1.00, '分销管理', 'null', NULL);
INSERT INTO `li_menu` VALUES (1374177618072436736, 'admin', '2021-03-22 20:54:10', b'0', 'admin', '2021-07-27 16:05:58', 'null', 'distribution/distributionSetting', 'ios-basketball', 2, 'distributionSetting', '1374173575405109248', 'distributionSetting', 0.00, '分销设置', 'null', '/manager/system/setting/put/DISTRIBUTION_SETTING*,/manager/system/setting/get/DISTRIBUTION_SETTING*');
INSERT INTO `li_menu` VALUES (1374177789581721600, 'admin', '2021-03-22 20:54:51', b'0', 'admin', '2021-07-27 16:06:15', 'null', 'distribution/distributionGoods', 'ios-chatbubbles', 2, 'distributionGoods', '1374173575405109248', 'distributionGoods', 3.00, '分销商品', 'null', '/manager/distribution/goods*');
INSERT INTO `li_menu` VALUES (1374177910411231232, 'admin', '2021-03-22 20:55:19', b'0', 'admin', '2021-07-27 16:06:20', 'null', 'distribution/distributionOrder', 'ios-cloudy', 2, 'distributionOrder', '1374173575405109248', 'distributionOrder', 4.00, '分销订单', 'null', '/manager/distribution/order*,/manager/store*');
INSERT INTO `li_menu` VALUES (1374178079181635584, 'admin', '2021-03-22 20:56:00', b'0', 'admin', '2021-07-27 16:06:05', 'null', 'distribution/distributionApply', 'md-egg', 2, 'distributionApply', '1374173575405109248', 'distributionApply', 1.00, '分销申请', 'null', '/manager/distribution*');
INSERT INTO `li_menu` VALUES (1374178303975358464, 'admin', '2021-03-22 20:56:53', b'0', 'admin', '2021-07-27 16:06:08', 'null', 'distribution/distribution', 'md-person', 2, 'distribution', '1374173575405109248', 'distribution', 2.00, '分销员', 'null', '/manager/distribution*');
INSERT INTO `li_menu` VALUES (1374916594269945856, 'admin', '2021-03-24 21:50:35', b'0', 'admin', '2021-07-27 16:08:51', NULL, 'sys/slider/slider', 'ios-aperture', 2, 'slider', '1349237129847005184', 'slider', 7.00, '验证码', NULL, '/manager/verificationSource*');
INSERT INTO `li_menu` VALUES (1376450531517530112, 'admin', '2021-03-29 03:25:55', b'0', NULL, NULL, NULL, 'Main', 'md-basketball', 1, 'notice', '1367040599596728320', '/', 5.00, '站内信', NULL, NULL);
INSERT INTO `li_menu` VALUES (1376450662098796544, 'admin', '2021-03-29 03:26:26', b'0', 'admin', '2021-07-27 16:07:23', NULL, 'sys/message/noticeMessageTemplate', 'ios-american-football', 2, 'noticeMessageTemplate', '1376450531517530112', 'noticeMessageTemplate', 1.00, '站内信', NULL, '/manager/noticeMessage*,/manager/message*,/manager/store*,/manager/member*');
INSERT INTO `li_menu` VALUES (1376450766817984512, 'admin', '2021-03-29 03:26:51', b'0', 'admin', '2021-03-29 03:27:25', 'null', 'Main', 'md-checkmark', 1, 'sms', '1367040599596728320', '/', 6.00, '短信管理', 'null', NULL);
INSERT INTO `li_menu` VALUES (1376450876423536640, 'admin', '2021-03-29 03:27:17', b'0', 'admin', '2021-07-27 16:07:29', NULL, 'sys/message/sms', 'ios-timer', 2, 'sms', '1376450766817984512', 'sms', 1.00, '短信', NULL, '/manager/sms*,/manager/member*');
INSERT INTO `li_menu` VALUES (1384035281702748160, 'admin', '2021-04-19 14:45:00', b'0', 'admin', '2021-07-27 16:08:18', 'null', 'member/message-manage/weChatMessageManager', 'md-aperture', 2, 'message-manage', '1349237129847005184', 'message-manage', 5.00, '微信消息', 'null', '/manager/message/wechat*,/manager/message/wechatMPMessage*');
INSERT INTO `li_menu` VALUES (1403988156444962818, 'admin', '2021-06-13 16:10:36', b'0', 'admin', '2021-07-27 16:04:48', 'null', 'promotion/couponActivity/coupon', '', 2, 'coupon-activity', '1367049214198022144', 'coupon-activity', 0.00, '券活动', 'null', '/manager/promotion/couponActivity*');
INSERT INTO `li_menu` VALUES (1407601962899230721, 'admin', '2021-06-23 15:30:35', b'0', 'admin', '2021-07-27 16:05:08', NULL, 'Main', '', 1, 'liveManage', '1367040067201138688', '/', 2.00, '直播管理', NULL, '/manager/broadcast*');
INSERT INTO `li_menu` VALUES (1407602049759072258, 'admin', '2021-06-23 15:30:55', b'0', NULL, NULL, NULL, 'promotion/live/live', '', 2, 'live', '1407601962899230721', 'live', 1.00, '直播管理', NULL, NULL);
INSERT INTO `li_menu` VALUES (1407602441964244994, 'admin', '2021-06-23 15:32:29', b'0', NULL, NULL, NULL, 'Main', '', 1, 'pointManage', '1367040067201138688', '/', 3.00, '积分活动', NULL, NULL);
INSERT INTO `li_menu` VALUES (1407602516912263170, 'admin', '2021-06-23 15:32:47', b'0', 'admin', '2021-07-27 16:05:14', NULL, 'promotion/pointsGoods/pointsGoods', '', 2, 'pointsGoods', '1407602441964244994', 'pointsGoods', 1.00, '积分商品', NULL, '/manager/promotion/pointsGoods*,/manager/goods*');
INSERT INTO `li_menu` VALUES (1407602673334636546, 'admin', '2021-06-23 15:33:24', b'0', 'admin', '2021-07-27 16:05:18', NULL, 'promotion/pointsGoodsCategory/pointsGoodsCategory', '', 2, 'pointsGoodsCategory', '1407602441964244994', 'pointsGoodsCategory', 2.00, '积分分类', NULL, '/manager/promotion/pointsGoodsCategory*');
INSERT INTO `li_menu` VALUES (1410862675914764290, 'admin', '2021-07-02 15:27:29', b'0', 'admin', '2021-07-27 16:06:26', 'null', 'distribution/distributionCash', '', 2, 'distributionCash', '1374173575405109248', 'distributionCash', 5.00, '分销提现', 'null', '/manager/distribution/cash*');
INSERT INTO `li_menu` VALUES (1419926569920536578, 'admin', '2021-07-27 15:44:10', b'0', 'admin', '2021-07-27 16:07:10', NULL, 'customWords/index', NULL, 2, 'customWords', '1367050250249830400', 'customWords', 4.00, 'ES分词', NULL, '/manager/manager/custom-words*');
COMMIT;
SET FOREIGN_KEY_CHECKS = 1;
/** 新增会员获的总积分 **/
ALTER TABLE li_member ADD total_point bigint ( 20 ) DEFAULT 0 COMMENT '积分总数量';

View File

@ -1,3 +1,5 @@
<<<<<<< HEAD
=======
<p align="center" >
<img src="https://www.xuxueli.com/doc/static/xxl-job/images/xxl-logo.jpg" width="150">
<h3 align="center">XXL-JOB</h3>
@ -32,6 +34,7 @@
</p>
>>>>>>> ae0c4aea12996d3d72eca7c6ccdc97922373e4d7
## Introduction
XXL-JOB is a distributed task scheduling framework.
It's core design goal is to develop quickly and learn simple, lightweight, and easy to expand.

View File

@ -23,9 +23,15 @@ mybatis.mapper-locations=classpath:/mybatis-mapper/*Mapper.xml
#mybatis.type-aliases-package=com.xxl.job.admin.core.model
### xxl-job, datasource
<<<<<<< HEAD
spring.datasource.url=jdbc:mysql://120.71.183.195:3306/zyt_shop/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
spring.datasource.username=zyt_shop
spring.datasource.password=Gb84505016@zytshop
=======
spring.datasource.url=jdbc:mysql://192.168.0.106:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=lilishop
>>>>>>> ae0c4aea12996d3d72eca7c6ccdc97922373e4d7
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
### datasource-pool