Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
S
supplier
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
王宇航
supplier
Commits
38f09a7b
Commit
38f09a7b
authored
Feb 24, 2020
by
王宇航
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
添加打印機失敗問題
parent
e799c8b5
Hide whitespace changes
Inline
Side-by-side
Showing
51 changed files
with
1671 additions
and
269 deletions
+1671
-269
chart/src/main/java/com/daivd/chart/provider/component/tip/BaseBubbleTip.java
+37
-35
chart/src/main/java/com/daivd/chart/provider/component/tip/MultiLineBubbleTip.java
+11
-11
main/build.gradle
+2
-2
main/src/main/debug/AndroidManifest.xml
+2
-1
main/src/main/java/com/gingersoft/gsa/cloud/main/di/component/BusinessReportComponent.java
+42
-0
main/src/main/java/com/gingersoft/gsa/cloud/main/di/component/PaymentMethodReportComponent.java
+42
-0
main/src/main/java/com/gingersoft/gsa/cloud/main/di/component/ReportComponent.java
+5
-5
main/src/main/java/com/gingersoft/gsa/cloud/main/di/component/SalesComponent.java
+42
-0
main/src/main/java/com/gingersoft/gsa/cloud/main/di/module/BusinessReportModule.java
+31
-0
main/src/main/java/com/gingersoft/gsa/cloud/main/di/module/PaymentMethodReportModule.java
+31
-0
main/src/main/java/com/gingersoft/gsa/cloud/main/di/module/ReportModule.java
+2
-2
main/src/main/java/com/gingersoft/gsa/cloud/main/di/module/SalesModule.java
+31
-0
main/src/main/java/com/gingersoft/gsa/cloud/main/mvp/contract/BusinessReportContract.java
+29
-0
main/src/main/java/com/gingersoft/gsa/cloud/main/mvp/contract/PaymentMethodReportContract.java
+29
-0
main/src/main/java/com/gingersoft/gsa/cloud/main/mvp/contract/ReportContract.java
+1
-1
main/src/main/java/com/gingersoft/gsa/cloud/main/mvp/contract/SalesContract.java
+29
-0
main/src/main/java/com/gingersoft/gsa/cloud/main/mvp/model/BusinessReportModel.java
+47
-0
main/src/main/java/com/gingersoft/gsa/cloud/main/mvp/model/PaymentMethodReportModel.java
+47
-0
main/src/main/java/com/gingersoft/gsa/cloud/main/mvp/model/ReportModel.java
+3
-3
main/src/main/java/com/gingersoft/gsa/cloud/main/mvp/model/SalesModel.java
+47
-0
main/src/main/java/com/gingersoft/gsa/cloud/main/mvp/presenter/BusinessReportPresenter.java
+52
-0
main/src/main/java/com/gingersoft/gsa/cloud/main/mvp/presenter/MainTopPresenter.java
+9
-7
main/src/main/java/com/gingersoft/gsa/cloud/main/mvp/presenter/PaymentMethodReportPresenter.java
+52
-0
main/src/main/java/com/gingersoft/gsa/cloud/main/mvp/presenter/ReportPresenter.java
+6
-7
main/src/main/java/com/gingersoft/gsa/cloud/main/mvp/presenter/SalesPresenter.java
+52
-0
main/src/main/java/com/gingersoft/gsa/cloud/main/mvp/ui/activity/MainActivity.java
+2
-2
main/src/main/java/com/gingersoft/gsa/cloud/main/mvp/ui/activity/NewMainActivity.java
+3
-3
main/src/main/java/com/gingersoft/gsa/cloud/main/mvp/ui/activity/ReportActivity.java
+208
-0
main/src/main/java/com/gingersoft/gsa/cloud/main/mvp/ui/fragment/BusinessReportFragment.java
+142
-0
main/src/main/java/com/gingersoft/gsa/cloud/main/mvp/ui/fragment/MainTopFragment.java
+29
-20
main/src/main/java/com/gingersoft/gsa/cloud/main/mvp/ui/fragment/PaymentMethodReportFragment.java
+135
-0
main/src/main/java/com/gingersoft/gsa/cloud/main/mvp/ui/fragment/SalesFragment.java
+54
-14
main/src/main/java/com/gingersoft/gsa/cloud/main/mvp/ui/view/CustomMarkView.java
+22
-17
main/src/main/java/com/gingersoft/gsa/cloud/main/mvp/ui/view/SlidingMenu.java
+2
-3
main/src/main/res/drawable/tablayout_indicator.xml
+18
-0
main/src/main/res/layout/activity_report.xml
+30
-0
main/src/main/res/layout/fragment_business_report.xml
+103
-0
main/src/main/res/layout/fragment_main_top.xml
+0
-2
main/src/main/res/layout/fragment_payment_method_report.xml
+9
-0
main/src/main/res/layout/fragment_sales.xml
+9
-0
print-module/src/main/java/com/joe/print/mvp/print/Print.java
+91
-91
public-base/build.gradle
+3
-0
public-base/src/main/java/com/gingersoft/gsa/cloud/database/bean/PrinterDeviceBean.java
+0
-7
public-base/src/main/java/com/gingersoft/gsa/cloud/ui/adapter/TabFragmentAdapter.java
+37
-0
public-base/src/main/java/com/gingersoft/gsa/cloud/ui/view/utils/ShadowUtil.java
+24
-0
public-base/src/main/res/layout/include_layout_line.xml
+5
-0
public-base/src/main/res/layout/layout_table_item.xml
+17
-0
public-base/src/main/res/values/colors.xml
+1
-0
table-mode/src/main/java/com/gingersoft/gsa/cloud/table/mvp/presenter/MealStandPresenter.java
+3
-16
table-mode/src/main/java/com/gingersoft/gsa/cloud/table/mvp/presenter/OrderContentPresenter.java
+32
-4
user-login/src/main/java/com/gingersoft/gsa/cloud/user/login/mvp/ui/activity/LoginActivity.java
+11
-16
No files found.
chart/src/main/java/com/daivd/chart/provider/component/tip/BaseBubbleTip.java
View file @
38f09a7b
...
...
@@ -4,7 +4,6 @@ import android.content.Context;
import
android.graphics.Bitmap
;
import
android.graphics.BitmapFactory
;
import
android.graphics.Canvas
;
import
android.graphics.Color
;
import
android.graphics.NinePatch
;
import
android.graphics.Paint
;
import
android.graphics.PorterDuff
;
...
...
@@ -19,41 +18,43 @@ import com.daivd.chart.utils.DensityUtils;
* 气泡提示
*/
public
abstract
class
BaseBubbleTip
<
C
,
S
>
implements
ITip
<
C
,
S
>
{
public
abstract
class
BaseBubbleTip
<
C
,
S
>
implements
ITip
<
C
,
S
>
{
public
static
final
int
INVALID
=
-
1
;
private
Rect
tipRect
;
private
Paint
paint
;
private
int
verticalPadding
;
private
int
horizontalPadding
;
private
Bitmap
triangleBitmap
;
//
private Bitmap triangleBitmap;
private
NinePatch
ninePatch
;
private
boolean
isReversal
=
false
;
protected
int
deviation
;
private
float
alpha
;
private
int
colorFilter
=
INVALID
;
public
BaseBubbleTip
(
Context
context
,
int
backgroundDrawableID
,
int
triangleDrawableID
,
Paint
paint
){
public
BaseBubbleTip
(
Context
context
,
int
backgroundDrawableID
,
int
triangleDrawableID
,
Paint
paint
)
{
tipRect
=
new
Rect
();
this
.
paint
=
paint
;
triangleBitmap
=
Bitmap
.
createBitmap
(
BitmapFactory
.
decodeResource
(
context
.
getResources
(),
triangleDrawableID
));
if
(
ninePatch
==
null
)
{
//
triangleBitmap = Bitmap.createBitmap(BitmapFactory.decodeResource(context.getResources(), triangleDrawableID));
if
(
ninePatch
==
null
)
{
Bitmap
bmp_9
=
BitmapFactory
.
decodeResource
(
context
.
getResources
(),
backgroundDrawableID
);
ninePatch
=
new
NinePatch
(
bmp_9
,
bmp_9
.
getNinePatchChunk
(),
null
);
}
verticalPadding
=
DensityUtils
.
dp2px
(
context
,
5
);
verticalPadding
=
DensityUtils
.
dp2px
(
context
,
5
);
horizontalPadding
=
verticalPadding
;
deviation
=
DensityUtils
.
dp2px
(
context
,
5
);
deviation
=
DensityUtils
.
dp2px
(
context
,
5
);
}
public
void
drawTip
(
Canvas
canvas
,
float
x
,
float
y
,
Rect
rect
,
C
c
,
int
position
)
{
if
(
isShowTip
(
c
,
position
))
{
S
content
=
format
(
c
,
position
);
int
triangleWidth
=
triangleBitmap
.
getWidth
();
int
triangleHeight
=
triangleBitmap
.
getHeight
();
public
void
drawTip
(
Canvas
canvas
,
float
x
,
float
y
,
Rect
rect
,
C
c
,
int
position
)
{
if
(
isShowTip
(
c
,
position
))
{
S
content
=
format
(
c
,
position
);
// int triangleWidth = triangleBitmap.getWidth();
// int triangleHeight = triangleBitmap.getHeight();
int
triangleWidth
=
0
;
int
triangleHeight
=
0
;
int
textWidth
=
getTextWidth
(
content
);
int
textHeight
=
getTextHeight
(
content
);
int
w
=
textWidth
+
horizontalPadding
*
2
;
...
...
@@ -63,10 +64,9 @@ public abstract class BaseBubbleTip<C,S> implements ITip<C,S>{
tipRect
.
bottom
=
(
int
)
y
-
triangleHeight
+
triangleWidth
/
8
;
tipRect
.
top
=
tipRect
.
bottom
-
h
;
int
tranX
=
0
;
if
(
x
>
rect
.
left
&&
x
<
rect
.
right
)
{
if
(
x
>
rect
.
left
&&
x
<
rect
.
right
)
{
if
(
tipRect
.
left
<
rect
.
left
)
{
tranX
=
rect
.
left
-
tipRect
.
left
-
triangleWidth
/
2
;
}
else
if
(
tipRect
.
right
>
rect
.
right
)
{
tranX
=
rect
.
right
-
tipRect
.
right
+
triangleWidth
/
2
;
}
...
...
@@ -89,52 +89,54 @@ public abstract class BaseBubbleTip<C,S> implements ITip<C,S>{
public
abstract
int
getTextWidth
(
S
content
);
public
abstract
void
drawText
(
Canvas
canvas
,
Rect
tipRect
,
S
content
,
int
textWidth
,
int
textHeight
,
Paint
paint
);
public
abstract
void
drawText
(
Canvas
canvas
,
Rect
tipRect
,
S
content
,
int
textWidth
,
int
textHeight
,
Paint
paint
);
private
void
showTop
(
Canvas
canvas
,
float
x
,
float
y
,
S
content
,
int
textWidth
,
int
textHeight
,
int
tranX
)
{
private
void
showTop
(
Canvas
canvas
,
float
x
,
float
y
,
S
content
,
int
textWidth
,
int
textHeight
,
int
tranX
)
{
canvas
.
save
();
int
triangleWidth
=
triangleBitmap
.
getWidth
();
int
triangleHeight
=
triangleBitmap
.
getHeight
();
// int triangleWidth = triangleBitmap.getWidth();
// int triangleHeight = triangleBitmap.getHeight();
int
triangleWidth
=
0
;
int
triangleHeight
=
0
;
startColorFilter
();
// paint.setShadowLayer(40, 10, 50, Color.BLACK);
canvas
.
drawBitmap
(
triangleBitmap
,
x
-
triangleWidth
/
2
,
y
-
triangleHeight
,
paint
);
// canvas.drawBitmap(triangleBitmap, x - triangleWidth /
2,
// y - triangleHeight,
paint);
// paint.clearShadowLayer();
canvas
.
translate
(
tranX
,
0
);
canvas
.
translate
(
tranX
,
0
);
ninePatch
.
draw
(
canvas
,
tipRect
);
clearColorFilter
();
drawText
(
canvas
,
tipRect
,
content
,
textWidth
,
textHeight
,
paint
);
drawText
(
canvas
,
tipRect
,
content
,
textWidth
,
textHeight
,
paint
);
canvas
.
restore
();
}
private
void
showBottom
(
Canvas
canvas
,
float
x
,
float
y
,
S
content
,
int
textWidth
,
int
textHeight
,
int
tranX
)
{
private
void
showBottom
(
Canvas
canvas
,
float
x
,
float
y
,
S
content
,
int
textWidth
,
int
textHeight
,
int
tranX
)
{
canvas
.
save
();
int
triangleWidth
=
triangleBitmap
.
getWidth
();
int
triangleHeight
=
triangleBitmap
.
getHeight
();
canvas
.
rotate
(
180
,
x
,
y
);
//
int triangleWidth = triangleBitmap.getWidth();
//
int triangleHeight = triangleBitmap.getHeight();
canvas
.
rotate
(
180
,
x
,
y
);
startColorFilter
();
canvas
.
drawBitmap
(
triangleBitmap
,
x
-
triangleWidth
/
2
,
y
-
triangleHeight
,
paint
);
canvas
.
translate
(-
tranX
,
0
);
// canvas.drawBitmap(triangleBitmap, x - triangleWidth /
2,
// y - triangleHeight,
paint);
canvas
.
translate
(-
tranX
,
0
);
ninePatch
.
draw
(
canvas
,
tipRect
);
clearColorFilter
();
paint
.
setColorFilter
(
null
);
canvas
.
rotate
(
180
,
tipRect
.
centerX
(),
tipRect
.
centerY
());
drawText
(
canvas
,
tipRect
,
content
,
textWidth
,
textHeight
,
paint
);
drawText
(
canvas
,
tipRect
,
content
,
textWidth
,
textHeight
,
paint
);
canvas
.
restore
();
}
private
void
startColorFilter
()
{
if
(
colorFilter
!=
INVALID
){
if
(
colorFilter
!=
INVALID
)
{
paint
.
setColorFilter
(
new
PorterDuffColorFilter
(
colorFilter
,
PorterDuff
.
Mode
.
SRC_IN
));
ninePatch
.
setPaint
(
paint
);
paint
.
setAlpha
((
int
)
(
alpha
*
255
));
paint
.
setAlpha
((
int
)
(
alpha
*
255
));
}
}
private
void
clearColorFilter
(){
private
void
clearColorFilter
()
{
if
(
colorFilter
!=
INVALID
)
{
if
(
colorFilter
!=
INVALID
)
{
paint
.
setColorFilter
(
null
);
paint
.
setAlpha
(
255
);
}
...
...
chart/src/main/java/com/daivd/chart/provider/component/tip/MultiLineBubbleTip.java
View file @
38f09a7b
...
...
@@ -13,29 +13,29 @@ import com.daivd.chart.utils.DensityUtils;
* 气泡提示
*/
public
abstract
class
MultiLineBubbleTip
<
C
>
extends
BaseBubbleTip
<
C
,
String
[]>
{
public
abstract
class
MultiLineBubbleTip
<
C
>
extends
BaseBubbleTip
<
C
,
String
[]>
{
private
int
lineSpacing
;
public
MultiLineBubbleTip
(
Context
context
,
int
backgroundDrawableID
,
int
triangleDrawableID
,
Paint
paint
)
{
super
(
context
,
backgroundDrawableID
,
triangleDrawableID
,
paint
);
lineSpacing
=
DensityUtils
.
dp2px
(
context
,
3
);
lineSpacing
=
DensityUtils
.
dp2px
(
context
,
3
);
}
@Override
public
int
getTextHeight
(
String
[]
content
)
{
Paint
.
FontMetrics
fontMetrics
=
getPaint
().
getFontMetrics
();
int
textHeight
=
(
int
)
(
fontMetrics
.
bottom
-
fontMetrics
.
top
);
return
(
textHeight
+
lineSpacing
)*
content
.
length
-
lineSpacing
;
int
textHeight
=
(
int
)
(
fontMetrics
.
bottom
-
fontMetrics
.
top
);
return
(
textHeight
+
lineSpacing
)
*
content
.
length
-
lineSpacing
;
}
@Override
public
int
getTextWidth
(
String
[]
content
)
{
int
maxLength
=
0
;
for
(
int
i
=
0
;
i
<
content
.
length
;
i
++)
{
for
(
int
i
=
0
;
i
<
content
.
length
;
i
++)
{
int
length
=
(
int
)
getPaint
().
measureText
(
content
[
i
]);
if
(
length
>
maxLength
)
{
maxLength
=
length
;
maxLength
=
length
;
}
}
return
maxLength
;
...
...
@@ -43,12 +43,12 @@ public abstract class MultiLineBubbleTip<C> extends BaseBubbleTip<C,String[]>{
@Override
public
void
drawText
(
Canvas
canvas
,
Rect
tipRect
,
String
[]
content
,
int
textWidth
,
int
textHeight
,
Paint
paint
)
{
int
lineHeight
=
textHeight
/
content
.
length
;
for
(
int
i
=
0
;
i
<
content
.
length
;
i
++)
{
int
lineHeight
=
textHeight
/
content
.
length
;
for
(
int
i
=
0
;
i
<
content
.
length
;
i
++)
{
String
c
=
content
[
i
];
int
bottom
=
tipRect
.
top
+
getVerticalPadding
()+
lineHeight
+
(
lineHeight
)*
i
-
lineSpacing
-
deviation
/
2
;
int
left
=
tipRect
.
centerX
()
-
textWidth
/
2
;
canvas
.
drawText
(
c
,
left
,
bottom
,
paint
);
int
bottom
=
tipRect
.
top
+
getVerticalPadding
()
+
lineHeight
+
(
lineHeight
)
*
i
-
lineSpacing
-
deviation
/
2
;
int
left
=
tipRect
.
centerX
()
-
textWidth
/
2
;
canvas
.
drawText
(
c
,
left
,
bottom
,
paint
);
}
}
...
...
main/build.gradle
View file @
38f09a7b
...
...
@@ -51,9 +51,9 @@ dependencies {
testImplementation
rootProject
.
ext
.
dependencies
[
"canary-release"
]
testImplementation
rootProject
.
ext
.
dependencies
[
"junit"
]
implementation
rootProject
.
ext
.
dependencies
[
"BaseRecyclerViewAdapter"
]
implementation
'com.github.Liberuman:ShadowDrawable:0.1'
//陰影背景
implementation
'com.github.PhilJay:MPAndroidChart:v3.1.0'
//報表圖
implementation
project
(
':chart'
)
implementation
files
(
'libs/nineoldandroids-2.4.0.jar'
)
...
...
main/src/main/debug/AndroidManifest.xml
View file @
38f09a7b
...
...
@@ -18,7 +18,8 @@
android:roundIcon=
"@mipmap/ic_launcher_round"
android:supportsRtl=
"true"
android:theme=
"@style/AppTheme"
>
<activity
android:name=
".mvp.ui.activity.MainActivity"
/>
<activity
android:name=
".mvp.ui.activity.ReportActivity"
></activity>
<activity
android:name=
".mvp.ui.activity.MainActivity"
/>
<activity
android:name=
".mvp.ui.activity.NewMainActivity"
android:theme=
"@style/MainTheme"
>
...
...
main/src/main/java/com/gingersoft/gsa/cloud/main/di/component/BusinessReportComponent.java
0 → 100644
View file @
38f09a7b
package
com
.
gingersoft
.
gsa
.
cloud
.
main
.
di
.
component
;
import
dagger.BindsInstance
;
import
dagger.Component
;
import
com.jess.arms.di.component.AppComponent
;
import
com.gingersoft.gsa.cloud.main.di.module.BusinessReportModule
;
import
com.gingersoft.gsa.cloud.main.mvp.contract.BusinessReportContract
;
import
com.jess.arms.di.scope.FragmentScope
;
import
com.gingersoft.gsa.cloud.main.mvp.ui.fragment.BusinessReportFragment
;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 02/23/2020 16:19
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
@FragmentScope
@Component
(
modules
=
BusinessReportModule
.
class
,
dependencies
=
AppComponent
.
class
)
public
interface
BusinessReportComponent
{
void
inject
(
BusinessReportFragment
fragment
);
@Component
.
Builder
interface
Builder
{
@BindsInstance
BusinessReportComponent
.
Builder
view
(
BusinessReportContract
.
View
view
);
BusinessReportComponent
.
Builder
appComponent
(
AppComponent
appComponent
);
BusinessReportComponent
build
();
}
}
\ No newline at end of file
main/src/main/java/com/gingersoft/gsa/cloud/main/di/component/PaymentMethodReportComponent.java
0 → 100644
View file @
38f09a7b
package
com
.
gingersoft
.
gsa
.
cloud
.
main
.
di
.
component
;
import
dagger.BindsInstance
;
import
dagger.Component
;
import
com.jess.arms.di.component.AppComponent
;
import
com.gingersoft.gsa.cloud.main.di.module.PaymentMethodReportModule
;
import
com.gingersoft.gsa.cloud.main.mvp.contract.PaymentMethodReportContract
;
import
com.jess.arms.di.scope.FragmentScope
;
import
com.gingersoft.gsa.cloud.main.mvp.ui.fragment.PaymentMethodReportFragment
;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 02/23/2020 16:22
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
@FragmentScope
@Component
(
modules
=
PaymentMethodReportModule
.
class
,
dependencies
=
AppComponent
.
class
)
public
interface
PaymentMethodReportComponent
{
void
inject
(
PaymentMethodReportFragment
fragment
);
@Component
.
Builder
interface
Builder
{
@BindsInstance
PaymentMethodReportComponent
.
Builder
view
(
PaymentMethodReportContract
.
View
view
);
PaymentMethodReportComponent
.
Builder
appComponent
(
AppComponent
appComponent
);
PaymentMethodReportComponent
build
();
}
}
\ No newline at end of file
main/src/main/java/com/gingersoft/gsa/cloud/main/di/component/ReportComponent.java
View file @
38f09a7b
...
...
@@ -8,15 +8,15 @@ import com.jess.arms.di.component.AppComponent;
import
com.gingersoft.gsa.cloud.main.di.module.ReportModule
;
import
com.gingersoft.gsa.cloud.main.mvp.contract.ReportContract
;
import
com.jess.arms.di.scope.
Fragment
Scope
;
import
com.gingersoft.gsa.cloud.main.mvp.ui.
fragment.ReportFragment
;
import
com.jess.arms.di.scope.
Activity
Scope
;
import
com.gingersoft.gsa.cloud.main.mvp.ui.
activity.ReportActivity
;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 0
1/10/2020 15:03
* Created by MVPArmsTemplate on 0
2/23/2020 16:18
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
...
...
@@ -24,10 +24,10 @@ import com.gingersoft.gsa.cloud.main.mvp.ui.fragment.ReportFragment;
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
@
Fragment
Scope
@
Activity
Scope
@Component
(
modules
=
ReportModule
.
class
,
dependencies
=
AppComponent
.
class
)
public
interface
ReportComponent
{
void
inject
(
Report
Fragment
fragment
);
void
inject
(
Report
Activity
activity
);
@Component
.
Builder
interface
Builder
{
...
...
main/src/main/java/com/gingersoft/gsa/cloud/main/di/component/SalesComponent.java
0 → 100644
View file @
38f09a7b
package
com
.
gingersoft
.
gsa
.
cloud
.
main
.
di
.
component
;
import
dagger.BindsInstance
;
import
dagger.Component
;
import
com.jess.arms.di.component.AppComponent
;
import
com.gingersoft.gsa.cloud.main.di.module.SalesModule
;
import
com.gingersoft.gsa.cloud.main.mvp.contract.SalesContract
;
import
com.jess.arms.di.scope.FragmentScope
;
import
com.gingersoft.gsa.cloud.main.mvp.ui.fragment.SalesFragment
;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 02/23/2020 16:21
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
@FragmentScope
@Component
(
modules
=
SalesModule
.
class
,
dependencies
=
AppComponent
.
class
)
public
interface
SalesComponent
{
void
inject
(
SalesFragment
fragment
);
@Component
.
Builder
interface
Builder
{
@BindsInstance
SalesComponent
.
Builder
view
(
SalesContract
.
View
view
);
SalesComponent
.
Builder
appComponent
(
AppComponent
appComponent
);
SalesComponent
build
();
}
}
\ No newline at end of file
main/src/main/java/com/gingersoft/gsa/cloud/main/di/module/BusinessReportModule.java
0 → 100644
View file @
38f09a7b
package
com
.
gingersoft
.
gsa
.
cloud
.
main
.
di
.
module
;
import
com.jess.arms.di.scope.FragmentScope
;
import
dagger.Binds
;
import
dagger.Module
;
import
dagger.Provides
;
import
com.gingersoft.gsa.cloud.main.mvp.contract.BusinessReportContract
;
import
com.gingersoft.gsa.cloud.main.mvp.model.BusinessReportModel
;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 02/23/2020 16:19
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
@Module
public
abstract
class
BusinessReportModule
{
@Binds
abstract
BusinessReportContract
.
Model
bindBusinessReportModel
(
BusinessReportModel
model
);
}
\ No newline at end of file
main/src/main/java/com/gingersoft/gsa/cloud/main/di/module/PaymentMethodReportModule.java
0 → 100644
View file @
38f09a7b
package
com
.
gingersoft
.
gsa
.
cloud
.
main
.
di
.
module
;
import
com.jess.arms.di.scope.FragmentScope
;
import
dagger.Binds
;
import
dagger.Module
;
import
dagger.Provides
;
import
com.gingersoft.gsa.cloud.main.mvp.contract.PaymentMethodReportContract
;
import
com.gingersoft.gsa.cloud.main.mvp.model.PaymentMethodReportModel
;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 02/23/2020 16:22
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
@Module
public
abstract
class
PaymentMethodReportModule
{
@Binds
abstract
PaymentMethodReportContract
.
Model
bindPaymentMethodReportModel
(
PaymentMethodReportModel
model
);
}
\ No newline at end of file
main/src/main/java/com/gingersoft/gsa/cloud/main/di/module/ReportModule.java
View file @
38f09a7b
package
com
.
gingersoft
.
gsa
.
cloud
.
main
.
di
.
module
;
import
com.jess.arms.di.scope.
Fragment
Scope
;
import
com.jess.arms.di.scope.
Activity
Scope
;
import
dagger.Binds
;
import
dagger.Module
;
...
...
@@ -14,7 +14,7 @@ import com.gingersoft.gsa.cloud.main.mvp.model.ReportModel;
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 0
1/10/2020 15:03
* Created by MVPArmsTemplate on 0
2/23/2020 16:18
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
...
...
main/src/main/java/com/gingersoft/gsa/cloud/main/di/module/SalesModule.java
0 → 100644
View file @
38f09a7b
package
com
.
gingersoft
.
gsa
.
cloud
.
main
.
di
.
module
;
import
com.jess.arms.di.scope.FragmentScope
;
import
dagger.Binds
;
import
dagger.Module
;
import
dagger.Provides
;
import
com.gingersoft.gsa.cloud.main.mvp.contract.SalesContract
;
import
com.gingersoft.gsa.cloud.main.mvp.model.SalesModel
;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 02/23/2020 16:21
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
@Module
public
abstract
class
SalesModule
{
@Binds
abstract
SalesContract
.
Model
bindSalesModel
(
SalesModel
model
);
}
\ No newline at end of file
main/src/main/java/com/gingersoft/gsa/cloud/main/mvp/contract/BusinessReportContract.java
0 → 100644
View file @
38f09a7b
package
com
.
gingersoft
.
gsa
.
cloud
.
main
.
mvp
.
contract
;
import
com.jess.arms.mvp.IView
;
import
com.jess.arms.mvp.IModel
;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 02/23/2020 16:19
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
public
interface
BusinessReportContract
{
//对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息
interface
View
extends
IView
{
}
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
interface
Model
extends
IModel
{
}
}
main/src/main/java/com/gingersoft/gsa/cloud/main/mvp/contract/PaymentMethodReportContract.java
0 → 100644
View file @
38f09a7b
package
com
.
gingersoft
.
gsa
.
cloud
.
main
.
mvp
.
contract
;
import
com.jess.arms.mvp.IView
;
import
com.jess.arms.mvp.IModel
;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 02/23/2020 16:22
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
public
interface
PaymentMethodReportContract
{
//对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息
interface
View
extends
IView
{
}
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
interface
Model
extends
IModel
{
}
}
main/src/main/java/com/gingersoft/gsa/cloud/main/mvp/contract/ReportContract.java
View file @
38f09a7b
...
...
@@ -8,7 +8,7 @@ import com.jess.arms.mvp.IModel;
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 0
1/10/2020 15:03
* Created by MVPArmsTemplate on 0
2/23/2020 16:18
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
...
...
main/src/main/java/com/gingersoft/gsa/cloud/main/mvp/contract/SalesContract.java
0 → 100644
View file @
38f09a7b
package
com
.
gingersoft
.
gsa
.
cloud
.
main
.
mvp
.
contract
;
import
com.jess.arms.mvp.IView
;
import
com.jess.arms.mvp.IModel
;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 02/23/2020 16:21
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
public
interface
SalesContract
{
//对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息
interface
View
extends
IView
{
}
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
interface
Model
extends
IModel
{
}
}
main/src/main/java/com/gingersoft/gsa/cloud/main/mvp/model/BusinessReportModel.java
0 → 100644
View file @
38f09a7b
package
com
.
gingersoft
.
gsa
.
cloud
.
main
.
mvp
.
model
;
import
android.app.Application
;
import
com.google.gson.Gson
;
import
com.jess.arms.integration.IRepositoryManager
;
import
com.jess.arms.mvp.BaseModel
;
import
com.jess.arms.di.scope.FragmentScope
;
import
javax.inject.Inject
;
import
com.gingersoft.gsa.cloud.main.mvp.contract.BusinessReportContract
;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 02/23/2020 16:19
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
@FragmentScope
public
class
BusinessReportModel
extends
BaseModel
implements
BusinessReportContract
.
Model
{
@Inject
Gson
mGson
;
@Inject
Application
mApplication
;
@Inject
public
BusinessReportModel
(
IRepositoryManager
repositoryManager
)
{
super
(
repositoryManager
);
}
@Override
public
void
onDestroy
()
{
super
.
onDestroy
();
this
.
mGson
=
null
;
this
.
mApplication
=
null
;
}
}
\ No newline at end of file
main/src/main/java/com/gingersoft/gsa/cloud/main/mvp/model/PaymentMethodReportModel.java
0 → 100644
View file @
38f09a7b
package
com
.
gingersoft
.
gsa
.
cloud
.
main
.
mvp
.
model
;
import
android.app.Application
;
import
com.google.gson.Gson
;
import
com.jess.arms.integration.IRepositoryManager
;
import
com.jess.arms.mvp.BaseModel
;
import
com.jess.arms.di.scope.FragmentScope
;
import
javax.inject.Inject
;
import
com.gingersoft.gsa.cloud.main.mvp.contract.PaymentMethodReportContract
;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 02/23/2020 16:22
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
@FragmentScope
public
class
PaymentMethodReportModel
extends
BaseModel
implements
PaymentMethodReportContract
.
Model
{
@Inject
Gson
mGson
;
@Inject
Application
mApplication
;
@Inject
public
PaymentMethodReportModel
(
IRepositoryManager
repositoryManager
)
{
super
(
repositoryManager
);
}
@Override
public
void
onDestroy
()
{
super
.
onDestroy
();
this
.
mGson
=
null
;
this
.
mApplication
=
null
;
}
}
\ No newline at end of file
main/src/main/java/com/gingersoft/gsa/cloud/main/mvp/model/ReportModel.java
View file @
38f09a7b
...
...
@@ -6,7 +6,7 @@ import com.google.gson.Gson;
import
com.jess.arms.integration.IRepositoryManager
;
import
com.jess.arms.mvp.BaseModel
;
import
com.jess.arms.di.scope.
Fragment
Scope
;
import
com.jess.arms.di.scope.
Activity
Scope
;
import
javax.inject.Inject
;
...
...
@@ -17,7 +17,7 @@ import com.gingersoft.gsa.cloud.main.mvp.contract.ReportContract;
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 0
1/10/2020 15:03
* Created by MVPArmsTemplate on 0
2/23/2020 16:18
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
...
...
@@ -25,7 +25,7 @@ import com.gingersoft.gsa.cloud.main.mvp.contract.ReportContract;
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
@
Fragment
Scope
@
Activity
Scope
public
class
ReportModel
extends
BaseModel
implements
ReportContract
.
Model
{
@Inject
Gson
mGson
;
...
...
main/src/main/java/com/gingersoft/gsa/cloud/main/mvp/model/SalesModel.java
0 → 100644
View file @
38f09a7b
package
com
.
gingersoft
.
gsa
.
cloud
.
main
.
mvp
.
model
;
import
android.app.Application
;
import
com.google.gson.Gson
;
import
com.jess.arms.integration.IRepositoryManager
;
import
com.jess.arms.mvp.BaseModel
;
import
com.jess.arms.di.scope.FragmentScope
;
import
javax.inject.Inject
;
import
com.gingersoft.gsa.cloud.main.mvp.contract.SalesContract
;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 02/23/2020 16:21
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
@FragmentScope
public
class
SalesModel
extends
BaseModel
implements
SalesContract
.
Model
{
@Inject
Gson
mGson
;
@Inject
Application
mApplication
;
@Inject
public
SalesModel
(
IRepositoryManager
repositoryManager
)
{
super
(
repositoryManager
);
}
@Override
public
void
onDestroy
()
{
super
.
onDestroy
();
this
.
mGson
=
null
;
this
.
mApplication
=
null
;
}
}
\ No newline at end of file
main/src/main/java/com/gingersoft/gsa/cloud/main/mvp/presenter/BusinessReportPresenter.java
0 → 100644
View file @
38f09a7b
package
com
.
gingersoft
.
gsa
.
cloud
.
main
.
mvp
.
presenter
;
import
android.app.Application
;
import
com.gingersoft.gsa.cloud.main.mvp.contract.BusinessReportContract
;
import
com.jess.arms.di.scope.FragmentScope
;
import
com.jess.arms.http.imageloader.ImageLoader
;
import
com.jess.arms.integration.AppManager
;
import
com.jess.arms.mvp.BasePresenter
;
import
javax.inject.Inject
;
import
me.jessyan.rxerrorhandler.core.RxErrorHandler
;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 02/23/2020 16:19
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
@FragmentScope
public
class
BusinessReportPresenter
extends
BasePresenter
<
BusinessReportContract
.
Model
,
BusinessReportContract
.
View
>
{
@Inject
RxErrorHandler
mErrorHandler
;
@Inject
Application
mApplication
;
@Inject
ImageLoader
mImageLoader
;
@Inject
AppManager
mAppManager
;
@Inject
public
BusinessReportPresenter
(
BusinessReportContract
.
Model
model
,
BusinessReportContract
.
View
rootView
)
{
super
(
model
,
rootView
);
}
@Override
public
void
onDestroy
()
{
super
.
onDestroy
();
this
.
mErrorHandler
=
null
;
this
.
mAppManager
=
null
;
this
.
mImageLoader
=
null
;
this
.
mApplication
=
null
;
}
}
main/src/main/java/com/gingersoft/gsa/cloud/main/mvp/presenter/MainTopPresenter.java
View file @
38f09a7b
...
...
@@ -4,11 +4,15 @@ import android.app.Application;
import
com.gingersoft.gsa.cloud.base.utils.constans.HttpsConstans
;
import
com.gingersoft.gsa.cloud.base.utils.time.TimeUtils
;
import
com.gingersoft.gsa.cloud.main.mvp.contract.MainTopContract
;
import
com.gingersoft.gsa.cloud.main.mvp.model.bean.HomeTurnoverBean
;
import
com.jess.arms.integration.AppManager
;
import
com.jess.arms.di.scope.FragmentScope
;
import
com.jess.arms.mvp.BasePresenter
;
import
com.jess.arms.http.imageloader.ImageLoader
;
import
com.jess.arms.integration.AppManager
;
import
com.jess.arms.mvp.BasePresenter
;
import
com.jess.arms.utils.RxLifecycleUtils
;
import
javax.inject.Inject
;
import
io.reactivex.android.schedulers.AndroidSchedulers
;
import
io.reactivex.annotations.NonNull
;
...
...
@@ -19,11 +23,6 @@ import me.jessyan.rxerrorhandler.handler.ErrorHandleSubscriber;
import
okhttp3.FormBody
;
import
okhttp3.RequestBody
;
import
javax.inject.Inject
;
import
com.gingersoft.gsa.cloud.main.mvp.contract.MainTopContract
;
import
com.jess.arms.utils.RxLifecycleUtils
;
/**
* ================================================
...
...
@@ -102,4 +101,7 @@ public class MainTopPresenter extends BasePresenter<MainTopContract.Model, MainT
}
});
}
//http://a.ricepon.com:61177/member-web/api/wx/findOrderInfoChart 獲取消費曲線圖
//{"success":true,"sysTime":1582375800036,"data":[{"date":"2020-02-22","items":[{"person":"0","amount":0.0,"hours":"12","count":1,"date":"2020-02-22"},{"person":"0","amount":42.2,"hours":"14","count":3,"date":"2020-02-22"},{"person":"0","amount":21.1,"hours":"15","count":3,"date":"2020-02-22"},{"person":"0","amount":136.0,"hours":"17","count":3,"date":"2020-02-22"},{"person":"0","amount":58.0,"hours":"18","count":1,"date":"2020-02-22"}]}]}
}
main/src/main/java/com/gingersoft/gsa/cloud/main/mvp/presenter/PaymentMethodReportPresenter.java
0 → 100644
View file @
38f09a7b
package
com
.
gingersoft
.
gsa
.
cloud
.
main
.
mvp
.
presenter
;
import
android.app.Application
;
import
com.gingersoft.gsa.cloud.main.mvp.contract.PaymentMethodReportContract
;
import
com.jess.arms.di.scope.FragmentScope
;
import
com.jess.arms.http.imageloader.ImageLoader
;
import
com.jess.arms.integration.AppManager
;
import
com.jess.arms.mvp.BasePresenter
;
import
javax.inject.Inject
;
import
me.jessyan.rxerrorhandler.core.RxErrorHandler
;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 02/23/2020 16:22
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
@FragmentScope
public
class
PaymentMethodReportPresenter
extends
BasePresenter
<
PaymentMethodReportContract
.
Model
,
PaymentMethodReportContract
.
View
>
{
@Inject
RxErrorHandler
mErrorHandler
;
@Inject
Application
mApplication
;
@Inject
ImageLoader
mImageLoader
;
@Inject
AppManager
mAppManager
;
@Inject
public
PaymentMethodReportPresenter
(
PaymentMethodReportContract
.
Model
model
,
PaymentMethodReportContract
.
View
rootView
)
{
super
(
model
,
rootView
);
}
@Override
public
void
onDestroy
()
{
super
.
onDestroy
();
this
.
mErrorHandler
=
null
;
this
.
mAppManager
=
null
;
this
.
mImageLoader
=
null
;
this
.
mApplication
=
null
;
}
}
main/src/main/java/com/gingersoft/gsa/cloud/main/mvp/presenter/ReportPresenter.java
View file @
38f09a7b
...
...
@@ -2,23 +2,22 @@ package com.gingersoft.gsa.cloud.main.mvp.presenter;
import
android.app.Application
;
import
com.gingersoft.gsa.cloud.main.mvp.contract.ReportContract
;
import
com.jess.arms.di.scope.ActivityScope
;
import
com.jess.arms.http.imageloader.ImageLoader
;
import
com.jess.arms.integration.AppManager
;
import
com.jess.arms.di.scope.FragmentScope
;
import
com.jess.arms.mvp.BasePresenter
;
import
com.jess.arms.http.imageloader.ImageLoader
;
import
me.jessyan.rxerrorhandler.core.RxErrorHandler
;
import
javax.inject.Inject
;
import
com.gingersoft.gsa.cloud.main.mvp.contract.ReportContract
;
import
me.jessyan.rxerrorhandler.core.RxErrorHandler
;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 0
1/10/2020 15:03
* Created by MVPArmsTemplate on 0
2/23/2020 16:18
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
...
...
@@ -26,7 +25,7 @@ import com.gingersoft.gsa.cloud.main.mvp.contract.ReportContract;
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
@
Fragment
Scope
@
Activity
Scope
public
class
ReportPresenter
extends
BasePresenter
<
ReportContract
.
Model
,
ReportContract
.
View
>
{
@Inject
RxErrorHandler
mErrorHandler
;
...
...
main/src/main/java/com/gingersoft/gsa/cloud/main/mvp/presenter/SalesPresenter.java
0 → 100644
View file @
38f09a7b
package
com
.
gingersoft
.
gsa
.
cloud
.
main
.
mvp
.
presenter
;
import
android.app.Application
;
import
com.gingersoft.gsa.cloud.main.mvp.contract.SalesContract
;
import
com.jess.arms.di.scope.FragmentScope
;
import
com.jess.arms.http.imageloader.ImageLoader
;
import
com.jess.arms.integration.AppManager
;
import
com.jess.arms.mvp.BasePresenter
;
import
javax.inject.Inject
;
import
me.jessyan.rxerrorhandler.core.RxErrorHandler
;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 02/23/2020 16:21
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
@FragmentScope
public
class
SalesPresenter
extends
BasePresenter
<
SalesContract
.
Model
,
SalesContract
.
View
>
{
@Inject
RxErrorHandler
mErrorHandler
;
@Inject
Application
mApplication
;
@Inject
ImageLoader
mImageLoader
;
@Inject
AppManager
mAppManager
;
@Inject
public
SalesPresenter
(
SalesContract
.
Model
model
,
SalesContract
.
View
rootView
)
{
super
(
model
,
rootView
);
}
@Override
public
void
onDestroy
()
{
super
.
onDestroy
();
this
.
mErrorHandler
=
null
;
this
.
mAppManager
=
null
;
this
.
mImageLoader
=
null
;
this
.
mApplication
=
null
;
}
}
main/src/main/java/com/gingersoft/gsa/cloud/main/mvp/ui/activity/MainActivity.java
View file @
38f09a7b
...
...
@@ -13,7 +13,6 @@ import com.gingersoft.gsa.cloud.main.mvp.contract.MainContract;
import
com.gingersoft.gsa.cloud.main.mvp.presenter.MainPresenter
;
import
com.gingersoft.gsa.cloud.main.mvp.ui.fragment.HomeFragment
;
import
com.gingersoft.gsa.cloud.main.mvp.ui.fragment.MyFragment
;
import
com.gingersoft.gsa.cloud.main.mvp.ui.fragment.ReportFragment
;
import
com.jess.arms.base.BaseFragmentActivity
;
import
com.jess.arms.di.component.AppComponent
;
import
com.jess.arms.utils.ArmsUtils
;
...
...
@@ -22,6 +21,7 @@ import com.qmuiteam.qmui.widget.QMUIViewPager;
import
com.qmuiteam.qmui.widget.tab.QMUITab
;
import
com.qmuiteam.qmui.widget.tab.QMUITabBuilder
;
import
com.qmuiteam.qmui.widget.tab.QMUITabSegment
;
import
androidx.annotation.NonNull
;
import
androidx.annotation.Nullable
;
import
androidx.core.content.ContextCompat
;
...
...
@@ -83,7 +83,7 @@ public class MainActivity extends BaseFragmentActivity<MainPresenter> implements
case
0
:
return
HomeFragment
.
newInstance
();
case
1
:
return
ReportFragment
.
newInstance
();
//
return ReportFragment.newInstance();
case
2
:
default
:
return
MyFragment
.
newInstance
();
...
...
main/src/main/java/com/gingersoft/gsa/cloud/main/mvp/ui/activity/NewMainActivity.java
View file @
38f09a7b
...
...
@@ -18,10 +18,10 @@ import com.gingersoft.gsa.cloud.main.mvp.model.bean.SectionItem;
import
com.gingersoft.gsa.cloud.main.mvp.presenter.NewMainPresenter
;
import
com.gingersoft.gsa.cloud.main.mvp.ui.adapter.MainOrderingAdapter
;
import
com.gingersoft.gsa.cloud.main.mvp.ui.view.SlidingMenu
;
import
com.gingersoft.gsa.cloud.ui.view.utils.ShadowUtil
;
import
com.jess.arms.base.BaseActivity
;
import
com.jess.arms.di.component.AppComponent
;
import
com.jess.arms.utils.ArmsUtils
;
import
com.sxu.shadowdrawable.ShadowDrawable
;
import
java.util.ArrayList
;
import
java.util.List
;
...
...
@@ -96,9 +96,9 @@ public class NewMainActivity extends BaseActivity<NewMainPresenter> implements N
}
private
void
initShadow
()
{
Shadow
Drawable
.
setShadowDrawable
(
orderingMeals
,
Color
.
parseColor
(
"#FFFFFF"
),
dpToPx
(
5
),
Shadow
Util
.
setShadowDrawable
(
orderingMeals
,
Color
.
parseColor
(
"#FFFFFF"
),
dpToPx
(
5
),
Color
.
parseColor
(
"#73888888"
),
dpToPx
(
5
),
0
,
2
);
Shadow
Drawable
.
setShadowDrawable
(
layoutManagement
,
Color
.
parseColor
(
"#FFFFFF"
),
dpToPx
(
5
),
Shadow
Util
.
setShadowDrawable
(
layoutManagement
,
Color
.
parseColor
(
"#FFFFFF"
),
dpToPx
(
5
),
Color
.
parseColor
(
"#00000000"
),
dpToPx
(
5
),
0
,
2
);
}
...
...
main/src/main/java/com/gingersoft/gsa/cloud/main/mvp/ui/activity/ReportActivity.java
0 → 100644
View file @
38f09a7b
package
com
.
gingersoft
.
gsa
.
cloud
.
main
.
mvp
.
ui
.
activity
;
import
android.content.Intent
;
import
android.os.Bundle
;
import
android.util.TypedValue
;
import
android.widget.TextView
;
import
com.gingersoft.gsa.cloud.main.R
;
import
com.gingersoft.gsa.cloud.main.R2
;
import
com.gingersoft.gsa.cloud.main.di.component.DaggerReportComponent
;
import
com.gingersoft.gsa.cloud.main.mvp.contract.ReportContract
;
import
com.gingersoft.gsa.cloud.main.mvp.presenter.ReportPresenter
;
import
com.gingersoft.gsa.cloud.main.mvp.ui.fragment.BusinessReportFragment
;
import
com.gingersoft.gsa.cloud.main.mvp.ui.fragment.PaymentMethodReportFragment
;
import
com.gingersoft.gsa.cloud.main.mvp.ui.fragment.SalesFragment
;
import
com.gingersoft.gsa.cloud.ui.adapter.TabFragmentAdapter
;
import
com.google.android.material.tabs.TabLayout
;
import
com.jess.arms.base.BaseActivity
;
import
com.jess.arms.di.component.AppComponent
;
import
com.jess.arms.utils.ArmsUtils
;
import
com.qmuiteam.qmui.widget.QMUITopBar
;
import
java.util.ArrayList
;
import
java.util.List
;
import
androidx.annotation.NonNull
;
import
androidx.annotation.Nullable
;
import
androidx.core.content.ContextCompat
;
import
androidx.fragment.app.Fragment
;
import
androidx.viewpager.widget.ViewPager
;
import
butterknife.BindView
;
import
static
com
.
jess
.
arms
.
utils
.
Preconditions
.
checkNotNull
;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 02/23/2020 16:18
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
* 報表頁面
*/
public
class
ReportActivity
extends
BaseActivity
<
ReportPresenter
>
implements
ReportContract
.
View
{
@BindView
(
R2
.
id
.
report_topbar
)
QMUITopBar
mTopBar
;
@BindView
(
R2
.
id
.
table_layout
)
TabLayout
mTabLayout
;
@BindView
(
R2
.
id
.
report_viewpager
)
ViewPager
mViewPager
;
private
TabFragmentAdapter
mTabFragmentAdapter
;
private
List
<
String
>
titles
;
@Override
public
void
setupActivityComponent
(
@NonNull
AppComponent
appComponent
)
{
DaggerReportComponent
//如找不到该类,请编译一下项目
.
builder
()
.
appComponent
(
appComponent
)
.
view
(
this
)
.
build
()
.
inject
(
this
);
}
@Override
public
int
initView
(
@Nullable
Bundle
savedInstanceState
)
{
return
R
.
layout
.
activity_report
;
//如果你不需要框架帮你设置 setContentView(id) 需要自行设置,请返回 0
}
@Override
public
void
initData
(
@Nullable
Bundle
savedInstanceState
)
{
initTitlte
();
initViewPager
();
}
/**
* 设置顶部数据
*/
private
void
initTitlte
()
{
titles
=
new
ArrayList
<>();
titles
.
add
(
"營業分析"
);
titles
.
add
(
"銷售分析"
);
titles
.
add
(
"支付分析"
);
List
<
Fragment
>
mFragments
=
new
ArrayList
<>();
mFragments
.
add
(
BusinessReportFragment
.
newInstance
());
mFragments
.
add
(
SalesFragment
.
newInstance
());
mFragments
.
add
(
PaymentMethodReportFragment
.
newInstance
());
//实例化适配器
mTabFragmentAdapter
=
new
TabFragmentAdapter
(
getSupportFragmentManager
(),
1
);
//设置加载的Fragment集合
mTabFragmentAdapter
.
setFragments
(
mFragments
);
}
/**
* 设置Viewpager的适配器
*/
private
void
initViewPager
()
{
//设置Viewpager的适配器
mViewPager
.
setAdapter
(
mTabFragmentAdapter
);
mTabLayout
.
setupWithViewPager
(
mViewPager
);
//TabLayout绑定ViewPager
mTabLayout
.
setTabsFromPagerAdapter
(
mTabFragmentAdapter
);
//TabLayout的标签从Adapter中获取
//用来循环适配器中的视图总数
for
(
int
i
=
0
;
i
<
mTabFragmentAdapter
.
getCount
();
i
++)
{
//获取每一个tab对象
TabLayout
.
Tab
tabAt
=
mTabLayout
.
getTabAt
(
i
);
if
(
tabAt
!=
null
)
{
//将每一个条目设置我们自定义的视图
tabAt
.
setCustomView
(
R
.
layout
.
layout_table_item
);
//默认选中第一个
if
(
i
==
0
)
{
// 设置第一个tab的TextView是被选择的样式
setSelectTab
(
tabAt
,
true
);
}
//通过tab对象找到自定义视图的ID
TextView
textView
=
tabAt
.
getCustomView
().
findViewById
(
R
.
id
.
tv_tab
);
textView
.
setText
(
titles
.
get
(
i
));
//设置tab上的文字
}
}
mTabLayout
.
addOnTabSelectedListener
(
new
TabLayout
.
OnTabSelectedListener
()
{
@Override
public
void
onTabSelected
(
TabLayout
.
Tab
tab
)
{
setSelectTab
(
tab
,
true
);
}
@Override
public
void
onTabUnselected
(
TabLayout
.
Tab
tab
)
{
setSelectTab
(
tab
,
false
);
}
@Override
public
void
onTabReselected
(
TabLayout
.
Tab
tab
)
{
}
});
}
private
void
setSelectTab
(
TabLayout
.
Tab
tabAt
,
boolean
isSelected
)
{
if
(
tabAt
.
getCustomView
()
!=
null
)
{
TextView
tab
=
tabAt
.
getCustomView
().
findViewById
(
R
.
id
.
tv_tab
);
//第一个tab被选中
tab
.
setSelected
(
isSelected
);
//设置选中标签的文字大小
tab
.
setTextSize
(
TypedValue
.
COMPLEX_UNIT_PX
,
isSelected
?
getResources
().
getDimensionPixelSize
(
R
.
dimen
.
sp_16
)
:
getResources
().
getDimensionPixelSize
(
R
.
dimen
.
sp_14
));
tab
.
getPaint
().
setFakeBoldText
(
isSelected
);
}
}
@Override
public
void
initIntent
()
{
}
@Override
public
void
initTopBar
()
{
mTopBar
.
setBackgroundColor
(
ContextCompat
.
getColor
(
this
,
R
.
color
.
theme_color
));
mTopBar
.
addLeftBackImageButton
().
setOnClickListener
(
v
->
killMyself
());
mTopBar
.
setTitle
(
"報表"
);
}
@Override
public
void
initLanguage
()
{
}
@Override
public
void
initLayoutParams
()
{
}
@Override
public
void
initLayoutVisible
()
{
}
@Override
public
void
showLoading
(
String
message
)
{
}
@Override
public
void
hideLoading
()
{
}
@Override
public
void
showMessage
(
@NonNull
String
message
)
{
checkNotNull
(
message
);
ArmsUtils
.
snackbarText
(
message
);
}
@Override
public
void
launchActivity
(
@NonNull
Intent
intent
)
{
checkNotNull
(
intent
);
ArmsUtils
.
startActivity
(
intent
);
}
@Override
public
void
killMyself
()
{
finish
();
}
}
main/src/main/java/com/gingersoft/gsa/cloud/main/mvp/ui/fragment/BusinessReportFragment.java
0 → 100644
View file @
38f09a7b
package
com
.
gingersoft
.
gsa
.
cloud
.
main
.
mvp
.
ui
.
fragment
;
import
android.content.Intent
;
import
android.os.Bundle
;
import
android.os.Message
;
import
android.view.LayoutInflater
;
import
android.view.View
;
import
android.view.ViewGroup
;
import
android.widget.LinearLayout
;
import
com.gingersoft.gsa.cloud.main.R
;
import
com.gingersoft.gsa.cloud.main.R2
;
import
com.gingersoft.gsa.cloud.main.di.component.DaggerBusinessReportComponent
;
import
com.gingersoft.gsa.cloud.main.mvp.contract.BusinessReportContract
;
import
com.gingersoft.gsa.cloud.main.mvp.presenter.BusinessReportPresenter
;
import
com.gingersoft.gsa.cloud.ui.view.utils.ShadowUtil
;
import
com.jess.arms.base.BaseFragment
;
import
com.jess.arms.di.component.AppComponent
;
import
com.jess.arms.utils.ArmsUtils
;
import
androidx.annotation.NonNull
;
import
androidx.annotation.Nullable
;
import
androidx.fragment.app.Fragment
;
import
butterknife.BindView
;
import
static
com
.
jess
.
arms
.
utils
.
Preconditions
.
checkNotNull
;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 02/23/2020 16:19
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
* 營業報表
*/
public
class
BusinessReportFragment
extends
BaseFragment
<
BusinessReportPresenter
>
implements
BusinessReportContract
.
View
{
@BindView
(
R2
.
id
.
layout_business_chart
)
LinearLayout
mBusinessChart
;
@BindView
(
R2
.
id
.
layout_business_info
)
LinearLayout
mBusinessInfo
;
public
static
BusinessReportFragment
newInstance
()
{
BusinessReportFragment
fragment
=
new
BusinessReportFragment
();
return
fragment
;
}
@Override
public
void
setupFragmentComponent
(
@NonNull
AppComponent
appComponent
)
{
DaggerBusinessReportComponent
//如找不到该类,请编译一下项目
.
builder
()
.
appComponent
(
appComponent
)
.
view
(
this
)
.
build
()
.
inject
(
this
);
}
@Override
public
View
initView
(
@NonNull
LayoutInflater
inflater
,
@Nullable
ViewGroup
container
,
@Nullable
Bundle
savedInstanceState
)
{
return
inflater
.
inflate
(
R
.
layout
.
fragment_business_report
,
container
,
false
);
}
@Override
public
void
initData
(
@Nullable
Bundle
savedInstanceState
)
{
ShadowUtil
.
setShadowDrawable
(
mBusinessChart
);
ShadowUtil
.
setShadowDrawable
(
mBusinessInfo
);
}
/**
* 通过此方法可以使 Fragment 能够与外界做一些交互和通信, 比如说外部的 Activity 想让自己持有的某个 Fragment 对象执行一些方法,
* 建议在有多个需要与外界交互的方法时, 统一传 {@link Message}, 通过 what 字段来区分不同的方法, 在 {@link #setData(Object)}
* 方法中就可以 {@code switch} 做不同的操作, 这样就可以用统一的入口方法做多个不同的操作, 可以起到分发的作用
* <p>
* 调用此方法时请注意调用时 Fragment 的生命周期, 如果调用 {@link #setData(Object)} 方法时 {@link Fragment#onCreate(Bundle)} 还没执行
* 但在 {@link #setData(Object)} 里却调用了 Presenter 的方法, 是会报空的, 因为 Dagger 注入是在 {@link Fragment#onCreate(Bundle)} 方法中执行的
* 然后才创建的 Presenter, 如果要做一些初始化操作,可以不必让外部调用 {@link #setData(Object)}, 在 {@link #initData(Bundle)} 中初始化就可以了
* <p>
* Example usage:
* <pre>
* public void setData(@Nullable Object data) {
* if (data != null && data instanceof Message) {
* switch (((Message) data).what) {
* case 0:
* loadData(((Message) data).arg1);
* break;
* case 1:
* refreshUI();
* break;
* default:
* //do something
* break;
* }
* }
* }
*
* // call setData(Object):
* Message data = new Message();
* data.what = 0;
* data.arg1 = 1;
* fragment.setData(data);
* </pre>
*
* @param data 当不需要参数时 {@code data} 可以为 {@code null}
*/
@Override
public
void
setData
(
@Nullable
Object
data
)
{
}
@Override
public
void
showLoading
(
String
message
)
{
}
@Override
public
void
hideLoading
()
{
}
@Override
public
void
showMessage
(
@NonNull
String
message
)
{
checkNotNull
(
message
);
ArmsUtils
.
snackbarText
(
message
);
}
@Override
public
void
launchActivity
(
@NonNull
Intent
intent
)
{
checkNotNull
(
intent
);
ArmsUtils
.
startActivity
(
intent
);
}
@Override
public
void
killMyself
()
{
}
}
main/src/main/java/com/gingersoft/gsa/cloud/main/mvp/ui/fragment/MainTopFragment.java
View file @
38f09a7b
...
...
@@ -31,10 +31,12 @@ import com.gingersoft.gsa.cloud.main.di.component.DaggerMainTopComponent;
import
com.gingersoft.gsa.cloud.main.mvp.contract.MainTopContract
;
import
com.gingersoft.gsa.cloud.main.mvp.model.bean.HomeTurnoverBean
;
import
com.gingersoft.gsa.cloud.main.mvp.presenter.MainTopPresenter
;
import
com.gingersoft.gsa.cloud.main.mvp.ui.activity.ReportActivity
;
import
com.gingersoft.gsa.cloud.main.mvp.ui.view.CustomMarkView
;
import
com.gingersoft.gsa.cloud.ui.view.utils.ShadowUtil
;
import
com.jess.arms.base.BaseFragment
;
import
com.jess.arms.di.component.AppComponent
;
import
com.jess.arms.utils.ArmsUtils
;
import
com.sxu.shadowdrawable.ShadowDrawable
;
import
java.text.SimpleDateFormat
;
import
java.util.ArrayList
;
...
...
@@ -45,6 +47,7 @@ import androidx.annotation.NonNull;
import
androidx.annotation.Nullable
;
import
butterknife.BindView
;
import
butterknife.ButterKnife
;
import
butterknife.OnClick
;
import
static
com
.
jess
.
arms
.
utils
.
Preconditions
.
checkNotNull
;
import
static
com
.
qmuiteam
.
qmui
.
util
.
QMUIDisplayHelper
.
dpToPx
;
...
...
@@ -96,6 +99,7 @@ public class MainTopFragment extends BaseFragment<MainTopPresenter> implements M
ImageView
ivBillTrend
;
//賬單數量趨勢
@BindView
(
R2
.
id
.
tv_bill_trend
)
TextView
tvBillTrend
;
//賬單數量較昨日上漲或下跌數量
public
static
MainTopFragment
newInstance
()
{
MainTopFragment
fragment
=
new
MainTopFragment
();
return
fragment
;
...
...
@@ -115,9 +119,9 @@ public class MainTopFragment extends BaseFragment<MainTopPresenter> implements M
public
View
initView
(
@NonNull
LayoutInflater
inflater
,
@Nullable
ViewGroup
container
,
@Nullable
Bundle
savedInstanceState
)
{
View
view
=
inflater
.
inflate
(
R
.
layout
.
fragment_main_top
,
container
,
false
);
ButterKnife
.
bind
(
this
,
view
);
Shadow
Drawable
.
setShadowDrawable
(
view
.
findViewById
(
R
.
id
.
cv_white_bg
),
Color
.
parseColor
(
"#FFFFFF"
),
dpToPx
(
5
),
Shadow
Util
.
setShadowDrawable
(
view
.
findViewById
(
R
.
id
.
cv_white_bg
),
Color
.
parseColor
(
"#FFFFFF"
),
dpToPx
(
5
),
Color
.
parseColor
(
"#73888888"
),
dpToPx
(
5
),
0
,
2
);
Shadow
Drawable
.
setShadowDrawable
(
view
.
findViewById
(
R
.
id
.
layout_info
),
Color
.
parseColor
(
"#FFFFFF"
),
dpToPx
(
5
),
Shadow
Util
.
setShadowDrawable
(
view
.
findViewById
(
R
.
id
.
layout_info
),
Color
.
parseColor
(
"#FFFFFF"
),
dpToPx
(
5
),
Color
.
parseColor
(
"#73888888"
),
dpToPx
(
5
),
0
,
2
);
return
view
;
...
...
@@ -146,25 +150,25 @@ public class MainTopFragment extends BaseFragment<MainTopPresenter> implements M
List
<
LineData
>
ColumnDatas
=
new
ArrayList
<>();
//第一條線
ArrayList
<
Double
>
tempList1
=
new
ArrayList
<>();
tempList1
.
add
(
0
d
);
tempList1
.
add
(
0
d
);
tempList1
.
add
(
0
d
);
tempList1
.
add
(
0
d
);
tempList1
.
add
(
0
d
);
tempList1
.
add
(
0
d
);
final
LineData
columnData1
=
new
LineData
(
"今日"
,
"
℃
"
,
getResources
().
getColor
(
R
.
color
.
theme_color
),
tempList1
);
tempList1
.
add
(
188
0
d
);
tempList1
.
add
(
192
0
d
);
tempList1
.
add
(
492
0
d
);
tempList1
.
add
(
293
0
d
);
tempList1
.
add
(
495
0
d
);
tempList1
.
add
(
234
0
d
);
final
LineData
columnData1
=
new
LineData
(
"今日"
,
""
,
getResources
().
getColor
(
R
.
color
.
theme_color
),
tempList1
);
columnData1
.
setLineStyle
(
new
LineStyle
(
mContext
,
5
,
getResources
().
getColor
(
R
.
color
.
theme_color
)));
//第二條線
ArrayList
<
Double
>
humidityList
=
new
ArrayList
<>();
humidityList
.
add
(
0
d
);
humidityList
.
add
(
0
d
);
humidityList
.
add
(
0
d
);
humidityList
.
add
(
0
d
);
humidityList
.
add
(
0
d
);
humidityList
.
add
(
0
d
);
humidityList
.
add
(
0
d
);
humidityList
.
add
(
0
d
);
humidityList
.
add
(
179
0
d
);
humidityList
.
add
(
245
0
d
);
humidityList
.
add
(
643
0
d
);
humidityList
.
add
(
236
0
d
);
humidityList
.
add
(
1790
0
d
);
humidityList
.
add
(
346
0
d
);
humidityList
.
add
(
241
0
d
);
humidityList
.
add
(
464
0
d
);
LineData
columnData2
=
new
LineData
(
"昨日"
,
""
,
getResources
().
getColor
(
R
.
color
.
today_line
),
humidityList
);
columnData2
.
setLineStyle
(
new
LineStyle
(
mContext
,
5
,
getResources
().
getColor
(
R
.
color
.
today_line
)));
ColumnDatas
.
add
(
columnData1
);
...
...
@@ -206,9 +210,9 @@ public class MainTopFragment extends BaseFragment<MainTopPresenter> implements M
//开启十字架
lineChart
.
getProvider
().
setOpenCross
(
true
);
//开启MarkView
//
lineChart.getProvider().setOpenMark(true);
lineChart
.
getProvider
().
setOpenMark
(
true
);
//设置MarkView
//
lineChart.getProvider().setMarkView(new CustomMarkView(mContext));
lineChart
.
getProvider
().
setMarkView
(
new
CustomMarkView
(
mContext
));
//设置显示点
Point
point
=
new
Point
();
point
.
getPointStyle
().
setShape
(
PointStyle
.
CIRCLE
);
...
...
@@ -367,7 +371,12 @@ public class MainTopFragment extends BaseFragment<MainTopPresenter> implements M
}
}
@OnClick
({
R2
.
id
.
tv_more_report
})
@Override
public
void
onClick
(
View
v
)
{
if
(
v
.
getId
()
==
R
.
id
.
tv_more_report
){
//更多報表
startActivity
(
new
Intent
(
mContext
,
ReportActivity
.
class
));
}
}
}
main/src/main/java/com/gingersoft/gsa/cloud/main/mvp/ui/fragment/PaymentMethodReportFragment.java
0 → 100644
View file @
38f09a7b
package
com
.
gingersoft
.
gsa
.
cloud
.
main
.
mvp
.
ui
.
fragment
;
import
android.content.Intent
;
import
android.os.Bundle
;
import
android.os.Message
;
import
androidx.annotation.NonNull
;
import
androidx.annotation.Nullable
;
import
androidx.fragment.app.Fragment
;
import
android.view.LayoutInflater
;
import
android.view.View
;
import
android.view.ViewGroup
;
import
com.jess.arms.base.BaseFragment
;
import
com.jess.arms.di.component.AppComponent
;
import
com.jess.arms.utils.ArmsUtils
;
import
com.gingersoft.gsa.cloud.main.di.component.DaggerPaymentMethodReportComponent
;
import
com.gingersoft.gsa.cloud.main.mvp.contract.PaymentMethodReportContract
;
import
com.gingersoft.gsa.cloud.main.mvp.presenter.PaymentMethodReportPresenter
;
import
com.gingersoft.gsa.cloud.main.R
;
import
static
com
.
jess
.
arms
.
utils
.
Preconditions
.
checkNotNull
;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 02/23/2020 16:22
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
* 支付方式分析報表
*/
public
class
PaymentMethodReportFragment
extends
BaseFragment
<
PaymentMethodReportPresenter
>
implements
PaymentMethodReportContract
.
View
{
public
static
PaymentMethodReportFragment
newInstance
()
{
PaymentMethodReportFragment
fragment
=
new
PaymentMethodReportFragment
();
return
fragment
;
}
@Override
public
void
setupFragmentComponent
(
@NonNull
AppComponent
appComponent
)
{
DaggerPaymentMethodReportComponent
//如找不到该类,请编译一下项目
.
builder
()
.
appComponent
(
appComponent
)
.
view
(
this
)
.
build
()
.
inject
(
this
);
}
@Override
public
View
initView
(
@NonNull
LayoutInflater
inflater
,
@Nullable
ViewGroup
container
,
@Nullable
Bundle
savedInstanceState
)
{
return
inflater
.
inflate
(
R
.
layout
.
fragment_payment_method_report
,
container
,
false
);
}
@Override
public
void
initData
(
@Nullable
Bundle
savedInstanceState
)
{
}
/**
* 通过此方法可以使 Fragment 能够与外界做一些交互和通信, 比如说外部的 Activity 想让自己持有的某个 Fragment 对象执行一些方法,
* 建议在有多个需要与外界交互的方法时, 统一传 {@link Message}, 通过 what 字段来区分不同的方法, 在 {@link #setData(Object)}
* 方法中就可以 {@code switch} 做不同的操作, 这样就可以用统一的入口方法做多个不同的操作, 可以起到分发的作用
* <p>
* 调用此方法时请注意调用时 Fragment 的生命周期, 如果调用 {@link #setData(Object)} 方法时 {@link Fragment#onCreate(Bundle)} 还没执行
* 但在 {@link #setData(Object)} 里却调用了 Presenter 的方法, 是会报空的, 因为 Dagger 注入是在 {@link Fragment#onCreate(Bundle)} 方法中执行的
* 然后才创建的 Presenter, 如果要做一些初始化操作,可以不必让外部调用 {@link #setData(Object)}, 在 {@link #initData(Bundle)} 中初始化就可以了
* <p>
* Example usage:
* <pre>
* public void setData(@Nullable Object data) {
* if (data != null && data instanceof Message) {
* switch (((Message) data).what) {
* case 0:
* loadData(((Message) data).arg1);
* break;
* case 1:
* refreshUI();
* break;
* default:
* //do something
* break;
* }
* }
* }
*
* // call setData(Object):
* Message data = new Message();
* data.what = 0;
* data.arg1 = 1;
* fragment.setData(data);
* </pre>
*
* @param data 当不需要参数时 {@code data} 可以为 {@code null}
*/
@Override
public
void
setData
(
@Nullable
Object
data
)
{
}
@Override
public
void
showLoading
(
String
message
)
{
}
@Override
public
void
hideLoading
()
{
}
@Override
public
void
showMessage
(
@NonNull
String
message
)
{
checkNotNull
(
message
);
ArmsUtils
.
snackbarText
(
message
);
}
@Override
public
void
launchActivity
(
@NonNull
Intent
intent
)
{
checkNotNull
(
intent
);
ArmsUtils
.
startActivity
(
intent
);
}
@Override
public
void
killMyself
()
{
}
}
main/src/main/java/com/gingersoft/gsa/cloud/main/mvp/ui/fragment/
Report
Fragment.java
→
main/src/main/java/com/gingersoft/gsa/cloud/main/mvp/ui/fragment/
Sales
Fragment.java
View file @
38f09a7b
...
...
@@ -3,20 +3,24 @@ package com.gingersoft.gsa.cloud.main.mvp.ui.fragment;
import
android.content.Intent
;
import
android.os.Bundle
;
import
android.os.Message
;
import
androidx.annotation.NonNull
;
import
androidx.annotation.Nullable
;
import
androidx.fragment.app.Fragment
;
import
android.view.LayoutInflater
;
import
android.view.View
;
import
android.view.ViewGroup
;
import
com.gingersoft.gsa.cloud.main.R
;
import
com.gingersoft.gsa.cloud.main.di.component.DaggerReportComponent
;
import
com.gingersoft.gsa.cloud.main.mvp.contract.ReportContract
;
import
com.gingersoft.gsa.cloud.main.mvp.presenter.ReportPresenter
;
import
com.jess.arms.base.BaseFragment
;
import
com.jess.arms.di.component.AppComponent
;
import
com.jess.arms.utils.ArmsUtils
;
import
androidx.annotation.NonNull
;
import
androidx.annotation.Nullable
;
import
com.gingersoft.gsa.cloud.main.di.component.DaggerSalesComponent
;
import
com.gingersoft.gsa.cloud.main.mvp.contract.SalesContract
;
import
com.gingersoft.gsa.cloud.main.mvp.presenter.SalesPresenter
;
import
com.gingersoft.gsa.cloud.main.R
;
import
static
com
.
jess
.
arms
.
utils
.
Preconditions
.
checkNotNull
;
...
...
@@ -25,25 +29,25 @@ import static com.jess.arms.utils.Preconditions.checkNotNull;
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 0
1/10/2020 15:03
* Created by MVPArmsTemplate on 0
2/23/2020 16:21
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
* 報表
*
銷售分析
報表
*/
public
class
ReportFragment
extends
BaseFragment
<
ReportPresenter
>
implements
Report
Contract
.
View
{
public
class
SalesFragment
extends
BaseFragment
<
SalesPresenter
>
implements
Sales
Contract
.
View
{
public
static
Report
Fragment
newInstance
()
{
ReportFragment
fragment
=
new
Report
Fragment
();
public
static
Sales
Fragment
newInstance
()
{
SalesFragment
fragment
=
new
Sales
Fragment
();
return
fragment
;
}
@Override
public
void
setupFragmentComponent
(
@NonNull
AppComponent
appComponent
)
{
Dagger
Report
Component
//如找不到该类,请编译一下项目
Dagger
Sales
Component
//如找不到该类,请编译一下项目
.
builder
()
.
appComponent
(
appComponent
)
.
view
(
this
)
...
...
@@ -53,19 +57,55 @@ public class ReportFragment extends BaseFragment<ReportPresenter> implements Rep
@Override
public
View
initView
(
@NonNull
LayoutInflater
inflater
,
@Nullable
ViewGroup
container
,
@Nullable
Bundle
savedInstanceState
)
{
return
inflater
.
inflate
(
R
.
layout
.
main_fragment_report
,
container
,
false
);
return
inflater
.
inflate
(
R
.
layout
.
fragment_sales
,
container
,
false
);
}
@Override
public
void
initData
(
@Nullable
Bundle
savedInstanceState
)
{
}
/**
* 通过此方法可以使 Fragment 能够与外界做一些交互和通信, 比如说外部的 Activity 想让自己持有的某个 Fragment 对象执行一些方法,
* 建议在有多个需要与外界交互的方法时, 统一传 {@link Message}, 通过 what 字段来区分不同的方法, 在 {@link #setData(Object)}
* 方法中就可以 {@code switch} 做不同的操作, 这样就可以用统一的入口方法做多个不同的操作, 可以起到分发的作用
* <p>
* 调用此方法时请注意调用时 Fragment 的生命周期, 如果调用 {@link #setData(Object)} 方法时 {@link Fragment#onCreate(Bundle)} 还没执行
* 但在 {@link #setData(Object)} 里却调用了 Presenter 的方法, 是会报空的, 因为 Dagger 注入是在 {@link Fragment#onCreate(Bundle)} 方法中执行的
* 然后才创建的 Presenter, 如果要做一些初始化操作,可以不必让外部调用 {@link #setData(Object)}, 在 {@link #initData(Bundle)} 中初始化就可以了
* <p>
* Example usage:
* <pre>
* public void setData(@Nullable Object data) {
* if (data != null && data instanceof Message) {
* switch (((Message) data).what) {
* case 0:
* loadData(((Message) data).arg1);
* break;
* case 1:
* refreshUI();
* break;
* default:
* //do something
* break;
* }
* }
* }
*
* // call setData(Object):
* Message data = new Message();
* data.what = 0;
* data.arg1 = 1;
* fragment.setData(data);
* </pre>
*
* @param data 当不需要参数时 {@code data} 可以为 {@code null}
*/
@Override
public
void
setData
(
@Nullable
Object
data
)
{
}
@Override
public
void
showLoading
(
String
message
)
{
...
...
main/src/main/java/com/gingersoft/gsa/cloud/main/mvp/ui/view/CustomMarkView.java
View file @
38f09a7b
package
com
.
gingersoft
.
gsa
.
cloud
.
main
.
mvp
.
ui
.
view
;
import
android.app.Dialog
;
import
android.content.Context
;
import
android.graphics.Canvas
;
import
android.graphics.Color
;
import
android.graphics.Paint
;
import
android.graphics.Rect
;
import
android.os.Build
;
import
android.view.LayoutInflater
;
import
android.view.View
;
import
com.daivd.chart.data.BarData
;
import
com.daivd.chart.provider.component.mark.IMark
;
import
com.daivd.chart.provider.component.tip.MultiLineBubbleTip
;
import
com.daivd.chart.provider.component.tip.SingleLineBubbleTip
;
import
com.daivd.chart.utils.DensityUtils
;
import
com.gingersoft.gsa.cloud.base.widget.DialogUtils
;
import
com.gingersoft.gsa.cloud.main.R
;
/**
...
...
@@ -27,30 +25,37 @@ public class CustomMarkView<C extends BarData> implements IMark<C> {
private
SingleLineBubbleTip
<
String
>
bubbleTip
;
private
Paint
paint
;
private
View
contentView
;
private
DialogUtils
dialog
;
public
CustomMarkView
(
Context
context
)
{
// contentView = LayoutInflater.from(context).inflate(R.layout.layout_markview, null);
dialog
=
new
DialogUtils
(
context
,
R
.
layout
.
layout_markview
)
{
@Override
public
void
initLayout
(
ViewHepler
hepler
,
Dialog
dialog
)
{
}
}.
createDialogView
();
private
MultiLineBubbleTip
<
View
>
multiLineBubbleTip
;
// private DialogUtils dialog;
public
CustomMarkView
(
Context
context
)
{
contentView
=
LayoutInflater
.
from
(
context
).
inflate
(
R
.
layout
.
layout_markview
,
null
);
paint
=
new
Paint
();
paint
.
setAntiAlias
(
true
);
paint
.
setTextSize
(
DensityUtils
.
sp2px
(
context
,
13
));
paint
.
setStyle
(
Paint
.
Style
.
FILL
);
paint
.
setColor
(
Color
.
WHITE
);
bubbleTip
=
new
SingleLineBubbleTip
<
String
>(
context
,
R
.
drawable
.
bg
,
R
.
drawable
.
triangle1
,
paint
)
{
multiLineBubbleTip
=
new
MultiLineBubbleTip
<
View
>(
context
,
R
.
drawable
.
bg
,
0
,
paint
)
{
@Override
public
boolean
isShowTip
(
String
s
,
int
position
)
{
public
boolean
isShowTip
(
View
view
,
int
position
)
{
return
true
;
}
@Override
public
String
[]
format
(
View
view
,
int
position
)
{
return
new
String
[
0
];
}
};
bubbleTip
=
new
SingleLineBubbleTip
<
String
>(
context
,
R
.
drawable
.
bg
,
0
,
paint
)
{
@Override
public
boolean
isShowTip
(
String
s
,
int
position
)
{
return
false
;
}
@Override
public
String
format
(
String
s
,
int
position
)
{
return
s
;
}
...
...
@@ -66,10 +71,10 @@ public class CustomMarkView<C extends BarData> implements IMark<C> {
@Override
public
void
drawMark
(
Canvas
canvas
,
float
x
,
float
y
,
Rect
rect
,
String
content
,
BarData
data
,
int
position
)
{
//
String text = content + "---" + data.getChartYDataList().get(position) + "---" + data.getUnit();
String
text
=
content
+
"---"
+
data
.
getChartYDataList
().
get
(
position
)
+
"---"
+
data
.
getUnit
();
//
//
// bubbleTip.drawTip(canvas, x, y, rect, text
, position);
dialog
.
show
();
multiLineBubbleTip
.
drawTip
(
canvas
,
x
,
y
,
rect
,
contentView
,
position
);
//
dialog.show();
}
}
main/src/main/java/com/gingersoft/gsa/cloud/main/mvp/ui/view/SlidingMenu.java
View file @
38f09a7b
...
...
@@ -10,10 +10,9 @@ import android.widget.HorizontalScrollView;
import
android.widget.LinearLayout
;
import
com.daivd.chart.utils.DensityUtils
;
import
com.gingersoft.gsa.cloud.
main.R
;
import
com.gingersoft.gsa.cloud.
ui.view.utils.ShadowUtil
;
import
com.jess.arms.utils.ArmsUtils
;
import
com.nineoldandroids.view.ViewHelper
;
import
com.sxu.shadowdrawable.ShadowDrawable
;
/**
* des :SlidingMenu 侧边栏 侧滑菜单
...
...
@@ -112,7 +111,7 @@ public class SlidingMenu extends HorizontalScrollView {
return
;
this
.
smoothScrollTo
(
0
,
0
);
isOpen
=
true
;
Shadow
Drawable
.
setShadowDrawable
(
mContent
,
Color
.
parseColor
(
"#FFFFFF"
),
50
,
Shadow
Util
.
setShadowDrawable
(
mContent
,
Color
.
parseColor
(
"#FFFFFF"
),
50
,
Color
.
parseColor
(
"#73888888"
),
50
,
0
,
2
);
invalidate
();
}
...
...
main/src/main/res/drawable/tablayout_indicator.xml
0 → 100644
View file @
38f09a7b
<?xml version="1.0" encoding="utf-8"?>
<layer-list
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<!-- <item-->
<!-- android:left="15dp"-->
<!-- android:right="15dp">-->
<!-- 若不设置 gravity,则 Indicator 宽度会填满整个 item -->
<item
android:gravity=
"center_horizontal"
>
<shape>
<corners
android:radius=
"@dimen/dp_8"
/>
<size
android:width=
"@dimen/dp_22"
android:height=
"@dimen/dp_3"
/>
</shape>
</item>
</layer-list>
\ No newline at end of file
main/src/main/res/layout/activity_report.xml
0 → 100644
View file @
38f09a7b
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
xmlns:tools=
"http://schemas.android.com/tools"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:orientation=
"vertical"
>
<com.qmuiteam.qmui.widget.QMUITopBar
android:id=
"@+id/report_topbar"
android:layout_width=
"match_parent"
android:layout_height=
"?attr/qmui_topbar_height"
app:qmui_topbar_title_color=
"@color/theme_white_color"
/>
<com.google.android.material.tabs.TabLayout
android:id=
"@+id/table_layout"
android:layout_width=
"match_parent"
android:layout_height=
"@dimen/dp_42"
app:tabIndicator=
"@drawable/tablayout_indicator"
app:tabIndicatorColor=
"@color/theme_color"
app:tabIndicatorFullWidth=
"false"
/>
<androidx.viewpager.widget.ViewPager
android:id=
"@+id/report_viewpager"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
/>
</LinearLayout>
\ No newline at end of file
main/src/main/res/layout/fragment_business_report.xml
0 → 100644
View file @
38f09a7b
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:background=
"@color/theme_background_color"
android:orientation=
"vertical"
>
<LinearLayout
android:id=
"@+id/layout_business_chart"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginLeft=
"@dimen/dp_10"
android:layout_marginTop=
"@dimen/dp_10"
android:layout_marginRight=
"@dimen/dp_10"
android:orientation=
"vertical"
android:paddingBottom=
"@dimen/dp_15"
>
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginLeft=
"@dimen/dp_10"
android:layout_marginTop=
"@dimen/dp_10"
android:gravity=
"center_vertical"
android:orientation=
"horizontal"
>
<TextView
android:layout_width=
"0dp"
android:layout_height=
"wrap_content"
android:layout_weight=
"1"
android:text=
"營業金額"
android:textColor=
"#181818"
android:textSize=
"@dimen/sp_17"
/>
<TextView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"2020-02-14"
android:textColor=
"#181818"
android:textSize=
"@dimen/sp_10"
/>
<TextView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginLeft=
"@dimen/dp_7"
android:text=
"到"
android:textColor=
"#999"
android:textSize=
"@dimen/sp_10"
/>
<TextView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginLeft=
"@dimen/dp_7"
android:text=
"2020-02-14"
android:textColor=
"#181818"
android:textSize=
"@dimen/sp_10"
/>
</LinearLayout>
<com.daivd.chart.core.LineChart
android:layout_width=
"match_parent"
android:layout_height=
"@dimen/dp_130"
android:layout_marginTop=
"@dimen/dp_17"
/>
</LinearLayout>
<LinearLayout
android:id=
"@+id/layout_business_info"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginLeft=
"@dimen/dp_10"
android:layout_marginTop=
"@dimen/dp_10"
android:layout_marginRight=
"@dimen/dp_10"
android:orientation=
"vertical"
>
<TextView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginLeft=
"@dimen/dp_10"
android:layout_marginTop=
"@dimen/dp_10"
android:text=
"營業詳情"
android:textColor=
"#181818"
android:textSize=
"@dimen/sp_17"
/>
<TextView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_horizontal"
android:layout_marginTop=
"@dimen/dp_20"
android:text=
"餐廳名稱"
android:textColor=
"#3c3c3c"
android:textSize=
"@dimen/dp_16"
/>
<androidx.recyclerview.widget.RecyclerView
android:id=
"@+id/rv_restaurant"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"@dimen/dp_10"
/>
</LinearLayout>
</LinearLayout>
\ No newline at end of file
main/src/main/res/layout/fragment_main_top.xml
View file @
38f09a7b
...
...
@@ -93,7 +93,6 @@
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"@dimen/dp_35"
android:elevation=
"@dimen/dp_1"
android:paddingBottom=
"@dimen/dp_6"
android:textColor=
"#181818"
android:textSize=
"@dimen/sp_15"
...
...
@@ -118,7 +117,6 @@
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginBottom=
"@dimen/dp_10"
android:elevation=
"@dimen/dp_1"
android:text=
"更多報表 >"
android:textColor=
"#3c3c3c"
android:textSize=
"@dimen/sp_12"
...
...
main/src/main/res/layout/fragment_payment_method_report.xml
0 → 100644
View file @
38f09a7b
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:tools=
"http://schemas.android.com/tools"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:orientation=
"vertical"
>
</LinearLayout>
\ No newline at end of file
main/src/main/res/layout/fragment_sales.xml
0 → 100644
View file @
38f09a7b
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:tools=
"http://schemas.android.com/tools"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:orientation=
"vertical"
>
</LinearLayout>
\ No newline at end of file
print-module/src/main/java/com/joe/print/mvp/print/Print.java
View file @
38f09a7b
package
com
.
joe
.
print
.
mvp
.
print
;
import
android.content.Context
;
import
com.gingersoft.gsa.cloud.base.application.GsaCloudApplication
;
import
com.gingersoft.gsa.cloud.ui.widget.dialog.LoadingDialog
;
import
am.util.printer.PrintExecutor
;
import
am.util.printer.PrintSocketHolder
;
import
am.util.printer.PrinterWriter58mm
;
/**
* Created by Wyh on 2020/1/15.
*/
public
class
Print
implements
PrintSocketHolder
.
OnStateChangedListener
,
PrintExecutor
.
OnPrintResultListener
{
private
PrintExecutor
executor
;
private
SendPrint
maker
;
private
static
Print
print
;
private
Context
mContext
;
public
static
Print
getInstance
()
{
synchronized
(
Print
.
class
)
{
if
(
print
==
null
)
{
print
=
new
Print
();
}
}
return
print
;
}
public
void
printOrder
(
Context
context
)
{
this
.
mContext
=
context
;
LoadingDialog
.
showNewDialogForLoading
(
GsaCloudApplication
.
getAppContext
(),
"初始化..."
,
false
);
if
(
executor
==
null
)
{
executor
=
new
PrintExecutor
(
"192.168.1.217"
,
9100
,
PrinterWriter58mm
.
TYPE_58
);
executor
.
setOnStateChangedListener
(
this
);
executor
.
setOnPrintResultListener
(
this
);
}
if
(
maker
==
null
)
{
maker
=
new
SendPrint
(
context
,
255
,
580
);
}
executor
.
setIp
(
"192.168.1.218"
,
9100
);
executor
.
doPrinterRequestAsync
(
maker
);
}
@Override
public
void
onResult
(
int
errorCode
)
{
String
msg
;
switch
(
errorCode
)
{
case
PrintSocketHolder
.
ERROR_0
:
//打印成功
msg
=
"打印成功"
;
break
;
case
PrintSocketHolder
.
ERROR_2
:
//创建Socket失败
msg
=
"連接打印機失敗"
;
break
;
case
PrintSocketHolder
.
ERROR_1
:
case
PrintSocketHolder
.
ERROR_3
:
case
PrintSocketHolder
.
ERROR_4
:
case
PrintSocketHolder
.
ERROR_5
:
default
:
//打印失敗
msg
=
"打印失敗"
;
// LoadingDialog.cancelDialogForLoading();
break
;
}
LoadingDialog
.
setText
(
msg
);
}
@Override
public
void
onStateChanged
(
int
state
)
{
String
msg
=
""
;
switch
(
state
)
{
case
PrintSocketHolder
.
STATE_0
:
case
PrintSocketHolder
.
STATE_1
:
//创建Socket连接
msg
=
"連接打印機..."
;
break
;
case
PrintSocketHolder
.
STATE_2
:
case
PrintSocketHolder
.
STATE_3
:
//写入测试页面数据
msg
=
"正在打印..."
;
break
;
case
PrintSocketHolder
.
STATE_4
:
msg
=
"正在關閉..."
;
// LoadingDialog.cancelDialogForLoading();
break
;
}
LoadingDialog
.
setText
(
msg
);
}
}
//
package com.joe.print.mvp.print;
//
//
import android.content.Context;
//
//
import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication;
//
import com.gingersoft.gsa.cloud.ui.widget.dialog.LoadingDialog;
//
//
import am.util.printer.PrintExecutor;
//
import am.util.printer.PrintSocketHolder;
//
import am.util.printer.PrinterWriter58mm;
//
/
//
**
//
* Created by Wyh on 2020/1/15.
//
*/
//
public class Print implements PrintSocketHolder.OnStateChangedListener, PrintExecutor.OnPrintResultListener {
//
private PrintExecutor executor;
//
private SendPrint maker;
//
private static Print print;
//
private Context mContext;
//
public static Print getInstance() {
//
synchronized (Print.class) {
//
if (print == null) {
//
print = new Print();
//
}
//
}
//
return print;
//
}
//
//
public void printOrder(Context context) {
//
this.mContext = context;
//
LoadingDialog.showNewDialogForLoading(GsaCloudApplication.getAppContext(),"初始化...",false);
//
if (executor == null) {
//
executor = new PrintExecutor("192.168.1.217", 9100, PrinterWriter58mm.TYPE_58);
//
executor.setOnStateChangedListener(this);
//
executor.setOnPrintResultListener(this);
//
}
//
if (maker == null) {
//
maker = new SendPrint(context, 255, 580);
//
}
//
executor.setIp("192.168.1.218", 9100);
//
executor.doPrinterRequestAsync(maker);
//
}
//
//
//
@Override
//
public void onResult(int errorCode) {
//
String msg;
//
switch (errorCode) {
//
case PrintSocketHolder.ERROR_0:
//
//打印成功
//
msg = "打印成功";
//
break;
//
case PrintSocketHolder.ERROR_2:
//
//创建Socket失败
//
msg = "連接打印機失敗";
//
break;
//
case PrintSocketHolder.ERROR_1:
//
case PrintSocketHolder.ERROR_3:
//
case PrintSocketHolder.ERROR_4:
//
case PrintSocketHolder.ERROR_5:
//
default:
//
//打印失敗
//
msg = "打印失敗";
//
//
LoadingDialog.cancelDialogForLoading();
//
break;
//
}
//
LoadingDialog.setText(msg);
//
}
//
//
@Override
//
public void onStateChanged(int state) {
//
String msg = "";
//
switch (state) {
//
case PrintSocketHolder.STATE_0:
//
case PrintSocketHolder.STATE_1:
//
//创建Socket连接
//
msg = "連接打印機...";
//
break;
//
case PrintSocketHolder.STATE_2:
//
case PrintSocketHolder.STATE_3:
//
//写入测试页面数据
//
msg = "正在打印...";
//
break;
//
case PrintSocketHolder.STATE_4:
//
msg = "正在關閉...";
//
//
LoadingDialog.cancelDialogForLoading();
//
break;
//
}
//
LoadingDialog.setText(msg);
//
}
//
}
public-base/build.gradle
View file @
38f09a7b
...
...
@@ -78,5 +78,8 @@ dependencies {
implementation
'org.greenrobot:greendao:3.2.2'
implementation
'org.greenrobot:greendao-generator:3.2.2'
implementation
rootProject
.
ext
.
dependencies
[
"BaseRecyclerViewAdapter"
]
implementation
'com.android.support:design:28.0.0'
//陰影背景
implementation
'com.github.Liberuman:ShadowDrawable:0.1'
}
public-base/src/main/java/com/gingersoft/gsa/cloud/database/bean/PrinterDeviceBean.java
View file @
38f09a7b
...
...
@@ -38,13 +38,6 @@ public class PrinterDeviceBean implements Serializable {
this
.
type
=
type
;
}
public
PrinterDeviceBean
(
int
id
,
String
ip
,
int
port
,
int
type
)
{
this
.
id
=
id
;
this
.
ip
=
ip
;
this
.
port
=
port
;
this
.
type
=
type
;
}
public
PrinterDeviceBean
(
Integer
restaurantId
,
String
ip
,
int
port
,
int
type
)
{
this
.
restaurantId
=
restaurantId
;
...
...
public-base/src/main/java/com/gingersoft/gsa/cloud/ui/adapter/TabFragmentAdapter.java
0 → 100644
View file @
38f09a7b
package
com
.
gingersoft
.
gsa
.
cloud
.
ui
.
adapter
;
import
java.util.List
;
import
androidx.annotation.NonNull
;
import
androidx.fragment.app.Fragment
;
import
androidx.fragment.app.FragmentManager
;
import
androidx.fragment.app.FragmentStatePagerAdapter
;
/**
* Created by Wyh on 2020/2/24.
*/
public
class
TabFragmentAdapter
extends
FragmentStatePagerAdapter
{
private
List
<
Fragment
>
mFragments
;
public
TabFragmentAdapter
(
@NonNull
FragmentManager
fm
,
int
behavior
)
{
super
(
fm
,
behavior
);
}
public
void
setFragments
(
List
<
Fragment
>
fragments
)
{
mFragments
=
fragments
;
notifyDataSetChanged
();
}
@NonNull
@Override
public
Fragment
getItem
(
int
position
)
{
return
mFragments
.
get
(
position
);
}
@Override
public
int
getCount
()
{
return
mFragments
==
null
?
0
:
mFragments
.
size
();
}
}
public-base/src/main/java/com/gingersoft/gsa/cloud/ui/view/utils/ShadowUtil.java
0 → 100644
View file @
38f09a7b
package
com
.
gingersoft
.
gsa
.
cloud
.
ui
.
view
.
utils
;
import
android.graphics.Color
;
import
android.view.View
;
import
com.sxu.shadowdrawable.ShadowDrawable
;
import
static
com
.
qmuiteam
.
qmui
.
util
.
QMUIDisplayHelper
.
dpToPx
;
/**
* Created by Wyh on 2020/2/24.
*/
public
class
ShadowUtil
{
public
static
void
setShadowDrawable
(
View
view
)
{
ShadowDrawable
.
setShadowDrawable
(
view
,
Color
.
parseColor
(
"#FFFFFF"
),
dpToPx
(
5
),
Color
.
parseColor
(
"#73888888"
),
dpToPx
(
5
),
0
,
2
);
}
public
static
void
setShadowDrawable
(
View
view
,
int
bgColor
,
int
shapeRadius
,
int
shadowColor
,
int
shadowRadius
,
int
offsetX
,
int
offsetY
)
{
ShadowDrawable
.
setShadowDrawable
(
view
,
bgColor
,
shapeRadius
,
shadowColor
,
shadowRadius
,
offsetX
,
offsetY
);
}
}
public-base/src/main/res/layout/include_layout_line.xml
0 → 100644
View file @
38f09a7b
<?xml version="1.0" encoding="utf-8"?>
<View
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:layout_width=
"match_parent"
android:layout_height=
"@dimen/dp_1"
android:background=
"@color/line_color2"
/>
public-base/src/main/res/layout/layout_table_item.xml
0 → 100644
View file @
38f09a7b
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:layout_width=
"wrap_content"
android:layout_height=
"match_parent"
android:gravity=
"center"
android:orientation=
"vertical"
>
<TextView
android:id=
"@+id/tv_tab"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:textColor=
"@color/theme_color"
android:textSize=
"@dimen/sp_14"
/>
</LinearLayout>
\ No newline at end of file
public-base/src/main/res/values/colors.xml
View file @
38f09a7b
...
...
@@ -409,6 +409,7 @@
<color
name=
"color_ccc"
>
#CCC
</color>
<color
name=
"line_color"
>
#CCC
</color>
<color
name=
"line_color2"
>
#F0F0F0
</color>
<color
name=
"scroll_bar_color"
>
#CACACA
</color>
<color
name=
"hint_color"
>
#676767
</color>
...
...
table-mode/src/main/java/com/gingersoft/gsa/cloud/table/mvp/presenter/MealStandPresenter.java
View file @
38f09a7b
...
...
@@ -12,18 +12,13 @@ import com.gingersoft.gsa.cloud.base.common.bean.OrderDetail;
import
com.gingersoft.gsa.cloud.base.common.bean.mealManage.MyOrderManage
;
import
com.gingersoft.gsa.cloud.base.common.bean.mealManage.OpenTableManage
;
import
com.gingersoft.gsa.cloud.base.utils.JsonUtils
;
import
com.gingersoft.gsa.cloud.base.utils.LanguageUtils
;
import
com.gingersoft.gsa.cloud.database.bean.Combo
;
import
com.gingersoft.gsa.cloud.database.bean.Modifier
;
import
com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean
;
import
com.gingersoft.gsa.cloud.table.mvp.model.bean.BaseRespose
;
import
com.gingersoft.gsa.cloud.database.bean.Food
;
import
com.gingersoft.gsa.cloud.database.bean.Modifier
;
import
com.gingersoft.gsa.cloud.database.utils.FoodDaoUtils
;
import
com.gingersoft.gsa.cloud.table.R
;
import
com.gingersoft.gsa.cloud.table.mvp.contract.MealStandContract
;
import
com.gingersoft.gsa.cloud.table.mvp.model.bean.BaseRespose
;
import
com.gingersoft.gsa.cloud.table.mvp.model.bean.request.DeleteOrderRequest
;
import
com.gingersoft.gsa.cloud.table.mvp.model.bean.request.OrderRequest
;
import
com.gingersoft.gsa.cloud.table.mvp.model.constant.MealConstant
;
import
com.gingersoft.gsa.cloud.table.mvp.ui.activity.MealStandActivity
;
...
...
@@ -33,7 +28,6 @@ import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.SelectMealAdapter;
import
com.jess.arms.di.scope.ActivityScope
;
import
com.jess.arms.http.imageloader.ImageLoader
;
import
com.jess.arms.integration.AppManager
;
import
com.jess.arms.mvp.BasePresenter
;
import
com.jess.arms.utils.RxLifecycleUtils
;
import
com.qmuiteam.qmui.widget.dialog.QMUIDialog
;
import
com.qmuiteam.qmui.widget.dialog.QMUIDialogAction
;
...
...
@@ -42,16 +36,10 @@ import org.simple.eventbus.EventBus;
import
org.simple.eventbus.Subscriber
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.Collections
;
import
java.util.Comparator
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
javax.inject.Inject
;
import
androidx.core.content.res.TypedArrayUtils
;
import
io.reactivex.android.schedulers.AndroidSchedulers
;
import
io.reactivex.annotations.NonNull
;
import
io.reactivex.schedulers.Schedulers
;
...
...
@@ -319,7 +307,7 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod
public
void
onNext
(
@NonNull
BaseResult
info
)
{
if
(
info
!=
null
&&
info
.
isSuccess
())
{
mRootView
.
showMessage
(
"送單成功"
);
//
printSendOrder(MyOrderManage.getInstance().getOrderFoodList());
printSendOrder
(
MyOrderManage
.
getInstance
().
getOrderFoodList
());
IActivity
.
returnTableActivity
(
true
);
}
else
{
mRootView
.
showMessage
(
"送單失敗"
);
...
...
@@ -351,9 +339,9 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod
//通知更新餐台状态
EventBus
.
getDefault
().
post
(
OpenTableManage
.
getDefault
().
getTableBean
().
getId
(),
"initTable_status_event"
);
}
printSendOrder
(
newFoods
);
mRootView
.
killMyself
();
// mRootView.launchActivity(new Intent(IActivity, MealStandActivity.class));
// printSendOrder(newFoods);
}
else
{
mRootView
.
showMessage
(
"送單失敗"
);
}
...
...
@@ -365,15 +353,14 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod
* 打印上菜紙
*/
private
void
printSendOrder
(
List
<
OrderDetail
>
newFoods
)
{
MyOrderManage
.
getInstance
().
setNewFoodList
(
newFoods
);
CC
.
obtainBuilder
(
"Component.Print"
)
.
setActionName
(
"printActivity"
)
.
addParam
(
"NewFoods"
,
newFoods
)
.
addParam
(
"type"
,
3
)
.
build
()
.
callAsync
((
cc
,
result
)
->
{
if
(
result
.
isSuccess
())
{
//打印成功
mRootView
.
killMyself
();
}
});
...
...
table-mode/src/main/java/com/gingersoft/gsa/cloud/table/mvp/presenter/OrderContentPresenter.java
View file @
38f09a7b
...
...
@@ -3,6 +3,7 @@ package com.gingersoft.gsa.cloud.table.mvp.presenter;
import
android.app.Application
;
import
android.graphics.Color
;
import
android.view.View
;
import
com.billy.cc.core.component.CC
;
import
com.gingersoft.gsa.cloud.base.common.bean.BaseResult
;
import
com.gingersoft.gsa.cloud.base.common.bean.OrderBean
;
...
...
@@ -10,12 +11,9 @@ import com.gingersoft.gsa.cloud.base.common.bean.OrderDetail;
import
com.gingersoft.gsa.cloud.base.common.bean.mealManage.MyOrderManage
;
import
com.gingersoft.gsa.cloud.base.common.bean.mealManage.OpenTableManage
;
import
com.gingersoft.gsa.cloud.base.utils.JsonUtils
;
import
com.gingersoft.gsa.cloud.base.utils.PrintUtils
;
import
com.gingersoft.gsa.cloud.database.bean.PrinterDeviceBean
;
import
com.gingersoft.gsa.cloud.table.mvp.model.bean.BaseRespose
;
import
com.gingersoft.gsa.cloud.database.bean.Food
;
import
com.gingersoft.gsa.cloud.database.bean.Function
;
import
com.gingersoft.gsa.cloud.table.mvp.contract.OrderContentContract
;
import
com.gingersoft.gsa.cloud.table.mvp.model.bean.BaseRespose
;
import
com.gingersoft.gsa.cloud.table.mvp.model.bean.request.OrderRequest
;
import
com.gingersoft.gsa.cloud.table.mvp.ui.activity.MealStandActivity
;
import
com.gingersoft.gsa.cloud.table.mvp.ui.activity.OrderContentActivity
;
...
...
@@ -157,6 +155,7 @@ public class OrderContentPresenter extends BaseOrderPresenter<OrderContentContra
if
(
info
!=
null
&&
info
.
isSuccess
())
{
mRootView
.
sendSuccess
();
mRootView
.
showMessage
(
"送單成功"
);
printSendOrder
(
getOrderFoodLists
());
mAppManager
.
killActivity
(
MealStandActivity
.
class
);
mRootView
.
killMyself
();
}
else
{
...
...
@@ -185,6 +184,7 @@ public class OrderContentPresenter extends BaseOrderPresenter<OrderContentContra
public
void
onNext
(
@NonNull
BaseResult
info
)
{
if
(
info
!=
null
&&
info
.
isSuccess
())
{
mRootView
.
showMessage
(
"送單成功"
);
printSendOrder
(
newFoods
);
mRootView
.
sendSuccess
();
// mRootView.launchActivity(new Intent(IActivity, MealStandActivity.class));
}
else
{
...
...
@@ -193,7 +193,35 @@ public class OrderContentPresenter extends BaseOrderPresenter<OrderContentContra
}
});
}
/**
* 打印上菜紙
*/
private
void
printSendOrder
(
List
<
OrderDetail
>
newFoods
)
{
MyOrderManage
.
getInstance
().
setNewFoodList
(
newFoods
);
CC
.
obtainBuilder
(
"Component.Print"
)
.
setActionName
(
"printActivity"
)
.
addParam
(
"type"
,
3
)
.
build
()
.
callAsync
((
cc
,
result
)
->
{
if
(
result
.
isSuccess
())
{
//打印成功
}
});
//打印上菜紙
// CC.obtainBuilder("Component.Print")
// .setActionName("printActivity")
// .addParam("NewFoods", newFoods)
// .addParam("type", 0)
// .build()
// .callAsync((cc, result) -> {
// if (result.isSuccess()) {
// //打印成功
// mRootView.killMyself();
// }
// });
}
public
void
printOrder
(
int
tableId
)
{
RequestBody
requestBody
=
new
FormBody
.
Builder
()
...
...
user-login/src/main/java/com/gingersoft/gsa/cloud/user/login/mvp/ui/activity/LoginActivity.java
View file @
38f09a7b
...
...
@@ -8,19 +8,18 @@ import android.view.View;
import
com.billy.cc.core.component.CC
;
import
com.gingersoft.gsa.cloud.base.application.GsaCloudApplication
;
import
com.gingersoft.gsa.cloud.base.utils.gson.GsonUtils
;
import
com.gingersoft.gsa.cloud.ui.bean.view.SectionTextItem
;
import
com.gingersoft.gsa.cloud.base.utils.toast.ToastUtils
;
import
com.gingersoft.gsa.cloud.ui.bean.mode.LoginBean
;
import
com.gingersoft.gsa.cloud.ui.view.MyEditText
;
import
com.gingersoft.gsa.cloud.ui.widget.dialog.ChooseRestaurantDialog
;
import
com.gingersoft.gsa.cloud.user.login.R
;
import
com.gingersoft.gsa.cloud.user.login.R2
;
import
com.gingersoft.gsa.cloud.user.login.di.component.DaggerLoginComponent
;
import
com.gingersoft.gsa.cloud.ui.bean.mode.LoginBean
;
import
com.gingersoft.gsa.cloud.user.login.mvp.contract.LoginContract
;
import
com.gingersoft.gsa.cloud.user.login.mvp.presenter.LoginPresenter
;
import
com.jess.arms.base.BaseActivity
;
import
com.jess.arms.di.component.AppComponent
;
import
com.jess.arms.utils.ArmsUtils
;
import
com.gingersoft.gsa.cloud.user.login.mvp.contract.LoginContract
;
import
com.gingersoft.gsa.cloud.user.login.mvp.presenter.LoginPresenter
;
import
com.gingersoft.gsa.cloud.base.utils.toast.ToastUtils
;
import
com.gingersoft.gsa.cloud.ui.view.MyEditText
;
import
java.io.IOException
;
import
java.util.List
;
...
...
@@ -143,22 +142,18 @@ public class LoginActivity extends BaseActivity<LoginPresenter> implements Login
if
(
loginBean
.
getData
().
getUser
()
!=
null
)
{
GsaCloudApplication
.
setMemberId
(
LoginActivity
.
this
,
loginBean
.
getData
().
getUser
().
getUserId
());
GsaCloudApplication
.
setMemberName
(
LoginActivity
.
this
,
loginBean
.
getData
().
getUser
().
getUserName
());
GsaCloudApplication
.
setMemberId
(
mContext
,
loginBean
.
getData
().
getUser
().
getUserId
());
GsaCloudApplication
.
setMemberName
(
mContext
,
loginBean
.
getData
().
getUser
().
getUserName
());
if
(
loginBean
.
getData
().
getUser
().
getBrands
()
!=
null
)
{
int
restaurantSize
=
getRestaurantSize
(
loginBean
.
getData
().
getUser
().
getBrands
());
// if (restaurantSize > 1) {
new
ChooseRestaurantDialog
.
BottomListSheetBuilder
(
this
)
.
addBrandItems
(
loginBean
.
getData
().
getUser
().
getBrands
())
.
setOnItemClickListener
(
new
ChooseRestaurantDialog
.
BottomListSheetBuilder
.
OnItemClickListener
()
{
@Override
public
void
onItemClick
(
SectionTextItem
item
,
int
position
)
{
GsaCloudApplication
.
setRestaurantId
(
LoginActivity
.
this
,
item
.
getId
());
jumpActivity
();
killMyself
();
}
.
setOnItemClickListener
((
item
,
position
)
->
{
GsaCloudApplication
.
setRestaurantId
(
mContext
,
item
.
getId
());
jumpActivity
();
killMyself
();
})
.
build
()
.
show
();
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment