Compare commits
No commits in common. "ww-多门店-数据同步" and "master" have entirely different histories.
ww-多门店-数据同
...
master
|
|
@ -0,0 +1,7 @@
|
||||||
|
### IDEA ###
|
||||||
|
.idea/*
|
||||||
|
*.iml
|
||||||
|
*/target/*
|
||||||
|
*/*.iml
|
||||||
|
/.gradle/
|
||||||
|
/application.pid
|
||||||
|
|
@ -0,0 +1,191 @@
|
||||||
|
Apache License
|
||||||
|
Version 2.0, January 2004
|
||||||
|
http://www.apache.org/licenses/
|
||||||
|
|
||||||
|
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||||
|
|
||||||
|
1. Definitions.
|
||||||
|
|
||||||
|
"License" shall mean the terms and conditions for use, reproduction, and
|
||||||
|
distribution as defined by Sections 1 through 9 of this document.
|
||||||
|
|
||||||
|
"Licensor" shall mean the copyright owner or entity authorized by the copyright
|
||||||
|
owner that is granting the License.
|
||||||
|
|
||||||
|
"Legal Entity" shall mean the union of the acting entity and all other entities
|
||||||
|
that control, are controlled by, or are under common control with that entity.
|
||||||
|
For the purposes of this definition, "control" means (i) the power, direct or
|
||||||
|
indirect, to cause the direction or management of such entity, whether by
|
||||||
|
contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||||
|
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||||
|
|
||||||
|
"You" (or "Your") shall mean an individual or Legal Entity exercising
|
||||||
|
permissions granted by this License.
|
||||||
|
|
||||||
|
"Source" form shall mean the preferred form for making modifications, including
|
||||||
|
but not limited to software source code, documentation source, and configuration
|
||||||
|
files.
|
||||||
|
|
||||||
|
"Object" form shall mean any form resulting from mechanical transformation or
|
||||||
|
translation of a Source form, including but not limited to compiled object code,
|
||||||
|
generated documentation, and conversions to other media types.
|
||||||
|
|
||||||
|
"Work" shall mean the work of authorship, whether in Source or Object form, made
|
||||||
|
available under the License, as indicated by a copyright notice that is included
|
||||||
|
in or attached to the work (an example is provided in the Appendix below).
|
||||||
|
|
||||||
|
"Derivative Works" shall mean any work, whether in Source or Object form, that
|
||||||
|
is based on (or derived from) the Work and for which the editorial revisions,
|
||||||
|
annotations, elaborations, or other modifications represent, as a whole, an
|
||||||
|
original work of authorship. For the purposes of this License, Derivative Works
|
||||||
|
shall not include works that remain separable from, or merely link (or bind by
|
||||||
|
name) to the interfaces of, the Work and Derivative Works thereof.
|
||||||
|
|
||||||
|
"Contribution" shall mean any work of authorship, including the original version
|
||||||
|
of the Work and any modifications or additions to that Work or Derivative Works
|
||||||
|
thereof, that is intentionally submitted to Licensor for inclusion in the Work
|
||||||
|
by the copyright owner or by an individual or Legal Entity authorized to submit
|
||||||
|
on behalf of the copyright owner. For the purposes of this definition,
|
||||||
|
"submitted" means any form of electronic, verbal, or written communication sent
|
||||||
|
to the Licensor or its representatives, including but not limited to
|
||||||
|
communication on electronic mailing lists, source code control systems, and
|
||||||
|
issue tracking systems that are managed by, or on behalf of, the Licensor for
|
||||||
|
the purpose of discussing and improving the Work, but excluding communication
|
||||||
|
that is conspicuously marked or otherwise designated in writing by the copyright
|
||||||
|
owner as "Not a Contribution."
|
||||||
|
|
||||||
|
"Contributor" shall mean Licensor and any individual or Legal Entity on behalf
|
||||||
|
of whom a Contribution has been received by Licensor and subsequently
|
||||||
|
incorporated within the Work.
|
||||||
|
|
||||||
|
2. Grant of Copyright License.
|
||||||
|
|
||||||
|
Subject to the terms and conditions of this License, each Contributor hereby
|
||||||
|
grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
|
||||||
|
irrevocable copyright license to reproduce, prepare Derivative Works of,
|
||||||
|
publicly display, publicly perform, sublicense, and distribute the Work and such
|
||||||
|
Derivative Works in Source or Object form.
|
||||||
|
|
||||||
|
3. Grant of Patent License.
|
||||||
|
|
||||||
|
Subject to the terms and conditions of this License, each Contributor hereby
|
||||||
|
grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
|
||||||
|
irrevocable (except as stated in this section) patent license to make, have
|
||||||
|
made, use, offer to sell, sell, import, and otherwise transfer the Work, where
|
||||||
|
such license applies only to those patent claims licensable by such Contributor
|
||||||
|
that are necessarily infringed by their Contribution(s) alone or by combination
|
||||||
|
of their Contribution(s) with the Work to which such Contribution(s) was
|
||||||
|
submitted. If You institute patent litigation against any entity (including a
|
||||||
|
cross-claim or counterclaim in a lawsuit) alleging that the Work or a
|
||||||
|
Contribution incorporated within the Work constitutes direct or contributory
|
||||||
|
patent infringement, then any patent licenses granted to You under this License
|
||||||
|
for that Work shall terminate as of the date such litigation is filed.
|
||||||
|
|
||||||
|
4. Redistribution.
|
||||||
|
|
||||||
|
You may reproduce and distribute copies of the Work or Derivative Works thereof
|
||||||
|
in any medium, with or without modifications, and in Source or Object form,
|
||||||
|
provided that You meet the following conditions:
|
||||||
|
|
||||||
|
You must give any other recipients of the Work or Derivative Works a copy of
|
||||||
|
this License; and
|
||||||
|
You must cause any modified files to carry prominent notices stating that You
|
||||||
|
changed the files; and
|
||||||
|
You must retain, in the Source form of any Derivative Works that You distribute,
|
||||||
|
all copyright, patent, trademark, and attribution notices from the Source form
|
||||||
|
of the Work, excluding those notices that do not pertain to any part of the
|
||||||
|
Derivative Works; and
|
||||||
|
If the Work includes a "NOTICE" text file as part of its distribution, then any
|
||||||
|
Derivative Works that You distribute must include a readable copy of the
|
||||||
|
attribution notices contained within such NOTICE file, excluding those notices
|
||||||
|
that do not pertain to any part of the Derivative Works, in at least one of the
|
||||||
|
following places: within a NOTICE text file distributed as part of the
|
||||||
|
Derivative Works; within the Source form or documentation, if provided along
|
||||||
|
with the Derivative Works; or, within a display generated by the Derivative
|
||||||
|
Works, if and wherever such third-party notices normally appear. The contents of
|
||||||
|
the NOTICE file are for informational purposes only and do not modify the
|
||||||
|
License. You may add Your own attribution notices within Derivative Works that
|
||||||
|
You distribute, alongside or as an addendum to the NOTICE text from the Work,
|
||||||
|
provided that such additional attribution notices cannot be construed as
|
||||||
|
modifying the License.
|
||||||
|
You may add Your own copyright statement to Your modifications and may provide
|
||||||
|
additional or different license terms and conditions for use, reproduction, or
|
||||||
|
distribution of Your modifications, or for any such Derivative Works as a whole,
|
||||||
|
provided Your use, reproduction, and distribution of the Work otherwise complies
|
||||||
|
with the conditions stated in this License.
|
||||||
|
|
||||||
|
5. Submission of Contributions.
|
||||||
|
|
||||||
|
Unless You explicitly state otherwise, any Contribution intentionally submitted
|
||||||
|
for inclusion in the Work by You to the Licensor shall be under the terms and
|
||||||
|
conditions of this License, without any additional terms or conditions.
|
||||||
|
Notwithstanding the above, nothing herein shall supersede or modify the terms of
|
||||||
|
any separate license agreement you may have executed with Licensor regarding
|
||||||
|
such Contributions.
|
||||||
|
|
||||||
|
6. Trademarks.
|
||||||
|
|
||||||
|
This License does not grant permission to use the trade names, trademarks,
|
||||||
|
service marks, or product names of the Licensor, except as required for
|
||||||
|
reasonable and customary use in describing the origin of the Work and
|
||||||
|
reproducing the content of the NOTICE file.
|
||||||
|
|
||||||
|
7. Disclaimer of Warranty.
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, Licensor provides the
|
||||||
|
Work (and each Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied,
|
||||||
|
including, without limitation, any warranties or conditions of TITLE,
|
||||||
|
NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are
|
||||||
|
solely responsible for determining the appropriateness of using or
|
||||||
|
redistributing the Work and assume any risks associated with Your exercise of
|
||||||
|
permissions under this License.
|
||||||
|
|
||||||
|
8. Limitation of Liability.
|
||||||
|
|
||||||
|
In no event and under no legal theory, whether in tort (including negligence),
|
||||||
|
contract, or otherwise, unless required by applicable law (such as deliberate
|
||||||
|
and grossly negligent acts) or agreed to in writing, shall any Contributor be
|
||||||
|
liable to You for damages, including any direct, indirect, special, incidental,
|
||||||
|
or consequential damages of any character arising as a result of this License or
|
||||||
|
out of the use or inability to use the Work (including but not limited to
|
||||||
|
damages for loss of goodwill, work stoppage, computer failure or malfunction, or
|
||||||
|
any and all other commercial damages or losses), even if such Contributor has
|
||||||
|
been advised of the possibility of such damages.
|
||||||
|
|
||||||
|
9. Accepting Warranty or Additional Liability.
|
||||||
|
|
||||||
|
While redistributing the Work or Derivative Works thereof, You may choose to
|
||||||
|
offer, and charge a fee for, acceptance of support, warranty, indemnity, or
|
||||||
|
other liability obligations and/or rights consistent with this License. However,
|
||||||
|
in accepting such obligations, You may act only on Your own behalf and on Your
|
||||||
|
sole responsibility, not on behalf of any other Contributor, and only if You
|
||||||
|
agree to indemnify, defend, and hold each Contributor harmless for any liability
|
||||||
|
incurred by, or claims asserted against, such Contributor by reason of your
|
||||||
|
accepting any such warranty or additional liability.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
APPENDIX: How to apply the Apache License to your work
|
||||||
|
|
||||||
|
To apply the Apache License to your work, attach the following boilerplate
|
||||||
|
notice, with the fields enclosed by brackets "{}" replaced with your own
|
||||||
|
identifying information. (Don't include the brackets!) The text should be
|
||||||
|
enclosed in the appropriate comment syntax for the file format. We also
|
||||||
|
recommend that a file or class name and description of purpose be included on
|
||||||
|
the same "printed page" as the copyright notice for easier identification within
|
||||||
|
third-party archives.
|
||||||
|
|
||||||
|
Copyright 2019-2020 Zheng Jie
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
|
@ -0,0 +1,36 @@
|
||||||
|
# cashierAdmin
|
||||||
|
|
||||||
|
#### Description
|
||||||
|
{**When you're done, you can delete the content in this README and update the file with details for others getting started with your repository**}
|
||||||
|
|
||||||
|
#### Software Architecture
|
||||||
|
Software architecture description
|
||||||
|
|
||||||
|
#### Installation
|
||||||
|
|
||||||
|
1. xxxx
|
||||||
|
2. xxxx
|
||||||
|
3. xxxx
|
||||||
|
|
||||||
|
#### Instructions
|
||||||
|
|
||||||
|
1. xxxx
|
||||||
|
2. xxxx
|
||||||
|
3. xxxx
|
||||||
|
|
||||||
|
#### Contribution
|
||||||
|
|
||||||
|
1. Fork the repository
|
||||||
|
2. Create Feat_xxx branch
|
||||||
|
3. Commit your code
|
||||||
|
4. Create Pull Request
|
||||||
|
|
||||||
|
|
||||||
|
#### Gitee Feature
|
||||||
|
|
||||||
|
1. You can use Readme\_XXX.md to support different languages, such as Readme\_en.md, Readme\_zh.md
|
||||||
|
2. Gitee blog [blog.gitee.com](https://blog.gitee.com)
|
||||||
|
3. Explore open source project [https://gitee.com/explore](https://gitee.com/explore)
|
||||||
|
4. The most valuable open source project [GVP](https://gitee.com/gvp)
|
||||||
|
5. The manual of Gitee [https://gitee.com/help](https://gitee.com/help)
|
||||||
|
6. The most popular members [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.annotation;
|
package cn.ysk.cashier.annotation;
|
||||||
|
|
||||||
import java.lang.annotation.*;
|
import java.lang.annotation.*;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.annotation;
|
package cn.ysk.cashier.annotation;
|
||||||
|
|
||||||
import java.lang.annotation.ElementType;
|
import java.lang.annotation.ElementType;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.annotation;
|
package cn.ysk.cashier.annotation;
|
||||||
|
|
||||||
import cn.ysk.cashier.aspect.LimitType;
|
import cn.ysk.cashier.aspect.LimitType;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.annotation;
|
package cn.ysk.cashier.annotation;
|
||||||
|
|
||||||
import java.lang.annotation.ElementType;
|
import java.lang.annotation.ElementType;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.aspect;
|
package cn.ysk.cashier.aspect;
|
||||||
|
|
||||||
import cn.ysk.cashier.exception.BadRequestException;
|
import cn.ysk.cashier.exception.BadRequestException;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.aspect;
|
package cn.ysk.cashier.aspect;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.base;
|
package cn.ysk.cashier.base;
|
||||||
|
|
||||||
import io.swagger.annotations.ApiModelProperty;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.base;
|
package cn.ysk.cashier.base;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.config;
|
package cn.ysk.cashier.config;
|
||||||
|
|
||||||
import cn.ysk.cashier.utils.SecurityUtils;
|
import cn.ysk.cashier.utils.SecurityUtils;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.config;
|
package cn.ysk.cashier.config;
|
||||||
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.config;
|
package cn.ysk.cashier.config;
|
||||||
|
|
||||||
import cn.ysk.cashier.utils.SecurityUtils;
|
import cn.ysk.cashier.utils.SecurityUtils;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.config;
|
package cn.ysk.cashier.config;
|
||||||
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.config;
|
package cn.ysk.cashier.config;
|
||||||
|
|
||||||
import cn.hutool.core.lang.Assert;
|
import cn.hutool.core.lang.Assert;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.config;
|
package cn.ysk.cashier.config;
|
||||||
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.config;
|
package cn.ysk.cashier.config;
|
||||||
|
|
||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,20 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.exception;
|
package cn.ysk.cashier.exception;
|
||||||
|
|
||||||
import cn.hutool.core.util.StrUtil;
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import org.springframework.http.HttpStatus;
|
import org.springframework.http.HttpStatus;
|
||||||
import static org.springframework.http.HttpStatus.BAD_REQUEST;
|
import static org.springframework.http.HttpStatus.BAD_REQUEST;
|
||||||
|
|
@ -24,8 +37,4 @@ public class BadRequestException extends RuntimeException{
|
||||||
super(msg);
|
super(msg);
|
||||||
this.status = status.value();
|
this.status = status.value();
|
||||||
}
|
}
|
||||||
|
|
||||||
public BadRequestException(String template ,Object... args){
|
|
||||||
super(StrUtil.format(template, args));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.exception;
|
package cn.ysk.cashier.exception;
|
||||||
|
|
||||||
import org.springframework.util.StringUtils;
|
import org.springframework.util.StringUtils;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.exception;
|
package cn.ysk.cashier.exception;
|
||||||
|
|
||||||
import org.springframework.util.StringUtils;
|
import org.springframework.util.StringUtils;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.exception.handler;
|
package cn.ysk.cashier.exception.handler;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.exception.handler;
|
package cn.ysk.cashier.exception.handler;
|
||||||
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
@ -85,9 +99,9 @@ public class GlobalExceptionHandler {
|
||||||
log.error(ThrowableUtil.getStackTrace(e));
|
log.error(ThrowableUtil.getStackTrace(e));
|
||||||
ObjectError objectError = e.getBindingResult().getAllErrors().get(0);
|
ObjectError objectError = e.getBindingResult().getAllErrors().get(0);
|
||||||
String message = objectError.getDefaultMessage();
|
String message = objectError.getDefaultMessage();
|
||||||
// if (objectError instanceof FieldError) {
|
if (objectError instanceof FieldError) {
|
||||||
// message = ((FieldError) objectError).getField() + ": " + message;
|
message = ((FieldError) objectError).getField() + ": " + message;
|
||||||
// }
|
}
|
||||||
return buildResponseEntity(ApiError.error(message));
|
return buildResponseEntity(ApiError.error(message));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -74,8 +74,4 @@ public interface CacheKey {
|
||||||
*/
|
*/
|
||||||
String PRODUCT = "PRODUCT:";
|
String PRODUCT = "PRODUCT:";
|
||||||
String SONG_URL = "song:";
|
String SONG_URL = "song:";
|
||||||
|
|
||||||
String VIPCODE = "VIPCODE:";
|
|
||||||
|
|
||||||
String INVOICE_SD_TYPE = "invoice:sd_type:";
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.utils;
|
package cn.ysk.cashier.utils;
|
||||||
|
|
||||||
import java.io.Closeable;
|
import java.io.Closeable;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.utils;
|
package cn.ysk.cashier.utils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.utils;
|
package cn.ysk.cashier.utils;
|
||||||
|
|
||||||
import javax.crypto.Cipher;
|
import javax.crypto.Cipher;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.utils;
|
package cn.ysk.cashier.utils;
|
||||||
|
|
||||||
import cn.hutool.core.io.IoUtil;
|
import cn.hutool.core.io.IoUtil;
|
||||||
|
|
@ -9,11 +23,9 @@ import cn.hutool.poi.excel.ExcelUtil;
|
||||||
import cn.hutool.poi.excel.ExcelWriter;
|
import cn.hutool.poi.excel.ExcelWriter;
|
||||||
import cn.ysk.cashier.exception.BadRequestException;
|
import cn.ysk.cashier.exception.BadRequestException;
|
||||||
import org.apache.poi.ss.usermodel.*;
|
import org.apache.poi.ss.usermodel.*;
|
||||||
import org.apache.poi.ss.util.CellRangeAddress;
|
|
||||||
import org.apache.poi.util.IOUtils;
|
import org.apache.poi.util.IOUtils;
|
||||||
import org.apache.poi.xssf.streaming.SXSSFSheet;
|
import org.apache.poi.xssf.streaming.SXSSFSheet;
|
||||||
import org.apache.poi.xssf.usermodel.XSSFSheet;
|
import org.apache.poi.xssf.usermodel.XSSFSheet;
|
||||||
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
@ -25,8 +37,10 @@ import java.io.*;
|
||||||
import java.security.MessageDigest;
|
import java.security.MessageDigest;
|
||||||
import java.text.DecimalFormat;
|
import java.text.DecimalFormat;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.*;
|
import java.util.ArrayList;
|
||||||
import java.util.concurrent.ConcurrentLinkedQueue;
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* File工具类,扩展 hutool 工具包
|
* File工具类,扩展 hutool 工具包
|
||||||
|
|
@ -223,69 +237,6 @@ public class FileUtil extends cn.hutool.core.io.FileUtil {
|
||||||
IoUtil.close(out);
|
IoUtil.close(out);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void downloadAndMergeExcel(List<Map<String, Object>> list, List<List<Integer>> mergeData, List<String> keyList, HttpServletResponse response) throws IOException {
|
|
||||||
String tempPath = SYS_TEM_DIR + IdUtil.fastSimpleUUID() + ".xlsx";
|
|
||||||
|
|
||||||
// 创建工作簿
|
|
||||||
Workbook workbook = new XSSFWorkbook();
|
|
||||||
// 创建工作表
|
|
||||||
Sheet sheet = workbook.createSheet("Sheet1");
|
|
||||||
|
|
||||||
// 合并单元格,从第 0 行第 0 列到第 0 行第 2 列
|
|
||||||
// sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 2));
|
|
||||||
|
|
||||||
for (List<Integer> mergeDatum : mergeData) {
|
|
||||||
sheet.addMergedRegion(new CellRangeAddress(mergeDatum.get(0), mergeDatum.get(1), mergeDatum.get(2), mergeDatum.get(3)));
|
|
||||||
}
|
|
||||||
|
|
||||||
Row row0 = sheet.createRow(0);
|
|
||||||
for (int i = 0; i < keyList.size(); i++) {
|
|
||||||
Cell cell = row0.createCell(i);
|
|
||||||
cell.setCellValue(keyList.get(i));
|
|
||||||
}
|
|
||||||
for (int i = 0; i < list.size(); i++) {
|
|
||||||
Map<String, Object> map = list.get(i);
|
|
||||||
Row row = sheet.createRow(i + 1);
|
|
||||||
for (int j = 0; j < keyList.size(); j++) {
|
|
||||||
Cell cell = row.createCell(j);
|
|
||||||
String value = map.get(keyList.get(j)) == null ? "" : map.get(keyList.get(j)).toString();
|
|
||||||
cell.setCellValue(value);
|
|
||||||
|
|
||||||
if (j == 11 && !"0".equals(value)) {
|
|
||||||
cell.setCellValue("-" + value);
|
|
||||||
setCellBackground(cell, IndexedColors.YELLOW, workbook);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (j == 12 && !"0.00".equals(value)) {
|
|
||||||
cell.setCellValue("-" + value);
|
|
||||||
setCellBackground(cell, IndexedColors.YELLOW, workbook);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// response为HttpServletResponse对象
|
|
||||||
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
|
|
||||||
response.setHeader("Content-Disposition", "attachment;filename=file.xlsx");
|
|
||||||
|
|
||||||
try (FileOutputStream outputStream = new FileOutputStream(tempPath);
|
|
||||||
ServletOutputStream out = response.getOutputStream()) {
|
|
||||||
|
|
||||||
workbook.write(outputStream);
|
|
||||||
workbook.write(out);
|
|
||||||
} catch (IOException e) {
|
|
||||||
// 更详细的错误处理
|
|
||||||
e.printStackTrace();
|
|
||||||
// 可以考虑返回一个错误响应给客户端
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void setCellBackground(Cell cell, IndexedColors color, Workbook workbook) {
|
|
||||||
CellStyle style = workbook.createCellStyle();
|
|
||||||
style.setFillForegroundColor(color.getIndex());
|
|
||||||
style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
|
|
||||||
cell.setCellStyle(style);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 输入标题到excel
|
* 输入标题到excel
|
||||||
*
|
*
|
||||||
|
|
@ -319,7 +270,7 @@ public class FileUtil extends cn.hutool.core.io.FileUtil {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void downloadExcelAndMerge(ConcurrentLinkedQueue<Map<String, Object>> list, int colSize, HttpServletResponse response, List<Integer> mergeRowIndex) throws IOException {
|
public static void downloadExcelAndMerge(List<Map<String, Object>> list, int colSize, HttpServletResponse response, ArrayList<Integer> mergeRowIndex) throws IOException {
|
||||||
String tempPath = SYS_TEM_DIR + IdUtil.fastSimpleUUID() + ".xlsx";
|
String tempPath = SYS_TEM_DIR + IdUtil.fastSimpleUUID() + ".xlsx";
|
||||||
File file = new File(tempPath);
|
File file = new File(tempPath);
|
||||||
ExcelWriter writer = ExcelUtil.getWriter(file);
|
ExcelWriter writer = ExcelUtil.getWriter(file);
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,6 @@ import com.alibaba.fastjson.JSON;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import com.alibaba.fastjson.serializer.SerializeConfig;
|
import com.alibaba.fastjson.serializer.SerializeConfig;
|
||||||
import com.alibaba.fastjson.serializer.SerializerFeature;
|
import com.alibaba.fastjson.serializer.SerializerFeature;
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
@ -88,38 +87,6 @@ public class JSONUtil {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static <T> List<T> parseJSONStrTList(String jsonStr, Class<T> clazz) {
|
|
||||||
ObjectMapper objectMapper = new ObjectMapper();
|
|
||||||
try {
|
|
||||||
// 将JSON字符串转换为List<T>
|
|
||||||
return objectMapper.readValue(jsonStr, objectMapper.getTypeFactory().constructCollectionType(List.class, clazz));
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param list 某集合
|
|
||||||
* @param clazz 要转成的实体
|
|
||||||
* 需要在目标实体增加注解 忽略未知属性 @JsonIgnoreProperties(ignoreUnknown = true)
|
|
||||||
* @return
|
|
||||||
* @param <T>
|
|
||||||
*/
|
|
||||||
public static <T> List<T> parseListTNewList(List<?> list, Class<T> clazz) {
|
|
||||||
ObjectMapper objectMapper = new ObjectMapper(); // 创建JSON转换器
|
|
||||||
try {
|
|
||||||
// 将List<?>转换为JSON字符串
|
|
||||||
String json = objectMapper.writeValueAsString(list);
|
|
||||||
// 将JSON字符串转换为List<T>
|
|
||||||
return objectMapper.readValue(json, objectMapper.getTypeFactory().constructCollectionType(List.class, clazz));
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
String sss = "{\"bizData\":{\"amount\":1,\"currency\":\"cny\",\"ifCode\":\"sxfpay\",\"mchOrderNo\":\"CZ1715744291232\",\"mercNo\":\"B240510702030\",\"note\":\"等待用户付款\",\"payOrderId\":\"O1790587460614225921\",\"payType\":\"WECHAT\",\"settlementType\":\"D1\",\"state\":\"TRADE_AWAIT\",\"storeId\":\"S2405103298\",\"subject\":\"测试支付\",\"tradeFee\":0},\"code\":\"000000\",\"msg\":\"请求成功\",\"sign\":\"40710a3c293eeac3c7f4a1b0696a2bf6\",\"signType\":\"MD5\",\"timestamp\":\"20240515113813\"}";
|
String sss = "{\"bizData\":{\"amount\":1,\"currency\":\"cny\",\"ifCode\":\"sxfpay\",\"mchOrderNo\":\"CZ1715744291232\",\"mercNo\":\"B240510702030\",\"note\":\"等待用户付款\",\"payOrderId\":\"O1790587460614225921\",\"payType\":\"WECHAT\",\"settlementType\":\"D1\",\"state\":\"TRADE_AWAIT\",\"storeId\":\"S2405103298\",\"subject\":\"测试支付\",\"tradeFee\":0},\"code\":\"000000\",\"msg\":\"请求成功\",\"sign\":\"40710a3c293eeac3c7f4a1b0696a2bf6\",\"signType\":\"MD5\",\"timestamp\":\"20240515113813\"}";
|
||||||
// TypeReference<PublicResp<MainScanResp>> typeRef = new TypeReference<PublicResp<MainScanResp>>(){};
|
// TypeReference<PublicResp<MainScanResp>> typeRef = new TypeReference<PublicResp<MainScanResp>>(){};
|
||||||
|
|
|
||||||
|
|
@ -102,13 +102,10 @@ public class ListUtil {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static <T> String listToJsonString(List<T> list) {
|
public static<T> String listChangeString(List<T> listString){
|
||||||
ObjectMapper objectMapper = new ObjectMapper();
|
return listString.stream()
|
||||||
try {
|
.map(Object::toString)
|
||||||
return objectMapper.writeValueAsString(list);
|
.collect(Collectors.joining(", "));
|
||||||
} catch (JsonProcessingException e) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String mapToString(Map<String, String> map) {
|
public static String mapToString(Map<String, String> map) {
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.utils;
|
package cn.ysk.cashier.utils;
|
||||||
|
|
||||||
import org.apache.poi.ss.formula.functions.T;
|
import org.apache.poi.ss.formula.functions.T;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.utils;
|
package cn.ysk.cashier.utils;
|
||||||
|
|
||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.utils;
|
package cn.ysk.cashier.utils;
|
||||||
|
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
|
|
@ -243,15 +257,6 @@ public class RedisUtils {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean setNx(String key, Object value) {
|
|
||||||
try {
|
|
||||||
return redisTemplate.opsForValue().setIfAbsent(key, value);
|
|
||||||
} catch (Exception e) {
|
|
||||||
log.error(e.getMessage(), e);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 普通缓存放入并设置时间
|
* 普通缓存放入并设置时间
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.utils;
|
package cn.ysk.cashier.utils;
|
||||||
|
|
||||||
import org.springframework.web.context.request.RequestContextHolder;
|
import org.springframework.web.context.request.RequestContextHolder;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.utils;
|
package cn.ysk.cashier.utils;
|
||||||
|
|
||||||
import cn.hutool.json.JSONArray;
|
import cn.hutool.json.JSONArray;
|
||||||
|
|
@ -12,7 +26,6 @@ import org.springframework.security.core.Authentication;
|
||||||
import org.springframework.security.core.context.SecurityContextHolder;
|
import org.springframework.security.core.context.SecurityContextHolder;
|
||||||
import org.springframework.security.core.userdetails.UserDetails;
|
import org.springframework.security.core.userdetails.UserDetails;
|
||||||
import org.springframework.security.core.userdetails.UserDetailsService;
|
import org.springframework.security.core.userdetails.UserDetailsService;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -58,15 +71,6 @@ public class SecurityUtils {
|
||||||
return new JSONObject(new JSONObject(userDetails).get("user")).get("id", Long.class);
|
return new JSONObject(new JSONObject(userDetails).get("user")).get("id", Long.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取系统用户nickName
|
|
||||||
* @return 系统用户NickName
|
|
||||||
*/
|
|
||||||
public static String getCurrentUserNickName() {
|
|
||||||
UserDetails userDetails = getCurrentUser();
|
|
||||||
return new JSONObject(new JSONObject(userDetails).get("user")).get("nickName", String.class);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取当前用户的数据权限
|
* 获取当前用户的数据权限
|
||||||
* @return /
|
* @return /
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.utils;
|
package cn.ysk.cashier.utils;
|
||||||
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.utils;
|
package cn.ysk.cashier.utils;
|
||||||
|
|
||||||
import cn.hutool.http.HttpUtil;
|
import cn.hutool.http.HttpUtil;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.utils;
|
package cn.ysk.cashier.utils;
|
||||||
|
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.utils;
|
package cn.ysk.cashier.utils;
|
||||||
|
|
||||||
import cn.hutool.json.JSONArray;
|
import cn.hutool.json.JSONArray;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.utils;
|
package cn.ysk.cashier.utils;
|
||||||
|
|
||||||
import cn.hutool.core.lang.Validator;
|
import cn.hutool.core.lang.Validator;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.utils.enums;
|
package cn.ysk.cashier.utils.enums;
|
||||||
|
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.utils.enums;
|
package cn.ysk.cashier.utils.enums;
|
||||||
|
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.utils.enums;
|
package cn.ysk.cashier.utils.enums;
|
||||||
|
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.utils.enums;
|
package cn.ysk.cashier.utils.enums;
|
||||||
|
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,39 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<parent>
|
||||||
|
<artifactId>eladmin</artifactId>
|
||||||
|
<groupId>cn.ysk.cashier</groupId>
|
||||||
|
<version>2.6</version>
|
||||||
|
</parent>
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<artifactId>eladmin-generator</artifactId>
|
||||||
|
<name>代码生成模块</name>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<configuration.version>1.10</configuration.version>
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>cn.ysk.cashier</groupId>
|
||||||
|
<artifactId>eladmin-common</artifactId>
|
||||||
|
<version>2.6</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!--模板引擎-->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-freemarker</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- https://mvnrepository.com/artifact/commons-configuration/commons-configuration -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>commons-configuration</groupId>
|
||||||
|
<artifactId>commons-configuration</artifactId>
|
||||||
|
<version>${configuration.version}</version>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
</project>
|
||||||
|
|
@ -0,0 +1,97 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package cn.ysk.cashier.domain;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.Setter;
|
||||||
|
import cn.ysk.cashier.utils.GenUtil;
|
||||||
|
import javax.persistence.*;
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 列的数据信息
|
||||||
|
* @author Zheng Jie
|
||||||
|
* @date 2019-01-02
|
||||||
|
*/
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
@Entity
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Table(name = "code_column_config")
|
||||||
|
public class ColumnInfo implements Serializable {
|
||||||
|
|
||||||
|
@Id
|
||||||
|
@Column(name = "column_id")
|
||||||
|
@ApiModelProperty(value = "ID", hidden = true)
|
||||||
|
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "表名")
|
||||||
|
private String tableName;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "数据库字段名称")
|
||||||
|
private String columnName;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "数据库字段类型")
|
||||||
|
private String columnType;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "数据库字段键类型")
|
||||||
|
private String keyType;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "字段额外的参数")
|
||||||
|
private String extra;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "数据库字段描述")
|
||||||
|
private String remark;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "是否必填")
|
||||||
|
private Boolean notNull;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "是否在列表显示")
|
||||||
|
private Boolean listShow;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "是否表单显示")
|
||||||
|
private Boolean formShow;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "表单类型")
|
||||||
|
private String formType;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "查询 1:模糊 2:精确")
|
||||||
|
private String queryType;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "字典名称")
|
||||||
|
private String dictName;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "日期注解")
|
||||||
|
private String dateAnnotation;
|
||||||
|
|
||||||
|
public ColumnInfo(String tableName, String columnName, Boolean notNull, String columnType, String remark, String keyType, String extra) {
|
||||||
|
this.tableName = tableName;
|
||||||
|
this.columnName = columnName;
|
||||||
|
this.columnType = columnType;
|
||||||
|
this.keyType = keyType;
|
||||||
|
this.extra = extra;
|
||||||
|
this.notNull = notNull;
|
||||||
|
if(GenUtil.PK.equalsIgnoreCase(keyType) && GenUtil.EXTRA.equalsIgnoreCase(extra)){
|
||||||
|
this.notNull = false;
|
||||||
|
}
|
||||||
|
this.remark = remark;
|
||||||
|
this.listShow = true;
|
||||||
|
this.formShow = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,78 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package cn.ysk.cashier.domain;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.Setter;
|
||||||
|
import javax.persistence.*;
|
||||||
|
import javax.validation.constraints.NotBlank;
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 代码生成配置
|
||||||
|
* @author Zheng Jie
|
||||||
|
* @date 2019-01-03
|
||||||
|
*/
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
@Entity
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Table(name = "code_gen_config")
|
||||||
|
public class GenConfig implements Serializable {
|
||||||
|
|
||||||
|
public GenConfig(String tableName) {
|
||||||
|
this.tableName = tableName;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Id
|
||||||
|
@Column(name = "config_id")
|
||||||
|
@ApiModelProperty(value = "ID", hidden = true)
|
||||||
|
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
@NotBlank
|
||||||
|
@ApiModelProperty(value = "表名")
|
||||||
|
private String tableName;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "接口名称")
|
||||||
|
private String apiAlias;
|
||||||
|
|
||||||
|
@NotBlank
|
||||||
|
@ApiModelProperty(value = "包路径")
|
||||||
|
private String pack;
|
||||||
|
|
||||||
|
@NotBlank
|
||||||
|
@ApiModelProperty(value = "模块名")
|
||||||
|
private String moduleName;
|
||||||
|
|
||||||
|
@NotBlank
|
||||||
|
@ApiModelProperty(value = "前端文件路径")
|
||||||
|
private String path;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "前端文件路径")
|
||||||
|
private String apiPath;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "作者")
|
||||||
|
private String author;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "表前缀")
|
||||||
|
private String prefix;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "是否覆盖")
|
||||||
|
private Boolean cover = false;
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,48 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package cn.ysk.cashier.domain.vo;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 表的数据信息
|
||||||
|
* @author Zheng Jie
|
||||||
|
* @date 2019-01-02
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
public class TableInfo {
|
||||||
|
|
||||||
|
/** 表名称 */
|
||||||
|
private Object tableName;
|
||||||
|
|
||||||
|
/** 创建日期 */
|
||||||
|
private Object createTime;
|
||||||
|
|
||||||
|
/** 数据库引擎 */
|
||||||
|
private Object engine;
|
||||||
|
|
||||||
|
/** 编码集 */
|
||||||
|
private Object coding;
|
||||||
|
|
||||||
|
/** 备注 */
|
||||||
|
private Object remark;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,34 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package cn.ysk.cashier.repository;
|
||||||
|
|
||||||
|
import cn.ysk.cashier.domain.ColumnInfo;
|
||||||
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Zheng Jie
|
||||||
|
* @date 2019-01-14
|
||||||
|
*/
|
||||||
|
public interface ColumnInfoRepository extends JpaRepository<ColumnInfo,Long> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询表信息
|
||||||
|
* @param tableName 表格名
|
||||||
|
* @return 表信息
|
||||||
|
*/
|
||||||
|
List<ColumnInfo> findByTableNameOrderByIdAsc(String tableName);
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,33 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package cn.ysk.cashier.repository;
|
||||||
|
|
||||||
|
import cn.ysk.cashier.domain.GenConfig;
|
||||||
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Zheng Jie
|
||||||
|
* @date 2019-01-14
|
||||||
|
*/
|
||||||
|
public interface GenConfigRepository extends JpaRepository<GenConfig,Long> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询表配置
|
||||||
|
* @param tableName 表名
|
||||||
|
* @return /
|
||||||
|
*/
|
||||||
|
GenConfig findByTableName(String tableName);
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,51 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package cn.ysk.cashier.rest;
|
||||||
|
|
||||||
|
import cn.ysk.cashier.domain.GenConfig;
|
||||||
|
import cn.ysk.cashier.service.GenConfigService;
|
||||||
|
import io.swagger.annotations.Api;
|
||||||
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.springframework.http.HttpStatus;
|
||||||
|
import org.springframework.http.ResponseEntity;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Zheng Jie
|
||||||
|
* @date 2019-01-14
|
||||||
|
*/
|
||||||
|
@RestController
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
@RequestMapping("/api/genConfig")
|
||||||
|
@Api(tags = "系统:代码生成器配置管理")
|
||||||
|
public class GenConfigController {
|
||||||
|
|
||||||
|
private final GenConfigService genConfigService;
|
||||||
|
|
||||||
|
@ApiOperation("查询")
|
||||||
|
@GetMapping(value = "/{tableName}")
|
||||||
|
public ResponseEntity<Object> queryGenConfig(@PathVariable String tableName){
|
||||||
|
return new ResponseEntity<>(genConfigService.find(tableName), HttpStatus.OK);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PutMapping
|
||||||
|
@ApiOperation("修改")
|
||||||
|
public ResponseEntity<Object> updateGenConfig(@Validated @RequestBody GenConfig genConfig){
|
||||||
|
return new ResponseEntity<>(genConfigService.update(genConfig.getTableName(), genConfig),HttpStatus.OK);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,107 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package cn.ysk.cashier.rest;
|
||||||
|
|
||||||
|
import cn.ysk.cashier.domain.ColumnInfo;
|
||||||
|
import cn.ysk.cashier.exception.BadRequestException;
|
||||||
|
import cn.ysk.cashier.service.GenConfigService;
|
||||||
|
import cn.ysk.cashier.service.GeneratorService;
|
||||||
|
import cn.ysk.cashier.utils.PageUtil;
|
||||||
|
import io.swagger.annotations.Api;
|
||||||
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
|
import org.springframework.http.HttpStatus;
|
||||||
|
import org.springframework.http.ResponseEntity;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Zheng Jie
|
||||||
|
* @date 2019-01-02
|
||||||
|
*/
|
||||||
|
@RestController
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
@RequestMapping("/api/generator")
|
||||||
|
@Api(tags = "系统:代码生成管理")
|
||||||
|
public class GeneratorController {
|
||||||
|
|
||||||
|
private final GeneratorService generatorService;
|
||||||
|
private final GenConfigService genConfigService;
|
||||||
|
|
||||||
|
@Value("${generator.enabled}")
|
||||||
|
private Boolean generatorEnabled;
|
||||||
|
|
||||||
|
@ApiOperation("查询数据库数据")
|
||||||
|
@GetMapping(value = "/tables/all")
|
||||||
|
public ResponseEntity<Object> queryAllTables(){
|
||||||
|
return new ResponseEntity<>(generatorService.getTables(), HttpStatus.OK);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ApiOperation("查询数据库数据")
|
||||||
|
@GetMapping(value = "/tables")
|
||||||
|
public ResponseEntity<Object> queryTables(@RequestParam(defaultValue = "") String name,
|
||||||
|
@RequestParam(defaultValue = "0")Integer page,
|
||||||
|
@RequestParam(defaultValue = "10")Integer size){
|
||||||
|
int[] startEnd = PageUtil.transToStartEnd(page, size);
|
||||||
|
return new ResponseEntity<>(generatorService.getTables(name,startEnd), HttpStatus.OK);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ApiOperation("查询字段数据")
|
||||||
|
@GetMapping(value = "/columns")
|
||||||
|
public ResponseEntity<Object> queryColumns(@RequestParam String tableName){
|
||||||
|
List<ColumnInfo> columnInfos = generatorService.getColumns(tableName);
|
||||||
|
return new ResponseEntity<>(PageUtil.toPage(columnInfos,columnInfos.size()), HttpStatus.OK);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ApiOperation("保存字段数据")
|
||||||
|
@PutMapping
|
||||||
|
public ResponseEntity<HttpStatus> saveColumn(@RequestBody List<ColumnInfo> columnInfos){
|
||||||
|
generatorService.save(columnInfos);
|
||||||
|
return new ResponseEntity<>(HttpStatus.OK);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ApiOperation("同步字段数据")
|
||||||
|
@PostMapping(value = "sync")
|
||||||
|
public ResponseEntity<HttpStatus> syncColumn(@RequestBody List<String> tables){
|
||||||
|
for (String table : tables) {
|
||||||
|
generatorService.sync(generatorService.getColumns(table), generatorService.query(table));
|
||||||
|
}
|
||||||
|
return new ResponseEntity<>(HttpStatus.OK);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ApiOperation("生成代码")
|
||||||
|
@PostMapping(value = "/{tableName}/{type}")
|
||||||
|
public ResponseEntity<Object> generatorCode(@PathVariable String tableName, @PathVariable Integer type, HttpServletRequest request, HttpServletResponse response){
|
||||||
|
if(!generatorEnabled && type == 0){
|
||||||
|
throw new BadRequestException("此环境不允许生成代码,请选择预览或者下载查看!");
|
||||||
|
}
|
||||||
|
switch (type){
|
||||||
|
// 生成代码
|
||||||
|
case 0: generatorService.generator(genConfigService.find(tableName), generatorService.getColumns(tableName));
|
||||||
|
break;
|
||||||
|
// 预览
|
||||||
|
case 1: return generatorService.preview(genConfigService.find(tableName), generatorService.getColumns(tableName));
|
||||||
|
// 打包
|
||||||
|
case 2: generatorService.download(genConfigService.find(tableName), generatorService.getColumns(tableName), request, response);
|
||||||
|
break;
|
||||||
|
default: throw new BadRequestException("没有这个选项");
|
||||||
|
}
|
||||||
|
return new ResponseEntity<>(HttpStatus.OK);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,40 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package cn.ysk.cashier.service;
|
||||||
|
|
||||||
|
import cn.ysk.cashier.domain.GenConfig;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Zheng Jie
|
||||||
|
* @date 2019-01-14
|
||||||
|
*/
|
||||||
|
public interface GenConfigService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询表配置
|
||||||
|
* @param tableName 表名
|
||||||
|
* @return 表配置
|
||||||
|
*/
|
||||||
|
GenConfig find(String tableName);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新表配置
|
||||||
|
* @param tableName 表名
|
||||||
|
* @param genConfig 表配置
|
||||||
|
* @return 表配置
|
||||||
|
*/
|
||||||
|
GenConfig update(String tableName, GenConfig genConfig);
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,96 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package cn.ysk.cashier.service;
|
||||||
|
|
||||||
|
import cn.ysk.cashier.domain.GenConfig;
|
||||||
|
import cn.ysk.cashier.domain.ColumnInfo;
|
||||||
|
import org.springframework.http.ResponseEntity;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Zheng Jie
|
||||||
|
* @date 2019-01-02
|
||||||
|
*/
|
||||||
|
public interface GeneratorService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询数据库元数据
|
||||||
|
* @param name 表名
|
||||||
|
* @param startEnd 分页参数
|
||||||
|
* @return /
|
||||||
|
*/
|
||||||
|
Object getTables(String name, int[] startEnd);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 得到数据表的元数据
|
||||||
|
* @param name 表名
|
||||||
|
* @return /
|
||||||
|
*/
|
||||||
|
List<ColumnInfo> getColumns(String name);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 同步表数据
|
||||||
|
* @param columnInfos /
|
||||||
|
* @param columnInfoList /
|
||||||
|
*/
|
||||||
|
void sync(List<ColumnInfo> columnInfos, List<ColumnInfo> columnInfoList);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 保持数据
|
||||||
|
* @param columnInfos /
|
||||||
|
*/
|
||||||
|
void save(List<ColumnInfo> columnInfos);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取所有table
|
||||||
|
* @return /
|
||||||
|
*/
|
||||||
|
Object getTables();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 代码生成
|
||||||
|
* @param genConfig 配置信息
|
||||||
|
* @param columns 字段信息
|
||||||
|
*/
|
||||||
|
void generator(GenConfig genConfig, List<ColumnInfo> columns);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 预览
|
||||||
|
* @param genConfig 配置信息
|
||||||
|
* @param columns 字段信息
|
||||||
|
* @return /
|
||||||
|
*/
|
||||||
|
ResponseEntity<Object> preview(GenConfig genConfig, List<ColumnInfo> columns);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 打包下载
|
||||||
|
* @param genConfig 配置信息
|
||||||
|
* @param columns 字段信息
|
||||||
|
* @param request /
|
||||||
|
* @param response /
|
||||||
|
*/
|
||||||
|
void download(GenConfig genConfig, List<ColumnInfo> columns, HttpServletRequest request, HttpServletResponse response);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询数据库的表字段数据数据
|
||||||
|
* @param table /
|
||||||
|
* @return /
|
||||||
|
*/
|
||||||
|
List<ColumnInfo> query(String table);
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,66 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package cn.ysk.cashier.service.impl;
|
||||||
|
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import cn.ysk.cashier.domain.GenConfig;
|
||||||
|
import cn.ysk.cashier.repository.GenConfigRepository;
|
||||||
|
import cn.ysk.cashier.service.GenConfigService;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import java.io.File;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Zheng Jie
|
||||||
|
* @date 2019-01-14
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class GenConfigServiceImpl implements GenConfigService {
|
||||||
|
|
||||||
|
private final GenConfigRepository genConfigRepository;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public GenConfig find(String tableName) {
|
||||||
|
GenConfig genConfig = genConfigRepository.findByTableName(tableName);
|
||||||
|
if(genConfig == null){
|
||||||
|
return new GenConfig(tableName);
|
||||||
|
}
|
||||||
|
return genConfig;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public GenConfig update(String tableName, GenConfig genConfig) {
|
||||||
|
String separator = File.separator;
|
||||||
|
String[] paths;
|
||||||
|
String symbol = "\\";
|
||||||
|
if (symbol.equals(separator)) {
|
||||||
|
paths = genConfig.getPath().split("\\\\");
|
||||||
|
} else {
|
||||||
|
paths = genConfig.getPath().split(File.separator);
|
||||||
|
}
|
||||||
|
StringBuilder api = new StringBuilder();
|
||||||
|
for (String path : paths) {
|
||||||
|
api.append(path);
|
||||||
|
api.append(separator);
|
||||||
|
if ("src".equals(path)) {
|
||||||
|
api.append("api");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
genConfig.setApiPath(api.toString());
|
||||||
|
return genConfigRepository.save(genConfig);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,206 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package cn.ysk.cashier.service.impl;
|
||||||
|
|
||||||
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import cn.hutool.core.util.ZipUtil;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import cn.ysk.cashier.domain.GenConfig;
|
||||||
|
import cn.ysk.cashier.domain.ColumnInfo;
|
||||||
|
import cn.ysk.cashier.domain.vo.TableInfo;
|
||||||
|
import cn.ysk.cashier.exception.BadRequestException;
|
||||||
|
import cn.ysk.cashier.repository.ColumnInfoRepository;
|
||||||
|
import cn.ysk.cashier.service.GeneratorService;
|
||||||
|
import cn.ysk.cashier.utils.FileUtil;
|
||||||
|
import cn.ysk.cashier.utils.GenUtil;
|
||||||
|
import cn.ysk.cashier.utils.PageUtil;
|
||||||
|
import cn.ysk.cashier.utils.StringUtils;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.http.HttpStatus;
|
||||||
|
import org.springframework.http.ResponseEntity;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import javax.persistence.EntityManager;
|
||||||
|
import javax.persistence.PersistenceContext;
|
||||||
|
import javax.persistence.Query;
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Zheng Jie
|
||||||
|
* @date 2019-01-02
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class GeneratorServiceImpl implements GeneratorService {
|
||||||
|
private static final Logger log = LoggerFactory.getLogger(GeneratorServiceImpl.class);
|
||||||
|
@PersistenceContext
|
||||||
|
private EntityManager em;
|
||||||
|
|
||||||
|
private final ColumnInfoRepository columnInfoRepository;
|
||||||
|
|
||||||
|
private final String CONFIG_MESSAGE = "请先配置生成器";
|
||||||
|
@Override
|
||||||
|
public Object getTables() {
|
||||||
|
// 使用预编译防止sql注入
|
||||||
|
String sql = "select table_name ,create_time , engine, table_collation, table_comment from information_schema.tables " +
|
||||||
|
"where table_schema = (select database()) " +
|
||||||
|
"order by create_time desc";
|
||||||
|
Query query = em.createNativeQuery(sql);
|
||||||
|
return query.getResultList();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object getTables(String name, int[] startEnd) {
|
||||||
|
// 使用预编译防止sql注入
|
||||||
|
String sql = "select table_name ,create_time , engine, table_collation, table_comment from information_schema.tables " +
|
||||||
|
"where table_schema = (select database()) " +
|
||||||
|
"and table_name like :table order by create_time desc";
|
||||||
|
Query query = em.createNativeQuery(sql);
|
||||||
|
query.setFirstResult(startEnd[0]);
|
||||||
|
query.setMaxResults(startEnd[1] - startEnd[0]);
|
||||||
|
query.setParameter("table", StringUtils.isNotBlank(name) ? ("%" + name + "%") : "%%");
|
||||||
|
List result = query.getResultList();
|
||||||
|
List<TableInfo> tableInfos = new ArrayList<>();
|
||||||
|
for (Object obj : result) {
|
||||||
|
Object[] arr = (Object[]) obj;
|
||||||
|
tableInfos.add(new TableInfo(arr[0], arr[1], arr[2], arr[3], ObjectUtil.isNotEmpty(arr[4]) ? arr[4] : "-"));
|
||||||
|
}
|
||||||
|
String countSql = "select count(1) from information_schema.tables " +
|
||||||
|
"where table_schema = (select database()) and table_name like :table";
|
||||||
|
Query queryCount = em.createNativeQuery(countSql);
|
||||||
|
queryCount.setParameter("table", StringUtils.isNotBlank(name) ? ("%" + name + "%") : "%%");
|
||||||
|
Object totalElements = queryCount.getSingleResult();
|
||||||
|
return PageUtil.toPage(tableInfos, totalElements);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<ColumnInfo> getColumns(String tableName) {
|
||||||
|
List<ColumnInfo> columnInfos = columnInfoRepository.findByTableNameOrderByIdAsc(tableName);
|
||||||
|
if (CollectionUtil.isNotEmpty(columnInfos)) {
|
||||||
|
return columnInfos;
|
||||||
|
} else {
|
||||||
|
columnInfos = query(tableName);
|
||||||
|
return columnInfoRepository.saveAll(columnInfos);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<ColumnInfo> query(String tableName) {
|
||||||
|
// 使用预编译防止sql注入
|
||||||
|
String sql = "select column_name, is_nullable, data_type, column_comment, column_key, extra from information_schema.columns " +
|
||||||
|
"where table_name = ? and table_schema = (select database()) order by ordinal_position";
|
||||||
|
Query query = em.createNativeQuery(sql);
|
||||||
|
query.setParameter(1, tableName);
|
||||||
|
List result = query.getResultList();
|
||||||
|
List<ColumnInfo> columnInfos = new ArrayList<>();
|
||||||
|
for (Object obj : result) {
|
||||||
|
Object[] arr = (Object[]) obj;
|
||||||
|
columnInfos.add(
|
||||||
|
new ColumnInfo(
|
||||||
|
tableName,
|
||||||
|
arr[0].toString(),
|
||||||
|
"NO".equals(arr[1]),
|
||||||
|
arr[2].toString(),
|
||||||
|
ObjectUtil.isNotNull(arr[3]) ? arr[3].toString() : null,
|
||||||
|
ObjectUtil.isNotNull(arr[4]) ? arr[4].toString() : null,
|
||||||
|
ObjectUtil.isNotNull(arr[5]) ? arr[5].toString() : null)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return columnInfos;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void sync(List<ColumnInfo> columnInfos, List<ColumnInfo> columnInfoList) {
|
||||||
|
// 第一种情况,数据库类字段改变或者新增字段
|
||||||
|
for (ColumnInfo columnInfo : columnInfoList) {
|
||||||
|
// 根据字段名称查找
|
||||||
|
List<ColumnInfo> columns = columnInfos.stream().filter(c -> c.getColumnName().equals(columnInfo.getColumnName())).collect(Collectors.toList());
|
||||||
|
// 如果能找到,就修改部分可能被字段
|
||||||
|
if (CollectionUtil.isNotEmpty(columns)) {
|
||||||
|
ColumnInfo column = columns.get(0);
|
||||||
|
column.setColumnType(columnInfo.getColumnType());
|
||||||
|
column.setExtra(columnInfo.getExtra());
|
||||||
|
column.setKeyType(columnInfo.getKeyType());
|
||||||
|
if (StringUtils.isBlank(column.getRemark())) {
|
||||||
|
column.setRemark(columnInfo.getRemark());
|
||||||
|
}
|
||||||
|
columnInfoRepository.save(column);
|
||||||
|
} else {
|
||||||
|
// 如果找不到,则保存新字段信息
|
||||||
|
columnInfoRepository.save(columnInfo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 第二种情况,数据库字段删除了
|
||||||
|
for (ColumnInfo columnInfo : columnInfos) {
|
||||||
|
// 根据字段名称查找
|
||||||
|
List<ColumnInfo> columns = columnInfoList.stream().filter(c -> c.getColumnName().equals(columnInfo.getColumnName())).collect(Collectors.toList());
|
||||||
|
// 如果找不到,就代表字段被删除了,则需要删除该字段
|
||||||
|
if (CollectionUtil.isEmpty(columns)) {
|
||||||
|
columnInfoRepository.delete(columnInfo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void save(List<ColumnInfo> columnInfos) {
|
||||||
|
columnInfoRepository.saveAll(columnInfos);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void generator(GenConfig genConfig, List<ColumnInfo> columns) {
|
||||||
|
if (genConfig.getId() == null) {
|
||||||
|
throw new BadRequestException(CONFIG_MESSAGE);
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
GenUtil.generatorCode(columns, genConfig);
|
||||||
|
} catch (IOException e) {
|
||||||
|
log.error(e.getMessage(), e);
|
||||||
|
throw new BadRequestException("生成失败,请手动处理已生成的文件");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ResponseEntity<Object> preview(GenConfig genConfig, List<ColumnInfo> columns) {
|
||||||
|
if (genConfig.getId() == null) {
|
||||||
|
throw new BadRequestException(CONFIG_MESSAGE);
|
||||||
|
}
|
||||||
|
List<Map<String, Object>> genList = GenUtil.preview(columns, genConfig);
|
||||||
|
return new ResponseEntity<>(genList, HttpStatus.OK);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void download(GenConfig genConfig, List<ColumnInfo> columns, HttpServletRequest request, HttpServletResponse response) {
|
||||||
|
if (genConfig.getId() == null) {
|
||||||
|
throw new BadRequestException(CONFIG_MESSAGE);
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
File file = new File(GenUtil.download(columns, genConfig));
|
||||||
|
String zipPath = file.getPath() + ".zip";
|
||||||
|
ZipUtil.zip(file.getPath(), zipPath);
|
||||||
|
FileUtil.downloadFile(request, response, new File(zipPath), true);
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new BadRequestException("打包失败");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,54 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package cn.ysk.cashier.utils;
|
||||||
|
|
||||||
|
import org.apache.commons.configuration.*;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* sql字段转java
|
||||||
|
*
|
||||||
|
* @author Zheng Jie
|
||||||
|
* @date 2019-01-03
|
||||||
|
*/
|
||||||
|
public class ColUtil {
|
||||||
|
private static final Logger log = LoggerFactory.getLogger(ColUtil.class);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 转换mysql数据类型为java数据类型
|
||||||
|
*
|
||||||
|
* @param type 数据库字段类型
|
||||||
|
* @return String
|
||||||
|
*/
|
||||||
|
static String cloToJava(String type) {
|
||||||
|
Configuration config = getConfig();
|
||||||
|
assert config != null;
|
||||||
|
return config.getString(type, "unknowType");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取配置信息
|
||||||
|
*/
|
||||||
|
public static PropertiesConfiguration getConfig() {
|
||||||
|
try {
|
||||||
|
return new PropertiesConfiguration("generator.properties");
|
||||||
|
} catch (ConfigurationException e) {
|
||||||
|
log.error(e.getMessage(), e);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,422 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package cn.ysk.cashier.utils;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
import cn.hutool.extra.template.*;
|
||||||
|
import cn.ysk.cashier.domain.ColumnInfo;
|
||||||
|
import cn.ysk.cashier.domain.GenConfig;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.util.ObjectUtils;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileWriter;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.Writer;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
import static cn.ysk.cashier.utils.FileUtil.SYS_TEM_DIR;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 代码生成
|
||||||
|
*
|
||||||
|
* @author Zheng Jie
|
||||||
|
* @date 2019-01-02
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@SuppressWarnings({"unchecked", "all"})
|
||||||
|
public class GenUtil {
|
||||||
|
|
||||||
|
private static final String TIMESTAMP = "Timestamp";
|
||||||
|
|
||||||
|
private static final String BIGDECIMAL = "BigDecimal";
|
||||||
|
|
||||||
|
public static final String PK = "PRI";
|
||||||
|
|
||||||
|
public static final String EXTRA = "auto_increment";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取后端代码模板名称
|
||||||
|
*
|
||||||
|
* @return List
|
||||||
|
*/
|
||||||
|
private static List<String> getAdminTemplateNames() {
|
||||||
|
List<String> templateNames = new ArrayList<>();
|
||||||
|
templateNames.add("Entity");
|
||||||
|
templateNames.add("Dto");
|
||||||
|
templateNames.add("Mapper");
|
||||||
|
templateNames.add("Controller");
|
||||||
|
templateNames.add("QueryCriteria");
|
||||||
|
templateNames.add("Service");
|
||||||
|
templateNames.add("ServiceImpl");
|
||||||
|
templateNames.add("Repository");
|
||||||
|
return templateNames;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取前端代码模板名称
|
||||||
|
*
|
||||||
|
* @return List
|
||||||
|
*/
|
||||||
|
private static List<String> getFrontTemplateNames() {
|
||||||
|
List<String> templateNames = new ArrayList<>();
|
||||||
|
templateNames.add("index");
|
||||||
|
templateNames.add("api");
|
||||||
|
return templateNames;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<Map<String, Object>> preview(List<ColumnInfo> columns, GenConfig genConfig) {
|
||||||
|
Map<String, Object> genMap = getGenMap(columns, genConfig);
|
||||||
|
List<Map<String, Object>> genList = new ArrayList<>();
|
||||||
|
// 获取后端模版
|
||||||
|
List<String> templates = getAdminTemplateNames();
|
||||||
|
TemplateEngine engine = TemplateUtil.createEngine(new TemplateConfig("template", TemplateConfig.ResourceMode.CLASSPATH));
|
||||||
|
for (String templateName : templates) {
|
||||||
|
Map<String, Object> map = new HashMap<>(1);
|
||||||
|
Template template = engine.getTemplate("generator/admin/" + templateName + ".ftl");
|
||||||
|
map.put("content", template.render(genMap));
|
||||||
|
map.put("name", templateName);
|
||||||
|
genList.add(map);
|
||||||
|
}
|
||||||
|
// 获取前端模版
|
||||||
|
templates = getFrontTemplateNames();
|
||||||
|
for (String templateName : templates) {
|
||||||
|
Map<String, Object> map = new HashMap<>(1);
|
||||||
|
Template template = engine.getTemplate("generator/front/" + templateName + ".ftl");
|
||||||
|
map.put(templateName, template.render(genMap));
|
||||||
|
map.put("content", template.render(genMap));
|
||||||
|
map.put("name", templateName);
|
||||||
|
genList.add(map);
|
||||||
|
}
|
||||||
|
return genList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String download(List<ColumnInfo> columns, GenConfig genConfig) throws IOException {
|
||||||
|
// 拼接的路径:/tmpeladmin-gen-temp/,这个路径在Linux下需要root用户才有权限创建,非root用户会权限错误而失败,更改为: /tmp/eladmin-gen-temp/
|
||||||
|
// String tempPath =SYS_TEM_DIR + "eladmin-gen-temp" + File.separator + genConfig.getTableName() + File.separator;
|
||||||
|
String tempPath = SYS_TEM_DIR + "eladmin-gen-temp" + File.separator + genConfig.getTableName() + File.separator;
|
||||||
|
Map<String, Object> genMap = getGenMap(columns, genConfig);
|
||||||
|
TemplateEngine engine = TemplateUtil.createEngine(new TemplateConfig("template", TemplateConfig.ResourceMode.CLASSPATH));
|
||||||
|
// 生成后端代码
|
||||||
|
List<String> templates = getAdminTemplateNames();
|
||||||
|
for (String templateName : templates) {
|
||||||
|
Template template = engine.getTemplate("generator/admin/" + templateName + ".ftl");
|
||||||
|
String filePath = getAdminFilePath(templateName, genConfig, genMap.get("className").toString(), tempPath + "eladmin" + File.separator);
|
||||||
|
assert filePath != null;
|
||||||
|
File file = new File(filePath);
|
||||||
|
// 如果非覆盖生成
|
||||||
|
if (!genConfig.getCover() && FileUtil.exist(file)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
// 生成代码
|
||||||
|
genFile(file, template, genMap);
|
||||||
|
}
|
||||||
|
// 生成前端代码
|
||||||
|
templates = getFrontTemplateNames();
|
||||||
|
for (String templateName : templates) {
|
||||||
|
Template template = engine.getTemplate("generator/front/" + templateName + ".ftl");
|
||||||
|
String path = tempPath + "eladmin-web" + File.separator;
|
||||||
|
String apiPath = path + "src" + File.separator + "api" + File.separator;
|
||||||
|
String srcPath = path + "src" + File.separator + "views" + File.separator + genMap.get("changeClassName").toString() + File.separator;
|
||||||
|
String filePath = getFrontFilePath(templateName, apiPath, srcPath, genMap.get("changeClassName").toString());
|
||||||
|
assert filePath != null;
|
||||||
|
File file = new File(filePath);
|
||||||
|
// 如果非覆盖生成
|
||||||
|
if (!genConfig.getCover() && FileUtil.exist(file)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
// 生成代码
|
||||||
|
genFile(file, template, genMap);
|
||||||
|
}
|
||||||
|
return tempPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void generatorCode(List<ColumnInfo> columnInfos, GenConfig genConfig) throws IOException {
|
||||||
|
Map<String, Object> genMap = getGenMap(columnInfos, genConfig);
|
||||||
|
TemplateEngine engine = TemplateUtil.createEngine(new TemplateConfig("template", TemplateConfig.ResourceMode.CLASSPATH));
|
||||||
|
// 生成后端代码
|
||||||
|
List<String> templates = getAdminTemplateNames();
|
||||||
|
for (String templateName : templates) {
|
||||||
|
Template template = engine.getTemplate("generator/admin/" + templateName + ".ftl");
|
||||||
|
String rootPath = System.getProperty("user.dir");
|
||||||
|
String filePath = getAdminFilePath(templateName, genConfig, genMap.get("className").toString(), rootPath);
|
||||||
|
|
||||||
|
assert filePath != null;
|
||||||
|
File file = new File(filePath);
|
||||||
|
|
||||||
|
// 如果非覆盖生成
|
||||||
|
if (!genConfig.getCover() && FileUtil.exist(file)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
// 生成代码
|
||||||
|
genFile(file, template, genMap);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 生成前端代码
|
||||||
|
templates = getFrontTemplateNames();
|
||||||
|
for (String templateName : templates) {
|
||||||
|
Template template = engine.getTemplate("generator/front/" + templateName + ".ftl");
|
||||||
|
String filePath = getFrontFilePath(templateName, genConfig.getApiPath(), genConfig.getPath(), genMap.get("changeClassName").toString());
|
||||||
|
|
||||||
|
assert filePath != null;
|
||||||
|
File file = new File(filePath);
|
||||||
|
|
||||||
|
// 如果非覆盖生成
|
||||||
|
if (!genConfig.getCover() && FileUtil.exist(file)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
// 生成代码
|
||||||
|
genFile(file, template, genMap);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取模版数据
|
||||||
|
private static Map<String, Object> getGenMap(List<ColumnInfo> columnInfos, GenConfig genConfig) {
|
||||||
|
// 存储模版字段数据
|
||||||
|
Map<String, Object> genMap = new HashMap<>(16);
|
||||||
|
// 接口别名
|
||||||
|
genMap.put("apiAlias", genConfig.getApiAlias());
|
||||||
|
// 包名称
|
||||||
|
genMap.put("package", genConfig.getPack());
|
||||||
|
// 模块名称
|
||||||
|
genMap.put("moduleName", genConfig.getModuleName());
|
||||||
|
// 作者
|
||||||
|
genMap.put("author", genConfig.getAuthor());
|
||||||
|
// 创建日期
|
||||||
|
genMap.put("date", LocalDate.now().toString());
|
||||||
|
// 表名
|
||||||
|
genMap.put("tableName", genConfig.getTableName());
|
||||||
|
// 大写开头的类名
|
||||||
|
String className = StringUtils.toCapitalizeCamelCase(genConfig.getTableName());
|
||||||
|
// 小写开头的类名
|
||||||
|
String changeClassName = StringUtils.toCamelCase(genConfig.getTableName());
|
||||||
|
// 判断是否去除表前缀
|
||||||
|
if (StringUtils.isNotEmpty(genConfig.getPrefix())) {
|
||||||
|
className = StringUtils.toCapitalizeCamelCase(StrUtil.removePrefix(genConfig.getTableName(), genConfig.getPrefix()));
|
||||||
|
changeClassName = StringUtils.toCamelCase(StrUtil.removePrefix(genConfig.getTableName(), genConfig.getPrefix()));
|
||||||
|
changeClassName = StringUtils.uncapitalize(changeClassName);
|
||||||
|
}
|
||||||
|
// 保存类名
|
||||||
|
genMap.put("className", className);
|
||||||
|
// 保存小写开头的类名
|
||||||
|
genMap.put("changeClassName", changeClassName);
|
||||||
|
// 存在 Timestamp 字段
|
||||||
|
genMap.put("hasTimestamp", false);
|
||||||
|
// 查询类中存在 Timestamp 字段
|
||||||
|
genMap.put("queryHasTimestamp", false);
|
||||||
|
// 存在 BigDecimal 字段
|
||||||
|
genMap.put("hasBigDecimal", false);
|
||||||
|
// 查询类中存在 BigDecimal 字段
|
||||||
|
genMap.put("queryHasBigDecimal", false);
|
||||||
|
// 是否需要创建查询
|
||||||
|
genMap.put("hasQuery", false);
|
||||||
|
// 自增主键
|
||||||
|
genMap.put("auto", false);
|
||||||
|
// 存在字典
|
||||||
|
genMap.put("hasDict", false);
|
||||||
|
// 存在日期注解
|
||||||
|
genMap.put("hasDateAnnotation", false);
|
||||||
|
// 保存字段信息
|
||||||
|
List<Map<String, Object>> columns = new ArrayList<>();
|
||||||
|
// 保存查询字段的信息
|
||||||
|
List<Map<String, Object>> queryColumns = new ArrayList<>();
|
||||||
|
// 存储字典信息
|
||||||
|
List<String> dicts = new ArrayList<>();
|
||||||
|
// 存储 between 信息
|
||||||
|
List<Map<String, Object>> betweens = new ArrayList<>();
|
||||||
|
// 存储不为空的字段信息
|
||||||
|
List<Map<String, Object>> isNotNullColumns = new ArrayList<>();
|
||||||
|
|
||||||
|
for (ColumnInfo column : columnInfos) {
|
||||||
|
Map<String, Object> listMap = new HashMap<>(16);
|
||||||
|
// 字段描述
|
||||||
|
listMap.put("remark", column.getRemark());
|
||||||
|
// 字段类型
|
||||||
|
listMap.put("columnKey", column.getKeyType());
|
||||||
|
// 主键类型
|
||||||
|
String colType = ColUtil.cloToJava(column.getColumnType());
|
||||||
|
// 小写开头的字段名
|
||||||
|
String changeColumnName = StringUtils.toCamelCase(column.getColumnName());
|
||||||
|
// 大写开头的字段名
|
||||||
|
String capitalColumnName = StringUtils.toCapitalizeCamelCase(column.getColumnName());
|
||||||
|
if (PK.equals(column.getKeyType())) {
|
||||||
|
// 存储主键类型
|
||||||
|
genMap.put("pkColumnType", colType);
|
||||||
|
// 存储小写开头的字段名
|
||||||
|
genMap.put("pkChangeColName", changeColumnName);
|
||||||
|
// 存储大写开头的字段名
|
||||||
|
genMap.put("pkCapitalColName", capitalColumnName);
|
||||||
|
}
|
||||||
|
// 是否存在 Timestamp 类型的字段
|
||||||
|
if (TIMESTAMP.equals(colType)) {
|
||||||
|
genMap.put("hasTimestamp", true);
|
||||||
|
}
|
||||||
|
// 是否存在 BigDecimal 类型的字段
|
||||||
|
if (BIGDECIMAL.equals(colType)) {
|
||||||
|
genMap.put("hasBigDecimal", true);
|
||||||
|
}
|
||||||
|
// 主键是否自增
|
||||||
|
if (EXTRA.equals(column.getExtra())) {
|
||||||
|
genMap.put("auto", true);
|
||||||
|
}
|
||||||
|
// 主键存在字典
|
||||||
|
if (StringUtils.isNotBlank(column.getDictName())) {
|
||||||
|
genMap.put("hasDict", true);
|
||||||
|
if(!dicts.contains(column.getDictName()))
|
||||||
|
dicts.add(column.getDictName());
|
||||||
|
}
|
||||||
|
|
||||||
|
// 存储字段类型
|
||||||
|
listMap.put("columnType", colType);
|
||||||
|
// 存储字原始段名称
|
||||||
|
listMap.put("columnName", column.getColumnName());
|
||||||
|
// 不为空
|
||||||
|
listMap.put("istNotNull", column.getNotNull());
|
||||||
|
// 字段列表显示
|
||||||
|
listMap.put("columnShow", column.getListShow());
|
||||||
|
// 表单显示
|
||||||
|
listMap.put("formShow", column.getFormShow());
|
||||||
|
// 表单组件类型
|
||||||
|
listMap.put("formType", StringUtils.isNotBlank(column.getFormType()) ? column.getFormType() : "Input");
|
||||||
|
// 小写开头的字段名称
|
||||||
|
listMap.put("changeColumnName", changeColumnName);
|
||||||
|
//大写开头的字段名称
|
||||||
|
listMap.put("capitalColumnName", capitalColumnName);
|
||||||
|
// 字典名称
|
||||||
|
listMap.put("dictName", column.getDictName());
|
||||||
|
// 日期注解
|
||||||
|
listMap.put("dateAnnotation", column.getDateAnnotation());
|
||||||
|
if (StringUtils.isNotBlank(column.getDateAnnotation())) {
|
||||||
|
genMap.put("hasDateAnnotation", true);
|
||||||
|
}
|
||||||
|
// 添加非空字段信息
|
||||||
|
if (column.getNotNull()) {
|
||||||
|
isNotNullColumns.add(listMap);
|
||||||
|
}
|
||||||
|
// 判断是否有查询,如有则把查询的字段set进columnQuery
|
||||||
|
if (!StringUtils.isBlank(column.getQueryType())) {
|
||||||
|
// 查询类型
|
||||||
|
listMap.put("queryType", column.getQueryType());
|
||||||
|
// 是否存在查询
|
||||||
|
genMap.put("hasQuery", true);
|
||||||
|
if (TIMESTAMP.equals(colType)) {
|
||||||
|
// 查询中存储 Timestamp 类型
|
||||||
|
genMap.put("queryHasTimestamp", true);
|
||||||
|
}
|
||||||
|
if (BIGDECIMAL.equals(colType)) {
|
||||||
|
// 查询中存储 BigDecimal 类型
|
||||||
|
genMap.put("queryHasBigDecimal", true);
|
||||||
|
}
|
||||||
|
if ("between".equalsIgnoreCase(column.getQueryType())) {
|
||||||
|
betweens.add(listMap);
|
||||||
|
} else {
|
||||||
|
// 添加到查询列表中
|
||||||
|
queryColumns.add(listMap);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 添加到字段列表中
|
||||||
|
columns.add(listMap);
|
||||||
|
}
|
||||||
|
// 保存字段列表
|
||||||
|
genMap.put("columns", columns);
|
||||||
|
// 保存查询列表
|
||||||
|
genMap.put("queryColumns", queryColumns);
|
||||||
|
// 保存字段列表
|
||||||
|
genMap.put("dicts", dicts);
|
||||||
|
// 保存查询列表
|
||||||
|
genMap.put("betweens", betweens);
|
||||||
|
// 保存非空字段信息
|
||||||
|
genMap.put("isNotNullColumns", isNotNullColumns);
|
||||||
|
return genMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 定义后端文件路径以及名称
|
||||||
|
*/
|
||||||
|
private static String getAdminFilePath(String templateName, GenConfig genConfig, String className, String rootPath) {
|
||||||
|
String projectPath = rootPath + File.separator + genConfig.getModuleName();
|
||||||
|
String packagePath = projectPath + File.separator + "src" + File.separator + "main" + File.separator + "java" + File.separator;
|
||||||
|
if (!ObjectUtils.isEmpty(genConfig.getPack())) {
|
||||||
|
packagePath += genConfig.getPack().replace(".", File.separator) + File.separator;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ("Entity".equals(templateName)) {
|
||||||
|
return packagePath + "domain" + File.separator + className + ".java";
|
||||||
|
}
|
||||||
|
|
||||||
|
if ("Controller".equals(templateName)) {
|
||||||
|
return packagePath + "rest" + File.separator + className + "Controller.java";
|
||||||
|
}
|
||||||
|
|
||||||
|
if ("Service".equals(templateName)) {
|
||||||
|
return packagePath + "service" + File.separator + className + "Service.java";
|
||||||
|
}
|
||||||
|
|
||||||
|
if ("ServiceImpl".equals(templateName)) {
|
||||||
|
return packagePath + "service" + File.separator + "impl" + File.separator + className + "ServiceImpl.java";
|
||||||
|
}
|
||||||
|
|
||||||
|
if ("Dto".equals(templateName)) {
|
||||||
|
return packagePath + "service" + File.separator + "dto" + File.separator + className + "Dto.java";
|
||||||
|
}
|
||||||
|
|
||||||
|
if ("QueryCriteria".equals(templateName)) {
|
||||||
|
return packagePath + "service" + File.separator + "dto" + File.separator + className + "QueryCriteria.java";
|
||||||
|
}
|
||||||
|
|
||||||
|
if ("Mapper".equals(templateName)) {
|
||||||
|
return packagePath + "service" + File.separator + "mapstruct" + File.separator + className + "Mapper.java";
|
||||||
|
}
|
||||||
|
|
||||||
|
if ("Repository".equals(templateName)) {
|
||||||
|
return packagePath + "repository" + File.separator + className + "Repository.java";
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 定义前端文件路径以及名称
|
||||||
|
*/
|
||||||
|
private static String getFrontFilePath(String templateName, String apiPath, String path, String apiName) {
|
||||||
|
|
||||||
|
if ("api".equals(templateName)) {
|
||||||
|
return apiPath + File.separator + apiName + ".js";
|
||||||
|
}
|
||||||
|
|
||||||
|
if ("index".equals(templateName)) {
|
||||||
|
return path + File.separator + "index.vue";
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void genFile(File file, Template template, Map<String, Object> map) throws IOException {
|
||||||
|
// 生成目标文件
|
||||||
|
Writer writer = null;
|
||||||
|
try {
|
||||||
|
FileUtil.touch(file);
|
||||||
|
writer = new FileWriter(file);
|
||||||
|
template.render(map, writer);
|
||||||
|
} catch (TemplateException | IOException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
} finally {
|
||||||
|
assert writer != null;
|
||||||
|
writer.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.annotation;
|
package cn.ysk.cashier.annotation;
|
||||||
|
|
||||||
import java.lang.annotation.*;
|
import java.lang.annotation.*;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.aspect;
|
package cn.ysk.cashier.aspect;
|
||||||
|
|
||||||
import cn.ysk.cashier.domain.Log;
|
import cn.ysk.cashier.domain.Log;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.domain;
|
package cn.ysk.cashier.domain;
|
||||||
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.repository;
|
package cn.ysk.cashier.repository;
|
||||||
|
|
||||||
import cn.ysk.cashier.domain.Log;
|
import cn.ysk.cashier.domain.Log;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.service;
|
package cn.ysk.cashier.service;
|
||||||
|
|
||||||
import cn.ysk.cashier.service.dto.LogQueryCriteria;
|
import cn.ysk.cashier.service.dto.LogQueryCriteria;
|
||||||
|
|
@ -53,13 +67,6 @@ public interface LogService {
|
||||||
@Async
|
@Async
|
||||||
void save(String username, String browser, String ip, ProceedingJoinPoint joinPoint, Log log,Integer shopId);
|
void save(String username, String browser, String ip, ProceedingJoinPoint joinPoint, Log log,Integer shopId);
|
||||||
|
|
||||||
/**
|
|
||||||
* @param description 描述
|
|
||||||
* @param method 方法
|
|
||||||
* @param param 入参
|
|
||||||
*/
|
|
||||||
void save(String description,String method,Integer shopId,String param);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询异常详情
|
* 查询异常详情
|
||||||
* @param id 日志ID
|
* @param id 日志ID
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.service.dto;
|
package cn.ysk.cashier.service.dto;
|
||||||
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.service.dto;
|
package cn.ysk.cashier.service.dto;
|
||||||
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.service.dto;
|
package cn.ysk.cashier.service.dto;
|
||||||
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.service.impl;
|
package cn.ysk.cashier.service.impl;
|
||||||
|
|
||||||
import cn.hutool.core.lang.Dict;
|
import cn.hutool.core.lang.Dict;
|
||||||
|
|
@ -26,7 +40,6 @@ import org.springframework.transaction.annotation.Transactional;
|
||||||
import org.springframework.web.bind.annotation.RequestBody;
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
import org.springframework.web.bind.annotation.RequestParam;
|
import org.springframework.web.bind.annotation.RequestParam;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
|
|
@ -83,7 +96,8 @@ public class LogServiceImpl implements LogService {
|
||||||
String value = SpelUtil.generateKeyBySpEL(split[1], joinPoint);
|
String value = SpelUtil.generateKeyBySpEL(split[1], joinPoint);
|
||||||
// 描述
|
// 描述
|
||||||
log.setDescription(split[0] + ":" + value);
|
log.setDescription(split[0] + ":" + value);
|
||||||
} else if (split.length == 3) {
|
}
|
||||||
|
if (split.length == 3) {
|
||||||
// String v1 = SpelUtil.generateKeyBySpEL(split[1], joinPoint);
|
// String v1 = SpelUtil.generateKeyBySpEL(split[1], joinPoint);
|
||||||
String v2 = SpelUtil.generateKeyBySpEL(split[2], joinPoint);
|
String v2 = SpelUtil.generateKeyBySpEL(split[2], joinPoint);
|
||||||
if (methodName.contains("createOutAndONOperate")) {
|
if (methodName.contains("createOutAndONOperate")) {
|
||||||
|
|
@ -121,25 +135,6 @@ public class LogServiceImpl implements LogService {
|
||||||
logRepository.save(log);
|
logRepository.save(log);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@Transactional(rollbackFor = Exception.class)
|
|
||||||
public void save(String description,String method,Integer shopId,String param) {
|
|
||||||
Log log = new Log();
|
|
||||||
HttpServletRequest request = RequestHolder.getHttpServletRequest();
|
|
||||||
log.setUsername(SecurityUtils.getCurrentUsername());
|
|
||||||
log.setLogType("INFO");
|
|
||||||
log.setBrowser(StringUtils.getBrowser(request));
|
|
||||||
log.setRequestIp(StringUtils.getIp(request));
|
|
||||||
log.setAddress(StringUtils.getCityInfo(log.getRequestIp()));
|
|
||||||
log.setShopId(shopId);
|
|
||||||
|
|
||||||
log.setDescription(description);
|
|
||||||
log.setMethod(method);
|
|
||||||
log.setParams(param);
|
|
||||||
logRepository.save(log);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据方法和传入的参数获取请求参数
|
* 根据方法和传入的参数获取请求参数
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.service.mapstruct;
|
package cn.ysk.cashier.service.mapstruct;
|
||||||
|
|
||||||
import cn.ysk.cashier.base.BaseMapper;
|
import cn.ysk.cashier.base.BaseMapper;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.service.mapstruct;
|
package cn.ysk.cashier.service.mapstruct;
|
||||||
|
|
||||||
import cn.ysk.cashier.base.BaseMapper;
|
import cn.ysk.cashier.base.BaseMapper;
|
||||||
|
|
|
||||||
|
|
@ -19,15 +19,7 @@
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
|
||||||
<groupId>org.springframework.boot</groupId>
|
|
||||||
<artifactId>spring-boot-starter-validation</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>p6spy</groupId>
|
|
||||||
<artifactId>p6spy</artifactId>
|
|
||||||
<version>3.8.2</version>
|
|
||||||
</dependency>
|
|
||||||
<!-- 代码生成模块 -->
|
<!-- 代码生成模块 -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>cn.ysk.cashier</groupId>
|
<groupId>cn.ysk.cashier</groupId>
|
||||||
|
|
@ -106,13 +98,11 @@
|
||||||
<version>6.1.4</version>
|
<version>6.1.4</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!--
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.mybatis.spring.boot</groupId>
|
<groupId>org.mybatis.spring.boot</groupId>
|
||||||
<artifactId>mybatis-spring-boot-starter</artifactId>
|
<artifactId>mybatis-spring-boot-starter</artifactId>
|
||||||
<version>2.1.4</version>
|
<version>2.1.4</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
-->
|
|
||||||
|
|
||||||
<!-- <dependency>-->
|
<!-- <dependency>-->
|
||||||
<!-- <groupId>com.baomidou</groupId>-->
|
<!-- <groupId>com.baomidou</groupId>-->
|
||||||
|
|
@ -122,12 +112,12 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.baomidou</groupId>
|
<groupId>com.baomidou</groupId>
|
||||||
<artifactId>mybatis-plus-generator</artifactId>
|
<artifactId>mybatis-plus-generator</artifactId>
|
||||||
<version>3.5.7</version>
|
<version>3.5.3.1</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.baomidou</groupId>
|
<groupId>com.baomidou</groupId>
|
||||||
<artifactId>mybatis-plus-boot-starter</artifactId>
|
<artifactId>mybatis-plus-boot-starter</artifactId>
|
||||||
<version>3.5.7</version>
|
<version>3.5.3.1</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!-- zxing生成二维码 -->
|
<!-- zxing生成二维码 -->
|
||||||
|
|
@ -150,13 +140,6 @@
|
||||||
<version>2.0.21</version>
|
<version>2.0.21</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!-- <dependency>-->
|
|
||||||
<!-- <groupId>org.springframework</groupId>-->
|
|
||||||
<!-- <artifactId>spring-context-indexer</artifactId>-->
|
|
||||||
<!-- <version>5.2.0.RELEASE</version>-->
|
|
||||||
<!-- <optional>true</optional>-->
|
|
||||||
<!-- </dependency>-->
|
|
||||||
|
|
||||||
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<profiles>
|
<profiles>
|
||||||
|
|
@ -167,15 +150,9 @@
|
||||||
</properties>
|
</properties>
|
||||||
</profile>
|
</profile>
|
||||||
<profile>
|
<profile>
|
||||||
<id>pre</id>
|
<id>pro</id>
|
||||||
<properties>
|
<properties>
|
||||||
<env>pre</env>
|
<env>pro</env>
|
||||||
</properties>
|
|
||||||
</profile>
|
|
||||||
<profile>
|
|
||||||
<id>prod</id>
|
|
||||||
<properties>
|
|
||||||
<env>prod</env>
|
|
||||||
</properties>
|
</properties>
|
||||||
</profile>
|
</profile>
|
||||||
</profiles>
|
</profiles>
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,23 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier;
|
package cn.ysk.cashier;
|
||||||
|
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
import cn.ysk.cashier.annotation.rest.AnonymousGetMapping;
|
import cn.ysk.cashier.annotation.rest.AnonymousGetMapping;
|
||||||
import cn.ysk.cashier.utils.SpringContextHolder;
|
import cn.ysk.cashier.utils.SpringContextHolder;
|
||||||
import org.mybatis.spring.annotation.MapperScan;
|
|
||||||
import org.springframework.boot.SpringApplication;
|
import org.springframework.boot.SpringApplication;
|
||||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
import org.springframework.boot.context.ApplicationPidFileWriter;
|
import org.springframework.boot.context.ApplicationPidFileWriter;
|
||||||
|
|
@ -23,9 +36,8 @@ import org.springframework.web.bind.annotation.RestController;
|
||||||
@EnableAsync
|
@EnableAsync
|
||||||
@RestController
|
@RestController
|
||||||
@Api(hidden = true)
|
@Api(hidden = true)
|
||||||
@EnableTransactionManagement
|
|
||||||
@SpringBootApplication
|
@SpringBootApplication
|
||||||
@MapperScan("cn.ysk.cashier.mybatis.mapper")
|
@EnableTransactionManagement
|
||||||
@EnableJpaAuditing(auditorAwareRef = "auditorAware")
|
@EnableJpaAuditing(auditorAwareRef = "auditorAware")
|
||||||
public class AppRun {
|
public class AppRun {
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,6 @@ public class AppApiMethodAspect {
|
||||||
"cn.ysk.cashier.controller.* " +
|
"cn.ysk.cashier.controller.* " +
|
||||||
"|| cn.ysk.cashier.controller.*.* " +
|
"|| cn.ysk.cashier.controller.*.* " +
|
||||||
"|| cn.ysk.cashier.mnt.rest.* " +
|
"|| cn.ysk.cashier.mnt.rest.* " +
|
||||||
"|| cn.ysk.cashier.cons.rest.* " +
|
|
||||||
"|| cn.ysk.cashier.system.rest.* " +
|
"|| cn.ysk.cashier.system.rest.* " +
|
||||||
"|| cn.ysk.cashier.config.security.rest.*" +
|
"|| cn.ysk.cashier.config.security.rest.*" +
|
||||||
").*(..))")
|
").*(..))")
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.config;
|
package cn.ysk.cashier.config;
|
||||||
|
|
||||||
import com.alibaba.fastjson.serializer.SerializerFeature;
|
import com.alibaba.fastjson.serializer.SerializerFeature;
|
||||||
|
|
@ -14,7 +28,6 @@ import org.springframework.web.filter.CorsFilter;
|
||||||
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
|
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
|
||||||
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
|
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
|
||||||
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
||||||
|
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
@ -29,9 +42,7 @@ import java.util.List;
|
||||||
@EnableWebMvc
|
@EnableWebMvc
|
||||||
public class ConfigurerAdapter implements WebMvcConfigurer {
|
public class ConfigurerAdapter implements WebMvcConfigurer {
|
||||||
|
|
||||||
/**
|
/** 文件配置 */
|
||||||
* 文件配置
|
|
||||||
*/
|
|
||||||
private final FileProperties properties;
|
private final FileProperties properties;
|
||||||
|
|
||||||
public ConfigurerAdapter(FileProperties properties) {
|
public ConfigurerAdapter(FileProperties properties) {
|
||||||
|
|
@ -68,7 +79,7 @@ public class ConfigurerAdapter implements WebMvcConfigurer {
|
||||||
supportMediaTypeList.add(MediaType.APPLICATION_JSON);
|
supportMediaTypeList.add(MediaType.APPLICATION_JSON);
|
||||||
FastJsonConfig config = new FastJsonConfig();
|
FastJsonConfig config = new FastJsonConfig();
|
||||||
config.setDateFormat("yyyy-MM-dd HH:mm:ss");
|
config.setDateFormat("yyyy-MM-dd HH:mm:ss");
|
||||||
config.setSerializerFeatures(SerializerFeature.WriteMapNullValue, SerializerFeature.WriteDateUseDateFormat);
|
config.setSerializerFeatures(SerializerFeature.WriteMapNullValue);
|
||||||
converter.setFastJsonConfig(config);
|
converter.setFastJsonConfig(config);
|
||||||
converter.setSupportedMediaTypes(supportMediaTypeList);
|
converter.setSupportedMediaTypes(supportMediaTypeList);
|
||||||
converter.setDefaultCharset(StandardCharsets.UTF_8);
|
converter.setDefaultCharset(StandardCharsets.UTF_8);
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@ import java.util.Collections;
|
||||||
|
|
||||||
|
|
||||||
@Configuration
|
@Configuration
|
||||||
|
@MapperScan("cn.ysk.cashier.mybatis.mapper")
|
||||||
@EnableTransactionManagement
|
@EnableTransactionManagement
|
||||||
public class MybatisPlusConfig {
|
public class MybatisPlusConfig {
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -13,10 +13,6 @@ public class RabbitConfig {
|
||||||
public static final String EXCHANGE_STOCK_RECORD = "exchange.stock.record";
|
public static final String EXCHANGE_STOCK_RECORD = "exchange.stock.record";
|
||||||
public static final String ROUTING_STOCK_RECORD_SALE = "routing.stock.record.sale";
|
public static final String ROUTING_STOCK_RECORD_SALE = "routing.stock.record.sale";
|
||||||
|
|
||||||
public static final String QUEUE_STOCK_RECORD = "queue.stock.record";
|
|
||||||
public static final String ROUTING_STOCK_RECORD= "routing.stock.record";
|
|
||||||
|
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
Queue stockRecordSaleQueue() {
|
Queue stockRecordSaleQueue() {
|
||||||
return new Queue(QUEUE_STOCK_RECORD_SALE);
|
return new Queue(QUEUE_STOCK_RECORD_SALE);
|
||||||
|
|
@ -31,14 +27,4 @@ public class RabbitConfig {
|
||||||
Binding binding(Queue stockRecordSaleQueue, DirectExchange stockRecordExchange) {
|
Binding binding(Queue stockRecordSaleQueue, DirectExchange stockRecordExchange) {
|
||||||
return BindingBuilder.bind(stockRecordSaleQueue).to(stockRecordExchange).with(ROUTING_STOCK_RECORD_SALE);
|
return BindingBuilder.bind(stockRecordSaleQueue).to(stockRecordExchange).with(ROUTING_STOCK_RECORD_SALE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
|
||||||
Queue stockRecordSaleQueue2() {
|
|
||||||
return new Queue(QUEUE_STOCK_RECORD);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Bean
|
|
||||||
Binding binding2(Queue stockRecordSaleQueue2, DirectExchange stockRecordExchange) {
|
|
||||||
return BindingBuilder.bind(stockRecordSaleQueue2).to(stockRecordExchange).with(ROUTING_STOCK_RECORD);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,25 +0,0 @@
|
||||||
package cn.ysk.cashier.config;
|
|
||||||
|
|
||||||
|
|
||||||
import org.springframework.context.annotation.Bean;
|
|
||||||
import org.springframework.context.annotation.Configuration;
|
|
||||||
import org.springframework.http.client.ClientHttpRequestFactory;
|
|
||||||
import org.springframework.http.client.SimpleClientHttpRequestFactory;
|
|
||||||
import org.springframework.web.client.RestTemplate;
|
|
||||||
|
|
||||||
@Configuration//加上这个注解作用,可以被Spring扫描
|
|
||||||
public class RestTemplateConfig {
|
|
||||||
@Bean
|
|
||||||
public RestTemplate restTemplate(ClientHttpRequestFactory factory){
|
|
||||||
return new RestTemplate(factory);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Bean
|
|
||||||
public ClientHttpRequestFactory simpleClientHttpRequestFactory(){
|
|
||||||
SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
|
|
||||||
factory.setReadTimeout(500000);//单位为ms
|
|
||||||
factory.setConnectTimeout(500000);//单位为ms
|
|
||||||
return factory;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.config;
|
package cn.ysk.cashier.config;
|
||||||
|
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
|
|
|
||||||
|
|
@ -4,10 +4,8 @@ import com.alibaba.fastjson.serializer.SerializerFeature;
|
||||||
import com.alibaba.fastjson.support.config.FastJsonConfig;
|
import com.alibaba.fastjson.support.config.FastJsonConfig;
|
||||||
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
|
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import org.springframework.data.web.PageableHandlerMethodArgumentResolver;
|
|
||||||
import org.springframework.http.MediaType;
|
import org.springframework.http.MediaType;
|
||||||
import org.springframework.http.converter.HttpMessageConverter;
|
import org.springframework.http.converter.HttpMessageConverter;
|
||||||
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
|
|
||||||
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
|
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
|
||||||
|
|
||||||
import java.nio.charset.Charset;
|
import java.nio.charset.Charset;
|
||||||
|
|
@ -19,7 +17,6 @@ public class fastJsonConfig extends WebMvcConfigurationSupport {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 使用阿里 fastjson 作为JSON MessageConverter
|
* 使用阿里 fastjson 作为JSON MessageConverter
|
||||||
*
|
|
||||||
* @param converters
|
* @param converters
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -48,10 +45,4 @@ public class fastJsonConfig extends WebMvcConfigurationSupport {
|
||||||
converter.setSupportedMediaTypes(mediaTypeList);
|
converter.setSupportedMediaTypes(mediaTypeList);
|
||||||
converters.add(converter);
|
converters.add(converter);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
|
|
||||||
// 注册Spring data jpa pageable的参数分解器
|
|
||||||
argumentResolvers.add(new PageableHandlerMethodArgumentResolver());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.config.security.config;
|
package cn.ysk.cashier.config.security.config;
|
||||||
|
|
||||||
import cn.ysk.cashier.config.security.security.JwtAccessDeniedHandler;
|
import cn.ysk.cashier.config.security.security.JwtAccessDeniedHandler;
|
||||||
|
|
@ -124,7 +138,6 @@ public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {
|
||||||
.antMatchers(anonymousUrls.get(RequestMethodEnum.ALL.getType()).toArray(new String[0])).permitAll()
|
.antMatchers(anonymousUrls.get(RequestMethodEnum.ALL.getType()).toArray(new String[0])).permitAll()
|
||||||
.antMatchers("/auth/appletsLogin").permitAll()
|
.antMatchers("/auth/appletsLogin").permitAll()
|
||||||
.antMatchers("/api/tbHandover").permitAll()
|
.antMatchers("/api/tbHandover").permitAll()
|
||||||
.antMatchers("/notify/fstPay").permitAll()
|
|
||||||
// 所有请求都需要认证
|
// 所有请求都需要认证
|
||||||
.anyRequest().authenticated()
|
.anyRequest().authenticated()
|
||||||
.and().apply(securityConfigurerAdapter());
|
.and().apply(securityConfigurerAdapter());
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.config.security.config.bean;
|
package cn.ysk.cashier.config.security.config.bean;
|
||||||
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.config.security.rest;
|
package cn.ysk.cashier.config.security.rest;
|
||||||
|
|
||||||
import cn.hutool.core.util.IdUtil;
|
import cn.hutool.core.util.IdUtil;
|
||||||
|
|
@ -29,7 +43,6 @@ import cn.ysk.cashier.config.security.service.dto.JwtUserDto;
|
||||||
import cn.ysk.cashier.config.security.service.OnlineUserService;
|
import cn.ysk.cashier.config.security.service.OnlineUserService;
|
||||||
import cn.ysk.cashier.pojo.shop.TbShopInfo;
|
import cn.ysk.cashier.pojo.shop.TbShopInfo;
|
||||||
import cn.ysk.cashier.repository.shop.TbShopInfoRepository;
|
import cn.ysk.cashier.repository.shop.TbShopInfoRepository;
|
||||||
import org.springframework.data.repository.query.Param;
|
|
||||||
import org.springframework.http.HttpStatus;
|
import org.springframework.http.HttpStatus;
|
||||||
import org.springframework.http.ResponseEntity;
|
import org.springframework.http.ResponseEntity;
|
||||||
import org.springframework.security.access.prepost.PreAuthorize;
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
|
|
@ -137,7 +150,6 @@ public class AuthorizationController {
|
||||||
put("user", jwtUserDto);
|
put("user", jwtUserDto);
|
||||||
if (byAccount != null) {
|
if (byAccount != null) {
|
||||||
put("shopId", byAccount.getId());
|
put("shopId", byAccount.getId());
|
||||||
put("mainId", byAccount.getId());
|
|
||||||
put("loginType", org.apache.commons.lang3.StringUtils.isNotBlank(authUser.getLoginType())?authUser.getLoginType():"merchant");
|
put("loginType", org.apache.commons.lang3.StringUtils.isNotBlank(authUser.getLoginType())?authUser.getLoginType():"merchant");
|
||||||
put("shopName", byAccount.getShopName());
|
put("shopName", byAccount.getShopName());
|
||||||
put("logo", byAccount.getLogo());
|
put("logo", byAccount.getLogo());
|
||||||
|
|
@ -220,14 +232,6 @@ public class AuthorizationController {
|
||||||
return ResponseEntity.ok(imgResult);
|
return ResponseEntity.ok(imgResult);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ApiOperation("设置验证码")
|
|
||||||
@AnonymousGetMapping(value = "/setCode")
|
|
||||||
public ResponseEntity<Object> setCode(@RequestParam String uuid, @RequestParam String code) {
|
|
||||||
// 保存
|
|
||||||
redisUtils.set(uuid, code, loginProperties.getLoginCode().getExpiration(), TimeUnit.MINUTES);
|
|
||||||
return ResponseEntity.ok("ok");
|
|
||||||
}
|
|
||||||
|
|
||||||
@ApiOperation("退出登录")
|
@ApiOperation("退出登录")
|
||||||
@AnonymousDeleteMapping(value = "/logout")
|
@AnonymousDeleteMapping(value = "/logout")
|
||||||
public ResponseEntity<Object> logout(HttpServletRequest request) {
|
public ResponseEntity<Object> logout(HttpServletRequest request) {
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.config.security.rest;
|
package cn.ysk.cashier.config.security.rest;
|
||||||
|
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.config.security.security;
|
package cn.ysk.cashier.config.security.security;
|
||||||
|
|
||||||
import org.springframework.security.access.AccessDeniedException;
|
import org.springframework.security.access.AccessDeniedException;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.config.security.security;
|
package cn.ysk.cashier.config.security.security;
|
||||||
|
|
||||||
import org.springframework.security.core.AuthenticationException;
|
import org.springframework.security.core.AuthenticationException;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.config.security.security;
|
package cn.ysk.cashier.config.security.security;
|
||||||
|
|
||||||
import cn.ysk.cashier.config.security.config.bean.SecurityProperties;
|
import cn.ysk.cashier.config.security.config.bean.SecurityProperties;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.config.security.security;
|
package cn.ysk.cashier.config.security.security;
|
||||||
|
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.config.security.security;
|
package cn.ysk.cashier.config.security.security;
|
||||||
|
|
||||||
import cn.hutool.core.date.DateField;
|
import cn.hutool.core.date.DateField;
|
||||||
|
|
@ -73,16 +87,6 @@ public class TokenProvider implements InitializingBean {
|
||||||
.compact();
|
.compact();
|
||||||
}
|
}
|
||||||
|
|
||||||
public String createToken(String name,String shopId) {
|
|
||||||
return jwtBuilder
|
|
||||||
// 加入ID确保生成的 Token 都不一致
|
|
||||||
.setId(IdUtil.simpleUUID())
|
|
||||||
.claim(AUTHORITIES_KEY, name)
|
|
||||||
.claim("shopId",shopId)
|
|
||||||
.setSubject(name)
|
|
||||||
.compact();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 依据Token 获取鉴权信息
|
* 依据Token 获取鉴权信息
|
||||||
*
|
*
|
||||||
|
|
@ -101,7 +105,6 @@ public class TokenProvider implements InitializingBean {
|
||||||
.getBody();
|
.getBody();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param token 需要检查的token
|
* @param token 需要检查的token
|
||||||
*/
|
*/
|
||||||
|
|
@ -134,17 +137,4 @@ public class TokenProvider implements InitializingBean {
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public String getSubject() {
|
|
||||||
HttpServletRequest request = SpringContextHolder.getRequest();
|
|
||||||
final String requestHeader = request.getHeader(properties.getHeader());
|
|
||||||
if (requestHeader != null && requestHeader.startsWith(properties.getTokenStartWith())) {
|
|
||||||
Claims claims = jwtParser
|
|
||||||
.parseClaimsJws(requestHeader.substring(7))
|
|
||||||
.getBody();
|
|
||||||
return claims.getSubject();
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.config.security.service;
|
package cn.ysk.cashier.config.security.service;
|
||||||
|
|
||||||
import cn.ysk.cashier.config.security.config.bean.SecurityProperties;
|
import cn.ysk.cashier.config.security.config.bean.SecurityProperties;
|
||||||
|
|
@ -50,19 +64,6 @@ public class OnlineUserService {
|
||||||
redisUtils.set(properties.getOnlineKey() + token, onlineUserDto, properties.getTokenValidityInSeconds()/1000);
|
redisUtils.set(properties.getOnlineKey() + token, onlineUserDto, properties.getTokenValidityInSeconds()/1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void save(String username, String nickName, String token, HttpServletRequest request,Integer shopId){
|
|
||||||
String ip = StringUtils.getIp(request);
|
|
||||||
String browser = StringUtils.getBrowser(request);
|
|
||||||
String address = StringUtils.getCityInfo(ip);
|
|
||||||
OnlineUserDto onlineUserDto = null;
|
|
||||||
try {
|
|
||||||
onlineUserDto = new OnlineUserDto(shopId,username, nickName, null, browser , ip, address, EncryptUtils.desEncrypt(token), new Date());
|
|
||||||
} catch (Exception e) {
|
|
||||||
log.error(e.getMessage(),e);
|
|
||||||
}
|
|
||||||
redisUtils.set(properties.getOnlineKey() + token, onlineUserDto, properties.getTokenValidityInSeconds()/1000);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询全部数据
|
* 查询全部数据
|
||||||
* @param filter /
|
* @param filter /
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.config.security.service;
|
package cn.ysk.cashier.config.security.service;
|
||||||
|
|
||||||
import cn.hutool.core.util.RandomUtil;
|
import cn.hutool.core.util.RandomUtil;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.config.security.service;
|
package cn.ysk.cashier.config.security.service;
|
||||||
|
|
||||||
import cn.ysk.cashier.config.security.service.dto.JwtUserDto;
|
import cn.ysk.cashier.config.security.service.dto.JwtUserDto;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.config.security.service.dto;
|
package cn.ysk.cashier.config.security.service.dto;
|
||||||
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.config.security.service.dto;
|
package cn.ysk.cashier.config.security.service.dto;
|
||||||
|
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.config.security.service.dto;
|
package cn.ysk.cashier.config.security.service.dto;
|
||||||
|
|
||||||
import cn.ysk.cashier.system.service.dto.UserLoginDto;
|
import cn.ysk.cashier.system.service.dto.UserLoginDto;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.config.security.service.dto;
|
package cn.ysk.cashier.config.security.service.dto;
|
||||||
|
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.config.thread;
|
package cn.ysk.cashier.config.thread;
|
||||||
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.config.thread;
|
package cn.ysk.cashier.config.thread;
|
||||||
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.config.thread;
|
package cn.ysk.cashier.config.thread;
|
||||||
|
|
||||||
import cn.ysk.cashier.utils.StringUtils;
|
import cn.ysk.cashier.utils.StringUtils;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019-2020 Zheng Jie
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package cn.ysk.cashier.config.thread;
|
package cn.ysk.cashier.config.thread;
|
||||||
|
|
||||||
import java.util.concurrent.ArrayBlockingQueue;
|
import java.util.concurrent.ArrayBlockingQueue;
|
||||||
|
|
|
||||||
|
|
@ -1,57 +0,0 @@
|
||||||
package cn.ysk.cashier.cons;
|
|
||||||
|
|
||||||
public interface RedisConstant {
|
|
||||||
//在线用户
|
|
||||||
String ONLINE_USER = "ONLINE:USER";
|
|
||||||
String CART = "CZG:CART:";
|
|
||||||
|
|
||||||
public final Object PRODUCT = "PRODUCT:";
|
|
||||||
|
|
||||||
public final String OUT_NUMBER="ORDER:NUMBER:";
|
|
||||||
|
|
||||||
public static final String ORDER_MESSAGE="ORDER:MESSAGE:";
|
|
||||||
public static final String ORDER_PRODUCT_NUM = "ORDER_NUM:";
|
|
||||||
public static final String ORDER_CART_EXISTS = "ORDER_CART_EXISTS:";
|
|
||||||
String CURRENT_TABLE_ORDER = "CURRENT_TABLE_ORDER:";
|
|
||||||
|
|
||||||
public static String TABLE_CART = "TABLE:CART:";
|
|
||||||
String ADD_TABLE_CART_LOCK = "ADD_TABLE_CART";
|
|
||||||
String PC_OUT_NUMBER = "PC_OUT_NUMBER:";
|
|
||||||
|
|
||||||
String LOCK_KEY = "LOCK:";
|
|
||||||
String CREATE_ORDER = "CREATE_ORDER";
|
|
||||||
|
|
||||||
// 排队取号全局号码
|
|
||||||
String TABLE_CALL_NUMBER = "TABLE_CALL_NUMBER:";
|
|
||||||
|
|
||||||
// 选择人数锁
|
|
||||||
String CHOSE_TABLE_COUNT = "CHOSE_TABLE_COUNT";
|
|
||||||
|
|
||||||
String MASTER_ID = "SHOP:CODE:USER:pc:";
|
|
||||||
|
|
||||||
static String getCurrentOrderKey(String tableId, String shopId) {
|
|
||||||
return CURRENT_TABLE_ORDER + shopId + ":" + tableId;
|
|
||||||
}
|
|
||||||
|
|
||||||
static String getTableCartKey(String tableId, String shopId) {
|
|
||||||
return TABLE_CART + tableId + "-" + shopId;
|
|
||||||
}
|
|
||||||
|
|
||||||
static String getLockKey(String sign, Object... args) {
|
|
||||||
StringBuilder key = new StringBuilder(LOCK_KEY + ":" + sign + ":");
|
|
||||||
for (Object arg : args) {
|
|
||||||
if (arg != null) {
|
|
||||||
key.append(":").append(arg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return key.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
static String getTableCallNumKey(Integer shopId, Integer callTableId) {
|
|
||||||
return TABLE_CALL_NUMBER + shopId + ":" + callTableId;
|
|
||||||
}
|
|
||||||
|
|
||||||
static String getMasterIdKey(Integer shopId, String day, String tableId) {
|
|
||||||
return MASTER_ID + shopId + ":" + day + ":" + tableId;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,188 +0,0 @@
|
||||||
package cn.ysk.cashier.cons;
|
|
||||||
|
|
||||||
import lombok.Getter;
|
|
||||||
|
|
||||||
import java.util.Objects;
|
|
||||||
|
|
||||||
public interface TableConstant {
|
|
||||||
|
|
||||||
String CART_SEAT_ID = "-999";
|
|
||||||
|
|
||||||
class ShopTable {
|
|
||||||
@Getter
|
|
||||||
public enum State {
|
|
||||||
IDLE("idle"), CLOSED("closed"), PAYING("paying"), PENDING("pending"), USING("using"), CLEANING("cleaning");
|
|
||||||
private final String value;
|
|
||||||
|
|
||||||
State(String value) {
|
|
||||||
this.value = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class CashierCart {
|
|
||||||
public static final String ID = "-999";
|
|
||||||
|
|
||||||
@Getter
|
|
||||||
public enum Status {
|
|
||||||
REFUNDING("refunding"), REFUND("refund"), CLOSED("closed"), CREATE("create"),
|
|
||||||
UNPAID("unpaid"), PAYING("paying"), RETURN("return"), CANCEL("cancel");
|
|
||||||
private final String value;
|
|
||||||
Status(String value) {
|
|
||||||
this.value = value;
|
|
||||||
}
|
|
||||||
public boolean equalsVals(String value) {
|
|
||||||
return this.value.equals(value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Getter
|
|
||||||
public enum UseType {
|
|
||||||
TAKEOUT("takeout"),
|
|
||||||
DINE_IN_AFTER("dine-in-after"),
|
|
||||||
DINE_IN_BEFORE("dine-in-before");
|
|
||||||
private final String value;
|
|
||||||
|
|
||||||
UseType(String value) {
|
|
||||||
this.value = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean equalsVals(String value) {
|
|
||||||
return this.value.equals(value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class OrderInfo {
|
|
||||||
@Getter
|
|
||||||
public enum Status {
|
|
||||||
REFUNDING("refunding"), REFUND("refund"), CLOSED("closed"), CREATE("create"),
|
|
||||||
UNPAID("unpaid"), PAYING("paying"), RETURN("return"), FINAL("final");
|
|
||||||
private final String value;
|
|
||||||
|
|
||||||
Status(String value) {
|
|
||||||
this.value = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean equalsVals(String value) {
|
|
||||||
return this.value.equals(value);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Getter
|
|
||||||
public enum UseType {
|
|
||||||
TAKEOUT("takeout"),
|
|
||||||
DINE_IN_AFTER("dine-in-after"),
|
|
||||||
DINE_IN_BEFORE("dine-in-before"), NONE_TABLE("dine-in");
|
|
||||||
private final String value;
|
|
||||||
|
|
||||||
UseType(String value) {
|
|
||||||
this.value = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean equalsVals(String value) {
|
|
||||||
return this.value.equals(value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class FreeDineRecord {
|
|
||||||
@Getter
|
|
||||||
public enum State {
|
|
||||||
WAIT_PAY(0),
|
|
||||||
SUCCESS_PAY(1),
|
|
||||||
FAIL_PAY(2);
|
|
||||||
private final Integer value;
|
|
||||||
|
|
||||||
State(Integer value) {
|
|
||||||
this.value = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Getter
|
|
||||||
public enum UseType {
|
|
||||||
TAKEOUT("takeout"),
|
|
||||||
DINE_IN_AFTER("dine-in-after"),
|
|
||||||
DINE_IN_BEFORE("dine-in-before");
|
|
||||||
private final String value;
|
|
||||||
|
|
||||||
UseType(String value) {
|
|
||||||
this.value = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean equalsVals(String value) {
|
|
||||||
return this.value.equals(value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class ShopInfo {
|
|
||||||
@Getter
|
|
||||||
public enum EatModel {
|
|
||||||
TAKEOUT("takeout"),
|
|
||||||
DINE_IN("dine-in");
|
|
||||||
private final String value;
|
|
||||||
|
|
||||||
EatModel(String value) {
|
|
||||||
this.value = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean equalsVals(String value) {
|
|
||||||
return this.value.equals(value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class MemberIn {
|
|
||||||
@Getter
|
|
||||||
public enum Type {
|
|
||||||
NORMAL(0),
|
|
||||||
FREE_DINE(1);
|
|
||||||
private final Integer value;
|
|
||||||
|
|
||||||
Type(Integer value) {
|
|
||||||
this.value = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean equalsVals(Integer value) {
|
|
||||||
return Objects.equals(this.value, value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class ActivateOutRecord {
|
|
||||||
@Getter
|
|
||||||
public enum Type {
|
|
||||||
// 满减
|
|
||||||
FULL_REDUCTION(1),
|
|
||||||
// 商品
|
|
||||||
PRODUCT(2);
|
|
||||||
private final Integer value;
|
|
||||||
|
|
||||||
Type(Integer value) {
|
|
||||||
this.value = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean equalsVals(Integer value) {
|
|
||||||
return Objects.equals(this.value, value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@Getter
|
|
||||||
public enum Status {
|
|
||||||
CREATE("create"),
|
|
||||||
CANCEL("cancel"),
|
|
||||||
// 商品
|
|
||||||
CLOSED("closed");
|
|
||||||
private final String value;
|
|
||||||
|
|
||||||
Status(String value) {
|
|
||||||
this.value = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean equalsVals(String value) {
|
|
||||||
return this.value.equals(value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue