瀏覽代碼

修复整车修改车牌时多出一个车牌bug

qzyReal 3 年之前
父節點
當前提交
e14e1550e0
共有 32 個文件被更改,包括 2278 次插入2227 次删除
  1. 88 91
      app/manifest.json
  2. 2 2
      app/utils/request.js
  3. 320 328
      sp-admin/sa-frame/menu-list.js
  4. 8 0
      sp-admin/sa-view-sp/console/com-sta-data.vue
  5. 0 168
      sp-admin/sa-view/tb-business-car/tb-business-car-add.html
  6. 1 0
      sp-admin/sa-view/tb-business/tb-car-disincle-list.html
  7. 24 5
      sp-admin/sa-view/tb-business/tb-supplement-list.html
  8. 278 273
      sp-admin/sa-view/tb-fee-statistics/tb-fee-details-list.html
  9. 1380 1319
      sp-admin/static/sa.js
  10. 1 0
      sp-server/pom.xml
  11. 1 1
      sp-server/src/main/java/com/pj/api/invoice/service/InvoiceApplyService.java
  12. 2 0
      sp-server/src/main/java/com/pj/api/jh/service/JhService.java
  13. 25 10
      sp-server/src/main/java/com/pj/api/open/service/OpenService.java
  14. 7 3
      sp-server/src/main/java/com/pj/api/pushfee/oa/OaJudgeController.java
  15. 2 0
      sp-server/src/main/java/com/pj/current/config/MyConfig.java
  16. 1 0
      sp-server/src/main/java/com/pj/current/config/PartConfig.java
  17. 45 0
      sp-server/src/main/java/com/pj/current/satoken/SaTokenConfigure.java
  18. 6 0
      sp-server/src/main/java/com/pj/current/satoken/StpUserUtil.java
  19. 1 0
      sp-server/src/main/java/com/pj/current/task/TokenTask.java
  20. 11 7
      sp-server/src/main/java/com/pj/project/tb_business/TbBusinessController.java
  21. 1 0
      sp-server/src/main/java/com/pj/project/tb_business/TbBusinessMapper.xml
  22. 13 8
      sp-server/src/main/java/com/pj/project/tb_business/TbBusinessService.java
  23. 1 1
      sp-server/src/main/java/com/pj/project/tb_business_car/TbBusinessCarMapper.java
  24. 6 0
      sp-server/src/main/java/com/pj/project/tb_business_car/TbBusinessCarMapper.xml
  25. 10 2
      sp-server/src/main/java/com/pj/project/tb_business_car/TbBusinessCarService.java
  26. 4 1
      sp-server/src/main/java/com/pj/project/tb_fee_details/TbFeeDetailsMapper.xml
  27. 1 0
      sp-server/src/main/java/com/pj/project/tb_fee_details/TbFeeDetailsService.java
  28. 25 0
      sp-server/src/main/java/com/pj/project4sp/admin4login/SpAccAdminController.java
  29. 7 3
      sp-server/src/main/java/com/pj/project4sp/admin4login/SpAccAdminService.java
  30. 4 2
      sp-server/src/main/resources/application-dev.yml
  31. 3 3
      sp-server/src/main/resources/logback.xml
  32. 二進制
      sp-server/src/main/resources/static/day-fee-new.xlsx

+ 88 - 91
app/manifest.json

@@ -1,98 +1,95 @@
 {
-  "name": "场站管理系统",
-  "appid": "__UNI__8AC923A",
-  "description": "",
-  "versionName": "1.0.0",
-  "versionCode": "100",
-  "transformPx": false,
-  /* 5+App特有相关 */
-  "app-plus": {
-    "usingComponents": true,
-    "nvueStyleCompiler": "uni-app",
-    "compilerVersion": 3,
-    "splashscreen": {
-      "alwaysShowBeforeRender": true,
-      "waiting": true,
-      "autoclose": true,
-      "delay": 0
+    "name" : "场站管理系统",
+    "appid" : "__UNI__8AC923A",
+    "description" : "",
+    "versionName" : "1.0.0",
+    "versionCode" : "100",
+    "transformPx" : false,
+    /* 5+App特有相关 */
+    "app-plus" : {
+        "usingComponents" : true,
+        "nvueStyleCompiler" : "uni-app",
+        "compilerVersion" : 3,
+        "splashscreen" : {
+            "alwaysShowBeforeRender" : true,
+            "waiting" : true,
+            "autoclose" : true,
+            "delay" : 0
+        },
+        /* 模块配置 */
+        "modules" : {
+            "Payment" : {}
+        },
+        /* 应用发布信息 */
+        "distribute" : {
+            /* android打包配置 */
+            "android" : {
+                "permissions" : [
+                    "<uses-feature android:name=\"android.hardware.camera\"/>",
+                    "<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
+                    "<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>",
+                    "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.CAMERA\"/>",
+                    "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
+                    "<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
+                    "<uses-permission android:name=\"android.permission.INTERNET\"/>",
+                    "<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>",
+                    "<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
+                    "<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
+                    "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.VIBRATE\"/>",
+                    "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
+                    "<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>",
+                    "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
+                ]
+            },
+            /* ios打包配置 */
+            "ios" : {},
+            /* SDK配置 */
+            "sdkConfigs" : {
+                "payment" : {
+                    "weixin" : {
+                        "__platform__" : [ "ios", "android" ],
+                        "appid" : "",
+                        "UniversalLinks" : ""
+                    }
+                }
+            }
+        }
     },
-    /* 模块配置 */
-    "modules": {
-      "Payment": {}
+    /* 快应用特有相关 */
+    "quickapp" : {},
+    /* 小程序特有相关 */
+    "mp-weixin" : {
+        "appid" : "",
+        "setting" : {
+            "urlCheck" : false
+        },
+        "usingComponents" : true
     },
-    /* 应用发布信息 */
-    "distribute": {
-      /* android打包配置 */
-      "android": {
-        "permissions": [
-          "<uses-feature android:name=\"android.hardware.camera\"/>",
-          "<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
-          "<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>",
-          "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
-          "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
-          "<uses-permission android:name=\"android.permission.CAMERA\"/>",
-          "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
-          "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
-          "<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
-          "<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
-          "<uses-permission android:name=\"android.permission.INTERNET\"/>",
-          "<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>",
-          "<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
-          "<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
-          "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
-          "<uses-permission android:name=\"android.permission.VIBRATE\"/>",
-          "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
-          "<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>",
-          "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
-        ]
-      },
-      /* ios打包配置 */
-      "ios": {},
-      /* SDK配置 */
-      "sdkConfigs": {
-        "payment": {
-          "weixin": {
-            "__platform__": [
-              "ios",
-              "android"
-            ],
-            "appid": "",
-            "UniversalLinks": ""
-          }
-        }
-      }
-    }
-  },
-  /* 快应用特有相关 */
-  "quickapp": {},
-  /* 小程序特有相关 */
-  "mp-weixin": {
-    "appid": "",
-    "setting": {
-      "urlCheck": false
+    "mp-alipay" : {
+        "usingComponents" : true
     },
-    "usingComponents": true
-  },
-  "mp-alipay": {
-    "usingComponents": true
-  },
-  "mp-baidu": {
-    "usingComponents": true
-  },
-  "mp-toutiao": {
-    "usingComponents": true
-  },
-  "uniStatistics": {
-    "enable": false
-  },
-  "vueVersion": "2",
-  "h5": {
-    "router": {
-      "base": "/h5/",
-      "mode": "history"
+    "mp-baidu" : {
+        "usingComponents" : true
     },
-    "devServer": {
-      "https": true
+    "mp-toutiao" : {
+        "usingComponents" : true
+    },
+    "uniStatistics" : {
+        "enable" : false
+    },
+    "vueVersion" : "2",
+    "h5" : {
+        "router" : {
+            "base" : "/h5/",
+            "mode" : "history"
+        },
+        "devServer" : {
+            "https" : false
+        }
     }
-  }
 }

+ 2 - 2
app/utils/request.js

@@ -1,5 +1,5 @@
-const server = 'http://127.0.0.1:8099/pro';
-// const server = 'https://pco.aseanbusiness.cn/pro';
+// const server = 'http://127.0.0.1:8099/pro';
+const server = 'https://pco.aseanbusiness.cn/pro';
 // const server = 'https://dxkaa1.bgigc.com/pro';
 
 import common from '../common/js/common.js';

+ 320 - 328
sp-admin/sa-frame/menu-list.js

@@ -1,7 +1,6 @@
-
-
 // 定义菜单列表 
-var menuList = [{
+var menuList = [
+	{
 		id: 'auth',
 		parent: true,
 		name: '权限控制',
@@ -199,71 +198,70 @@ var menuList = [{
 							name: '删除用户',
 							isShow: false,
 
-                        },
-                    ]
-                },
-            ],
-        },]
-    },
-    {
-        id: 'tb-car',
-        name: '车辆管理',
-        parent: true,
-        icon: 'el-icon-s-platform',
-        childList: [{
-            id: 'tb-car-list',
-            name: '车辆列表',
-            icon: 'el-icon-s-platform',
-            url: 'sa-view/tb-car/tb-car-list.html',
-            childList: [{
-                id: 'tb-car-add',
-                name: '添加车辆',
-                isShow: false
-            },
-                {
-                    id: 'tb-car-edit',
-                    name: '编辑车辆',
-                    isShow: false
-                },
-                {
-                    id: 'tb-car-del',
-                    name: '删除车辆',
-                    isShow: false
-                },
-                {
-                    id: 'tb-car-import',
-                    name: '批量导入',
-                    isShow: false
-                },
-            ]
-        }]
-    },
-    {
-        id: 'tb-business-item',
-        name: '作业管理',
-        icon: 'el-icon-edit-outline',
-        parent: true,
-        childList: [
-            {
-                id: 'tb-business-item-pick-list',
-                name: '我要接单',
-                url: 'sa-view/tb-partner/tb-business-pick-list.html',
-                childList: [{
-                    id: 'tb-business-item-pick',
-                    name: '接单',
-                    isShow: false,
-                }]
-            },
-            {
-                id: 'tb-business-item-list',
-                name: '作业订单',
-                url: 'sa-view/tb-partner/tb-business-item-list.html',
-                childList: [{
-                    id: 'tb-business-item-confirm',
-                    name: '接单确认',
-                    isShow: false,
-                },]
-            },
+						},
+					]
+				},
+			],
+		}, ]
+	},
+	{
+		id: 'tb-car',
+		name: '车辆管理',
+		parent: true,
+		icon: 'el-icon-s-platform',
+		childList: [{
+			id: 'tb-car-list',
+			name: '车辆列表',
+			icon: 'el-icon-s-platform',
+			url: 'sa-view/tb-car/tb-car-list.html',
+			childList: [{
+					id: 'tb-car-add',
+					name: '添加车辆',
+					isShow: false
+				},
+				{
+					id: 'tb-car-edit',
+					name: '编辑车辆',
+					isShow: false
+				},
+				{
+					id: 'tb-car-del',
+					name: '删除车辆',
+					isShow: false
+				},
+				{
+					id: 'tb-car-import',
+					name: '批量导入',
+					isShow: false
+				},
+			]
+		}]
+	},
+	{
+		id: 'tb-business-item',
+		name: '作业管理',
+		icon: 'el-icon-edit-outline',
+		parent: true,
+		childList: [{
+				id: 'tb-business-item-pick-list',
+				name: '我要接单',
+				url: 'sa-view/tb-partner/tb-business-pick-list.html',
+				childList: [{
+					id: 'tb-business-item-pick',
+					name: '接单',
+					isShow: false,
+				}]
+			},
+			{
+				id: 'tb-business-item-list',
+				name: '作业订单',
+				url: 'sa-view/tb-partner/tb-business-item-list.html',
+				childList: [{
+					id: 'tb-business-item-confirm',
+					name: '接单确认',
+					isShow: false,
+				}, ]
+			},
 
 		]
 	},
@@ -272,8 +270,7 @@ var menuList = [{
 		name: '业务管理',
 		icon: 'el-icon-edit-outline',
 		parent: true,
-		childList: [
-			{
+		childList: [{
 				id: 'tb-car-disincle-list',
 				name: '业务管理',
 				url: 'sa-view/tb-business/tb-car-disincle-list.html',
@@ -299,49 +296,48 @@ var menuList = [{
 					},
 					{
 
-                        id: 'tb-business-car-bind',
-                        name: '车辆绑定',
-                        isShow: false
-                    },
-                    {
-                        id: 'tb-flex-business-confirm',
-                        name: '账单确认',
-                        isShow: false
-                    },
-                    {
-                        id: 'tb-business-zx-print',
-                        name: '装卸打印',
-                        isShow: false
-                    },
-                ]
-            },
-            {
-                id: 'tb-supplement-list',
-                name: '补录订单',
-                url: 'sa-view/tb-business/tb-supplement-list.html',
-                childList:[
-                    {
-                        id: 'tb-supplement-add',
-                        name: '添加',
-                        isShow: false
-                    },
-                    {
-                        id: 'tb-supplement-edit',
-                        name: '修改',
-                        isShow: false
-                    },
-                    {
-                        id: 'tb-supplement-del',
-                        name: '删除',
-                        isShow: false
-                    },
-                    {
-                        id: 'tb-supplement-push',
-                        name: '发起流程',
-                        isShow: false
-                    },
-                ]
-            }
+						id: 'tb-business-car-bind',
+						name: '车辆绑定',
+						isShow: false
+					},
+					{
+						id: 'tb-flex-business-confirm',
+						name: '账单确认',
+						isShow: false
+					},
+					{
+						id: 'tb-business-zx-print',
+						name: '装卸打印',
+						isShow: false
+					},
+				]
+			},
+			{
+				id: 'tb-supplement-list',
+				name: '补录订单',
+				url: 'sa-view/tb-business/tb-supplement-list.html',
+				childList: [{
+						id: 'tb-supplement-add',
+						name: '添加',
+						isShow: false
+					},
+					{
+						id: 'tb-supplement-edit',
+						name: '修改',
+						isShow: false
+					},
+					{
+						id: 'tb-supplement-del',
+						name: '删除',
+						isShow: false
+					},
+					{
+						id: 'tb-supplement-push',
+						name: '发起流程',
+						isShow: false
+					},
+				]
+			}
 
 		]
 	},
@@ -571,221 +567,217 @@ var menuList = [{
 			name: '申报列表',
 			url: 'sa-view/tb-declare/tb-declare-list.html',
 
-            childList: [{
-                id: 'tb-declare-print',
-                name: '打印申报信息',
-                isShow: false
-            },
-                {
-                    id: 'tb-declare-edit',
-                    name: '修改申报信息',
-                    isShow: false
-                },
-                {
-                    id: 'tb-declare-del',
-                    name: '删除申报信息',
-                    isShow: false
-                },
-            ]
-        },]
-    }, {
-        id: 'tb-disinfect',
-        name: '消毒信息',
-        icon: 'el-icon-folder-opened',
-        parent: true,
-        childList: [{
-            id: 'tb-disinfect-list',
-            name: '申请列表',
-            url: 'sa-view/tb-disinfect/tb-disinfect-list.html',
-            childList: [{
-                id: 'tb-disinfect-print',
-                name: '打印信息',
-                isShow: false
-            },
-                {
-                    id: 'tb-disinfect-edit',
-                    name: '修改信息',
-                    isShow: false
-                },
-                {
-                    id: 'tb-disinfect-del',
-                    name: '删除信息',
-                    isShow: false
-                },
-            ]
-        },]
-    }, {
-        id: 'tb-discount',
-        name: '折扣管理',
-        icon: 'el-icon-folder-opened',
-        parent: true,
-        childList: [{
-            id: 'tb-discount-list',
-            name: '折扣管理',
-            url: 'sa-view/tb-discount/tb-discount-list.html',
-            childList: [{
-                id: 'tb-discount-add',
-                name: '添加折扣',
-                isShow: false
-            },
-                {
-                    id: 'tb-discount-del',
-                    name: '删除',
-                    isShow: false
-                },
-                {
-                    id: 'tb-discount-edit',
-                    name: '编辑',
-                    isShow: false
-                },
-                {
-                    id: 'tb-discount-change',
-                    name: '启用/停用',
-                    isShow: false
-                },
-            ]
-        },]
-    }, {
-        id: 'tb-fee-statistics',
-        name: '收费统计',
-        icon: 'el-icon-folder-opened',
-        parent: true,
-        childList: [{
-            id: 'tb-fee-details-list',
-            name: '收费明细',
-            url: 'sa-view/tb-fee-statistics/tb-fee-details-list.html',
-            childList: [
-                {
-                    id: 'tb-kaidan-confirm',
-                    name: '开单确认',
-                    isShow: false
-                },
-                {
-                    id: 'tb-diaodu-confirm',
-                    name: '复核确认',
-                    isShow: false
-                },
-                {
-                    id: 'tb-jicha-confirm',
-                    name: '稽查确认',
-                    isShow: false
-                },
-                {
-                    id: 'tb-jicha-cancel',
-                    name: '取消确认',
-                    isShow: false
-                },
-
-            ]
-        },
-            {
-                id: 'tb-fee-statistics-list',
-                name: '日统计',
-                url: 'sa-view/tb-fee-statistics/tb-fee-statistics-list.html'
-            },
-            {
-                id: 'month-statistcs-list',
-                name: '月统计',
-                url: 'sa-view/tb-fee-statistics/month-statistcs-list.html'
-            },
-            {
-                id: 'year-statistcs-list',
-                name: '年统计',
-                url: 'sa-view/tb-fee-statistics/year-statistcs-list.html'
-            },
-        ]
-    },
-    {
-        id: 'tb-invoice-info',
-        name: '开票管理',
-        icon: 'el-icon-folder-opened',
-        parent: true,
-        childList: [
-            {
-                id: 'tb-entity-list',
-                name: '开票主体',
-                url: 'sa-view/tb-entity/tb-entity-list.html'
-            },
-            {
-                id: 'tb-invoice-order-list',
-                name: '开票订单',
-                url: 'sa-view/tb-invoice-order/tb-invoice-order-list.html'
-            },
-            {
-                id: 'tb-invoice-info-list',
-                name: '开票信息',
-                url: 'sa-view/tb-invoice-info/tb-invoice-info-list.html'
-            },
-        ]
-    },
-    {
-        id: 'tb-account',
-        name: '预存款管理',
-        icon: 'el-icon-folder-opened',
-        parent: true,
-        childList: [{
-            id: 'tb-account-list',
-            name: '客户充值',
-            url: 'sa-view/tb-account/tb-account-list.html',
-            childList: [{
-                id: 'tb-account-list-add',
-                name: '充值',
-                isShow: false,
-            },
-                {
-                    id: 'tb-account-list-update',
-                    name: '修改',
-                    isShow: false,
-                }
-            ]
-         },
-            {
-                id: 'tb-charge-record-list',
-                name: '充值记录',
-                url: 'sa-view/tb-charge-record/tb-charge-record-list.html',
-                childList: [{
-                    id: 'tb-charge-record-list-print',
-                    name: '打印单据',
-                    isShow: false,
-                },
-                    {
-                        id: 'tb-charge-record-list-review',
-                        name: '复审',
-                        isShow: false,
-                    },
-                    {
-                        id: 'tb-charge-record-list-del',
-                        name: '删除',
-                        isShow: false,
-                    }
-                ]
-            }
-            ,{
-            id: 'tb-deduction-bind-list',
-            name: '扣费绑定',
-            url: 'sa-view/tb-deduction-bind/tb-deduction-bind-list.html',
-            childList: [{
-                id: 'tb-deduction-bind-list-bind',
-                name: '绑定车辆',
-                isShow: false,
-            },
-                {
-                    id: 'tb-deduction-bind-list-unbind',
-                    name: '手动解绑',
-                    isShow: false,
-                }
-            ]
-        },{
-            id: 'tb-deduction-record-list',
-            name: '扣费记录',
-            url: 'sa-view/tb-deduction-record/tb-deduction-record-list.html',
-            childList: [{
-                id: 'tb-deduction-record-list-review',
-                name: '复审',
-                isShow: false,
-            }
-            ]
-        },
+			childList: [{
+					id: 'tb-declare-print',
+					name: '打印申报信息',
+					isShow: false
+				},
+				{
+					id: 'tb-declare-edit',
+					name: '修改申报信息',
+					isShow: false
+				},
+				{
+					id: 'tb-declare-del',
+					name: '删除申报信息',
+					isShow: false
+				},
+			]
+		}, ]
+	}, {
+		id: 'tb-disinfect',
+		name: '消毒信息',
+		icon: 'el-icon-folder-opened',
+		parent: true,
+		childList: [{
+			id: 'tb-disinfect-list',
+			name: '申请列表',
+			url: 'sa-view/tb-disinfect/tb-disinfect-list.html',
+			childList: [{
+					id: 'tb-disinfect-print',
+					name: '打印信息',
+					isShow: false
+				},
+				{
+					id: 'tb-disinfect-edit',
+					name: '修改信息',
+					isShow: false
+				},
+				{
+					id: 'tb-disinfect-del',
+					name: '删除信息',
+					isShow: false
+				},
+			]
+		}, ]
+	}, {
+		id: 'tb-discount',
+		name: '折扣管理',
+		icon: 'el-icon-folder-opened',
+		parent: true,
+		childList: [{
+			id: 'tb-discount-list',
+			name: '折扣管理',
+			url: 'sa-view/tb-discount/tb-discount-list.html',
+			childList: [{
+					id: 'tb-discount-add',
+					name: '添加折扣',
+					isShow: false
+				},
+				{
+					id: 'tb-discount-del',
+					name: '删除',
+					isShow: false
+				},
+				{
+					id: 'tb-discount-edit',
+					name: '编辑',
+					isShow: false
+				},
+				{
+					id: 'tb-discount-change',
+					name: '启用/停用',
+					isShow: false
+				},
+			]
+		}, ]
+	}, {
+		id: 'tb-fee-statistics',
+		name: '收费统计',
+		icon: 'el-icon-folder-opened',
+		parent: true,
+		childList: [{
+				id: 'tb-fee-details-list',
+				name: '收费明细',
+				url: 'sa-view/tb-fee-statistics/tb-fee-details-list.html',
+				childList: [{
+						id: 'tb-kaidan-confirm',
+						name: '开单确认',
+						isShow: false
+					},
+					{
+						id: 'tb-diaodu-confirm',
+						name: '复核确认',
+						isShow: false
+					},
+					{
+						id: 'tb-jicha-confirm',
+						name: '稽查确认',
+						isShow: false
+					},
+					{
+						id: 'tb-jicha-cancel',
+						name: '取消确认',
+						isShow: false
+					},
 
+				]
+			},
+			{
+				id: 'tb-fee-statistics-list',
+				name: '日统计',
+				url: 'sa-view/tb-fee-statistics/tb-fee-statistics-list.html'
+			},
+			{
+				id: 'month-statistcs-list',
+				name: '月统计',
+				url: 'sa-view/tb-fee-statistics/month-statistcs-list.html'
+			},
+			{
+				id: 'year-statistcs-list',
+				name: '年统计',
+				url: 'sa-view/tb-fee-statistics/year-statistcs-list.html'
+			},
+		]
+	},
+	{
+		id: 'tb-invoice-info',
+		name: '开票管理',
+		icon: 'el-icon-folder-opened',
+		parent: true,
+		childList: [{
+				id: 'tb-entity-list',
+				name: '开票主体',
+				url: 'sa-view/tb-entity/tb-entity-list.html'
+			},
+			{
+				id: 'tb-invoice-order-list',
+				name: '开票订单',
+				url: 'sa-view/tb-invoice-order/tb-invoice-order-list.html'
+			},
+			{
+				id: 'tb-invoice-info-list',
+				name: '开票信息',
+				url: 'sa-view/tb-invoice-info/tb-invoice-info-list.html'
+			},
+		]
+	},
+	{
+		id: 'tb-account',
+		name: '预存款管理',
+		icon: 'el-icon-folder-opened',
+		parent: true,
+		childList: [{
+				id: 'tb-account-list',
+				name: '客户充值',
+				url: 'sa-view/tb-account/tb-account-list.html',
+				childList: [{
+						id: 'tb-account-list-add',
+						name: '充值',
+						isShow: false,
+					},
+					{
+						id: 'tb-account-list-update',
+						name: '修改',
+						isShow: false,
+					}
+				]
+			},
+			{
+				id: 'tb-charge-record-list',
+				name: '充值记录',
+				url: 'sa-view/tb-charge-record/tb-charge-record-list.html',
+				childList: [{
+						id: 'tb-charge-record-list-print',
+						name: '打印单据',
+						isShow: false,
+					},
+					{
+						id: 'tb-charge-record-list-review',
+						name: '复审',
+						isShow: false,
+					},
+					{
+						id: 'tb-charge-record-list-del',
+						name: '删除',
+						isShow: false,
+					}
+				]
+			}, {
+				id: 'tb-deduction-bind-list',
+				name: '扣费绑定',
+				url: 'sa-view/tb-deduction-bind/tb-deduction-bind-list.html',
+				childList: [{
+						id: 'tb-deduction-bind-list-bind',
+						name: '绑定车辆',
+						isShow: false,
+					},
+					{
+						id: 'tb-deduction-bind-list-unbind',
+						name: '手动解绑',
+						isShow: false,
+					}
+				]
+			}, {
+				id: 'tb-deduction-record-list',
+				name: '扣费记录',
+				url: 'sa-view/tb-deduction-record/tb-deduction-record-list.html',
+				childList: [{
+					id: 'tb-deduction-record-list-review',
+					name: '复审',
+					isShow: false,
+				}]
+			}],
 
+	}
 ]

+ 8 - 0
sp-admin/sa-view-sp/console/com-sta-data.vue

@@ -71,12 +71,20 @@ module.exports = {
         this.car = resp.data;
       }.bind(this))
     },
+	checkTimeout() {
+	  sa.ajaxNoLoading('/AccAdmin/checkTimeout', function (resp) {
+		  if(resp.code==405){
+			  window.open('../../login.html');
+		  }
+	  }.bind(this))
+	},
 
   },
   created() {
     this.getCarStatics();
     this.timmer = setInterval(() => {
       this.getCarStatics();
+	  this.checkTimeout();
     }, 20000)
   },
   beforeDestroy() {

+ 0 - 168
sp-admin/sa-view/tb-business-car/tb-business-car-add.html

@@ -1,168 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-    <title>-添加/修改</title>
-    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-    <meta name="viewport"
-          content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no"/>
-    <!-- 所有的 css js 资源 -->
-    <link rel="stylesheet" href="../../static/kj/element-ui/theme-chalk/index.css">
-    <link rel="stylesheet" href="../../static/sa.css">
-    <script src="../../static/kj/vue.min.js"></script>
-    <script src="../../static/kj/element-ui/index.js"></script>
-    <script src="../../static/kj/httpVueLoader.js"></script>
-    <script src="../../static/kj/jquery.min.js"></script>
-    <script src="../../static/kj/layer/layer.js"></script>
-    <script src="../../static/sa.js"></script>
-    <script src="../../static/kj/upload-util.js"></script>
-    <style type="text/css">
-        .c-panel .el-form .c-label {
-            width: 7em !important;
-        }
-
-        .c-panel .el-form .el-input,
-        .c-panel .el-form .el-textarea__inner {
-            width: 250px;
-        }
-
-        .china-car-size .el-input__inner {
-            width: 130px;
-        }
-    </style>
-</head>
-<body>
-<div class="vue-box" :class="{sbot: id}" style="display: none;" :style="'display: block;'">
-    <!-- ------- 内容部分 ------- -->
-    <div class="s-body">
-        <div class="c-panel">
-            <div class="c-title" v-if="id == 0">数据添加</div>
-            <div class="c-title" v-else>数据修改</div>
-            <el-form v-if="m">
-                <sa-item type="text" name="车牌号" v-model="m.carNo" br></sa-item>
-                <div class="c-item">
-                    <label class="c-label"><span style="color: red;">*</span>车辆规格:</label>
-                    <el-input-number class="china-car-size" v-model="m.carSize" controls-position="right"
-                                     :min="4.2" :max="50"></el-input-number>
-                </div>
-                <div class="c-item">
-                    <label class="c-label">车牌颜色:</label>
-                    <el-select v-model="m.color" placeholder="请选择">
-                        <el-option v-for="item in colorList" :label="item.carNoColor"
-                                   :value="item.carNoColor"></el-option>
-                    </el-select>
-                </div>
-                <!--						<div class="c-item">-->
-                <!--							<label class="c-label">联系人:</label>-->
-                <!--							<el-input v-model="m.driverName" placeholder="联系人" readonly>-->
-                <!--							</el-input>-->
-                <!--						</div>-->
-                <!--						<div class="c-item">-->
-                <!--							<label class="c-label">联系号码:</label>-->
-                <!--							<el-input v-model="m.driverPhone" placeholder="联系人号码" readonly>-->
-                <!--							</el-input>-->
-                <!--						</div>-->
-                <div class="c-item">
-                    <label class="c-label">入场时间:</label>
-                    <el-date-picker type="datetime" value-format="yyyy-MM-dd HH:mm:ss"
-                                    v-model="m.realInTime"></el-date-picker>
-                </div>
-                <sa-item type="img" name="入场图片" v-model="m.inImage" br></sa-item>
-
-                <div class="c-item">
-                    <label class="c-label">离场时间:</label>
-                    <el-date-picker type="datetime" value-format="yyyy-MM-dd HH:mm:ss"
-                                    v-model="m.realOutTime"></el-date-picker>
-                </div>
-                <sa-item type="img" name="出场图片" v-model="m.outImage" br></sa-item>
-                <sa-item name="" class="s-ok" br>
-                    <el-button type="primary" icon="el-icon-plus" @click="ok()">保存</el-button>
-                </sa-item>
-            </el-form>
-        </div>
-    </div>
-    <!-- ------- 底部按钮 ------- -->
-    <div class="s-foot">
-        <el-button type="primary" @click="ok()">确定</el-button>
-        <el-button @click="sa.closeCurrIframe()">取消</el-button>
-    </div>
-</div>
-<script>
-    var app = new Vue({
-        components: {
-            "sa-item": httpVueLoader('../../sa-frame/com/sa-item.vue')
-        },
-        el: '.vue-box',
-        data: {
-            colorList: [],
-            id: sa.p('id', 0), // 获取超链接中的id参数(0=添加,非0=修改)
-            m: {
-                id: '', //
-
-                carNo: '', //
-                carSize: '', //
-                driverName: '', //
-                money: '', //
-                driverPhone: '', //
-                image: '',
-                realInTime: '',
-                realOutTime: '',
-                pay: '',
-                isLock: '',
-                inImage: '',
-                outImage: '',
-            }, // 实体对象
-        },
-        methods: {
-            getCadNoColor() {
-                sa.ajax('/TbCarNoColor/getList', function (resp) {
-                    this.colorList = resp.data;
-                }.bind(this))
-            },
-            // 提交数据
-            ok: function () {
-                // 表单校验
-                let m = this.m;
-                sa.checkNull(m.carNo, '请输入 [车牌号]');
-                // let phone = m.driverPhone;
-                // if (phone && !sa.isPhone(phone)) {
-                // 	sa.error('联系号码不正确')
-                // 	return;
-                // }
-
-                // 开始增加或修改
-                if (this.id <= 0) { // 添加
-                    sa.ajax('/TbBusinessCar/addCarRecord', m, function (res) {
-                        sa.alert('增加成功', this.clean);
-                    }.bind(this));
-                } else { // 修改
-                    sa.ajax('/TbBusinessCar/updateCarRecord', m, function (res) {
-                        sa.alert('修改成功', this.clean);
-                    }.bind(this));
-                }
-            },
-            // 添加/修改 完成后的动作
-            clean: function () {
-                if (this.id == 0) {
-                    this.m = this.createModel();
-                } else {
-                    parent.app.f5(); // 刷新父页面列表
-                    sa.closeCurrIframe(); // 关闭本页
-                }
-            }
-        },
-        mounted: function () {
-            this.getCadNoColor();
-            // 初始化数据
-            if (this.id > 0) {
-                sa.ajax('/TbBusinessCar/getById?id=' + this.id, function (res) {
-                    this.m = res.data;
-                    if (res.data == null) {
-                        sa.alert('未能查找到 id=' + this.id + " 详细数据");
-                    }
-                }.bind(this))
-            }
-        }
-    })
-</script>
-</body>
-</html>

+ 1 - 0
sp-admin/sa-view/tb-business/tb-car-disincle-list.html

@@ -169,6 +169,7 @@
             p: { // 查询参数
                 adminConfirmInput: -1,
                 customerName: '',
+				supplement: 0,
                 owner: '',
                 no: '',
                 carNo: '', // 车牌号

+ 24 - 5
sp-admin/sa-view/tb-business/tb-supplement-list.html

@@ -36,10 +36,9 @@
 					<div class="c-item">
 						<label class="c-label">审批状态:</label>
 						<el-select v-model="p.oaResult" placeholder="请选择" @change="f5()">
-							<el-option label="全部" value=""></el-option>
-							<el-option label="未审核" :value="0"></el-option>
-							<el-option label="审核通过" :value="1"></el-option>
-							<el-option label="不通过" :value="2"></el-option>
+							<el-option label="未审核" value=""></el-option>
+							<el-option label="审核通过" value="审批通过"></el-option>
+							<el-option label="不通过" value="审批驳回"></el-option>
 						</el-select>
 					</div>
 					<div class="c-item">
@@ -203,7 +202,8 @@
 							supplement: 0,
 							pageSize: 10,
 							pageNo: 1,
-							error: 1
+							error: 1,
+							oaResult:''
 						}
 					},
 					value: '',
@@ -261,6 +261,25 @@
 						this.form.visible = false;
 						sa.showIframe('完善补录单', 'tb-car-supplement-select.html?id=' + data.id, '1280px', '90%');
 					},
+					businessFn(data) {
+					    sa.ajaxNoLoading('/TbBusinessCar/getOtherBusinessCarByBusinessId', {
+					        businessId: data.id
+					    }, function (resp) {
+					        let list = resp.data;
+					        let str = list.map(car => car.carNo).join('、');
+					        let businessCarIds = list.map(car => car.id).join(',');
+					        sa.showIframe('绑定车辆', 'tb-business-car-business.html?id=' + data.id +
+					            '&businessCarId=' + data.businessCarId + '&carNo=' + str +
+					            '&businessCarIds=' + businessCarIds, '90%', "90%");
+					    }.bind(this))
+					},
+					carFn(data) {
+					    sa.showIframe('车辆管理', '../car/tb-business-car-list.html?id=' + data.id + '&payStatus=' + data
+					        .payStatus + '&confirm=' + data.adminConfirmInput, '1050px', '75%');
+					},
+					handlerPay(data) {
+					    sa.showIframe('线下收费', 'tb-car-disincle-pay.html?id=' + data.id, '1050px', '95%');
+					},
 					getGoodsList() {
 						sa.ajax('/TbGoods/getList', function(resp) {
 							this.goodsList = resp.data;

+ 278 - 273
sp-admin/sa-view/tb-fee-statistics/tb-fee-details-list.html

@@ -1,203 +1,192 @@
 <!DOCTYPE html>
 <html>
-<head>
-    <title>收费明细表-列表</title>
-    <meta charset="utf-8">
-    <meta name="viewport"
-          content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no"/>
-    <!-- 所有的 css & js 资源 -->
-    <link rel="stylesheet" href="../../static/kj/element-ui/theme-chalk/index.css">
-    <link rel="stylesheet" href="../../static/sa.css">
-    <script src="../../static/kj/vue.min.js"></script>
-    <script src="../../static/kj/element-ui/index.js"></script>
-    <script src="../../static/kj/httpVueLoader.js"></script>
-    <script src="../../static/kj/jquery.min.js"></script>
-    <script src="../../static/kj/layer/layer.js"></script>
-    <script src="../../static/sa.js"></script>
-</head>
-<style>
-    .keyButton.el-button {
-        width: 100%;
-        overflow: hidden;
-        text-align: left;
-        text-overflow: ellipsis;
-        white-space: nowrap;
-        border: 0 !important;
-        background: transparent;
-        padding: 0 !important;
-    }
-
-    .keyButton.el-button:hover {
-        border: 0 !important;
-        background: transparent;
-        padding: 0 !important;
-    }
-
-    .price-t {
-        font-size: 14px;
-        font-weight: bold;
-        line-height: 2em;
-        margin-bottom: 3px;
-        float: right;
-    }
-</style>
-<body>
-<div class="vue-box" style="display: none;" :style="'display: block;'">
-    <div class="c-panel">
-        <!-- ------------- 检索参数 ------------- -->
-        <div class="c-title">检索参数</div>
-        <el-form ref="form" :model='p' @submit.native.prevent>
-            <div class="c-item">
-                <label class="c-label">类型:</label>
-                <el-select v-model="p.type" placeholder="请选择" filterable>
-                    <el-option label="停车费" value="4"></el-option>
-                    <el-option label="业务费" value="1,2,3,5,6,7"></el-option>
-                </el-select>
-            </div>
-            <sa-item type="text" name="车牌号" v-model="p.carNo"></sa-item>
-            <div class="c-item">
-                <label class="c-label">收费项目:</label>
-                <el-select v-model="p.feeType" placeholder="请选择" filterable>
-                    <el-option label="核酸检测" value="1"></el-option>
-                    <el-option label="消杀作业" value="2"></el-option>
-                    <el-option label="装卸作业" value="3"></el-option>
-                    <el-option label="停车费" value="4"></el-option>
-                    <el-option label="过磅费" value="5"></el-option>
-                    <el-option label="入场管理费" value="6"></el-option>
-                    <el-option label="充电打冷作业" value="7"></el-option>
-                </el-select>
-            </div>
-            <div class="c-item">
-                <label class="c-label">业务类型:</label>
-                <el-select v-model="p.itemTypeName" placeholder="请选择" filterable>
-                    <el-option v-for="item in itemTypeList" :key="item.id"
-                               :label="item.name" :value="item.name">
-                    </el-option>
-                </el-select>
-            </div>
-            <!--					<div class="c-item">-->
-            <!--						<label class="c-label">日期:</label>-->
-            <!--						<el-date-picker type="date" value-format="yyyy-MM-dd" v-model="p.payDay"></el-date-picker>-->
-            <!--					</div>-->
-            <div class="c-item">
-                <label class="c-label">日期范围:</label>
-                <el-date-picker size="mini" v-model="selectTime" type="daterange" unlink-panels="false"
-                                range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"
-                                format="yyyy 年 MM 月 dd 日" value-format="yyyy-MM-dd">
-                </el-date-picker>
-            </div>
-            <div class="c-item">
-                <label class="c-label">是否开票:</label>
-                <el-select v-model="p.isInvoice" placeholder="请选择" filterable>
-                    <el-option label="全部" value=""></el-option>
-                    <el-option label="未开票" value="0"></el-option>
-                    <el-option label="已开票" value="1"></el-option>
-                </el-select>
-            </div>
+	<head>
+		<title>收费明细表-列表</title>
+		<meta charset="utf-8">
+		<meta name="viewport"
+			content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
+		<!-- 所有的 css & js 资源 -->
+		<link rel="stylesheet" href="../../static/kj/element-ui/theme-chalk/index.css">
+		<link rel="stylesheet" href="../../static/sa.css">
+		<script src="../../static/kj/vue.min.js"></script>
+		<script src="../../static/kj/element-ui/index.js"></script>
+		<script src="../../static/kj/httpVueLoader.js"></script>
+		<script src="../../static/kj/jquery.min.js"></script>
+		<script src="../../static/kj/layer/layer.js"></script>
+		<script src="../../static/sa.js"></script>
+	</head>
+	<style>
+		.keyButton.el-button {
+			width: 100%;
+			overflow: hidden;
+			text-align: left;
+			text-overflow: ellipsis;
+			white-space: nowrap;
+			border: 0 !important;
+			background: transparent;
+			padding: 0 !important;
+		}
 
+		.keyButton.el-button:hover {
+			border: 0 !important;
+			background: transparent;
+			padding: 0 !important;
+		}
 
+		.price-t {
+			font-size: 14px;
+			font-weight: bold;
+			line-height: 2em;
+			margin-bottom: 3px;
+			float: right;
+		}
+	</style>
+	<body>
+		<div class="vue-box" style="display: none;" :style="'display: block;'">
+			<div class="c-panel">
+				<!-- ------------- 检索参数 ------------- -->
+				<div class="c-title">检索参数</div>
+				<el-form ref="form" :model='p' @submit.native.prevent>
+					<div class="c-item">
+						<label class="c-label">类型:</label>
+						<el-select v-model="p.type" placeholder="请选择" filterable>
+							<el-option label="停车费" value="4"></el-option>
+							<el-option label="业务费" value="1,2,3,5,6,7"></el-option>
+						</el-select>
+					</div>
+					<sa-item type="text" name="车牌号" v-model="p.carNo"></sa-item>
+					<sa-item type="text" name="业务单号" v-model="p.businessNo"></sa-item>
+					<div class="c-item">
+						<label class="c-label">收费项目:</label>
+						<el-select v-model="p.feeType" placeholder="请选择" filterable>
+							<el-option label="核酸检测" value="1"></el-option>
+							<el-option label="消杀作业" value="2"></el-option>
+							<el-option label="装卸作业" value="3"></el-option>
+							<el-option label="停车费" value="4"></el-option>
+							<el-option label="过磅费" value="5"></el-option>
+							<el-option label="入场管理费" value="6"></el-option>
+							<el-option label="充电打冷作业" value="7"></el-option>
+						</el-select>
+					</div>
+					<div class="c-item">
+						<label class="c-label">业务类型:</label>
+						<el-select v-model="p.itemTypeName" placeholder="请选择" filterable>
+							<el-option v-for="item in itemTypeList" :key="item.id" :label="item.name"
+								:value="item.name">
+							</el-option>
+						</el-select>
+					</div>
+					<div class="c-item">
+						<label class="c-label">日期范围:</label>
+						<el-date-picker size="mini" v-model="selectTime" type="daterange" unlink-panels="false"
+							range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"
+							format="yyyy 年 MM 月 dd 日" value-format="yyyy-MM-dd">
+						</el-date-picker>
+					</div>
+					<div class="c-item">
+						<label class="c-label">是否开票:</label>
+						<el-select v-model="p.isInvoice" placeholder="请选择" filterable>
+							<el-option label="全部" value=""></el-option>
+							<el-option label="未开票" value="0"></el-option>
+							<el-option label="已开票" value="1"></el-option>
+						</el-select>
+					</div>
+					<sa-item type="text" name="微信支付号" v-model="p.transactionId"></sa-item>
+					<sa-item type="text" name="作业公司" v-model="p.pickCustomerName"></sa-item>
 					<el-button type="primary" icon="el-icon-search" @click="p.pageNo = 1; f5()">查询</el-button>
 					<br />
 				</el-form>
 				<!-- ------------- 快捷按钮 ------------- -->
 				<div class="fast-btn">
-					<el-button type="info"    @click="sa.f5()">刷新</el-button>
-					<el-button type="warning"  @click="exportFn()">导出</el-button>
+					<el-button type="info" @click="sa.f5()">刷新</el-button>
+					<el-button type="warning" @click="exportFn()">导出</el-button>
 					<el-button class="c-btn" type="success" icon="el-icon" @click="print()">打印</el-button>
 					<slot></slot>
 				</div>
 				<div class="fast-btn">
-					<el-button class="c-btn" type="success" icon="el-icon" v-if="sa.isAuth('tb-kaidan-confirm')" @click="kaiDanConfirm()">开单确认</el-button>
-					<el-button class="c-btn" type="success" icon="el-icon" v-if="sa.isAuth('tb-diaodu-confirm')" @click="diaoDuConfirm()">复核确认</el-button>
-					<el-button class="c-btn" type="success" icon="el-icon" v-if="sa.isAuth('tb-jicha-confirm')" @click="jiChaConfirm()">稽查确认</el-button>
-					<el-button class="c-btn" type="danger" icon="el-icon" v-if="sa.isAuth('tb-jicha-cancel')" @click="jiChaCancel()">取消确认</el-button>
+					<el-button class="c-btn" type="success" icon="el-icon" v-if="sa.isAuth('tb-kaidan-confirm')"
+						@click="kaiDanConfirm()">开单确认</el-button>
+					<el-button class="c-btn" type="success" icon="el-icon" v-if="sa.isAuth('tb-diaodu-confirm')"
+						@click="diaoDuConfirm()">复核确认</el-button>
+					<el-button class="c-btn" type="success" icon="el-icon" v-if="sa.isAuth('tb-jicha-confirm')"
+						@click="jiChaConfirm()">稽查确认</el-button>
+					<el-button class="c-btn" type="danger" icon="el-icon" v-if="sa.isAuth('tb-jicha-cancel')"
+						@click="jiChaCancel()">取消确认</el-button>
 					<slot></slot>
 					<div class="price-t">
-						总共<span style="color: #ff6600">&nbsp&nbsp{{dataCount}}&nbsp&nbsp</span>条&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
+						总共<span
+							style="color: #ff6600">&nbsp&nbsp{{dataCount}}&nbsp&nbsp</span>条&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
 						总金额<span style="color: #ff6600">&nbsp&nbsp{{totalPrice}}&nbsp&nbsp</span>元
 					</div>
 				</div>
 				<!-- ------------- 数据列表 ------------- -->
 				<el-table class="data-table" ref="data-table" :data="dataList" show-summary :summary-method="getSumRol">
 					<sa-td type="selection"></sa-td>
-<!--					<sa-td name="作业类型" prop="feeType" type="enum"-->
-<!--						   :jv="{1: '核酸检测',2: '消杀作业', 3: '装卸作业', 4: '停车费', 5: '过磅费', 6: '入场管理费', 7: '充电打冷作业'}"></sa-td>-->
+					<!--					<sa-td name="作业类型" prop="feeType" type="enum"-->
+					<!--						   :jv="{1: '核酸检测',2: '消杀作业', 3: '装卸作业', 4: '停车费', 5: '过磅费', 6: '入场管理费', 7: '充电打冷作业'}"></sa-td>-->
 					<sa-td name="收费项目" prop="feeType" type="enum"
-						   :jv="{1: '核酸检测',2: '消杀作业', 3: '装卸作业', 4: '停车费', 5: '过磅费', 6: '入场管理费', 7: '充电打冷作业'}"></sa-td>
-					<sa-td name="业务类型" prop="itemTypeName" ></sa-td>
-					<sa-td name="车型" prop="itemName" ></sa-td>
-					<sa-td name="车牌号" prop="carNo" width="90px" ></sa-td>
-					<sa-td name="重量(kg)" prop="weight" ></sa-td>
-					<sa-td name="数量" prop="num" ></sa-td>
-					<sa-td name="单价(元)" prop="unitPrice" ></sa-td>
-					<sa-td name="总价(元)" prop="itemPrice" ></sa-td>
+						:jv="{1: '核酸检测',2: '消杀作业', 3: '装卸作业', 4: '停车费', 5: '过磅费', 6: '入场管理费', 7: '充电打冷作业'}"></sa-td>
+					<sa-td name="业务类型" prop="itemTypeName"></sa-td>
+					<sa-td name="车型" prop="itemName"></sa-td>
+					<sa-td name="车牌号" prop="carNo" width="90px"></sa-td>
+					<sa-td name="重量(kg)" prop="weight"></sa-td>
+					<sa-td name="数量" prop="num"></sa-td>
+					<sa-td name="单价(元)" prop="unitPrice"></sa-td>
+					<sa-td name="总价(元)" prop="itemPrice"></sa-td>
 					<sa-td name="结算状态" prop="isSettle" type="enum" :jv="{0: '未结算',1: '已结算'}"></sa-td>
-					<sa-td name="复核状态" prop="" ></sa-td>
-<!--					<sa-td name="税率(%)" prop="taxRate" ></sa-td>-->
-					<el-table-column label="税率(%)" >
+					<sa-td name="复核状态" prop=""></sa-td>
+					<!--					<sa-td name="税率(%)" prop="taxRate" ></sa-td>-->
+					<el-table-column label="税率(%)">
 						<template slot-scope="s">
 							<span>{{s.row.taxRate * 100}}</span>
 						</template>
 					</el-table-column>
-<!--					<sa-td name="税款(元)" prop="taxPrice" ></sa-td>-->
-					<el-table-column label="税款(元)" >
+					<!--					<sa-td name="税款(元)" prop="taxPrice" ></sa-td>-->
+					<el-table-column label="税款(元)">
 						<template slot-scope="s">
 							<span>{{Number(s.row.taxPrice).toFixed(2)}}</span>
 						</template>
 					</el-table-column>
-<!--					<sa-td name="不含税金额(元)" prop="noTaxPrice" ></sa-td>-->
-					<el-table-column label="不含税金额(元)" >
+					<!--					<sa-td name="不含税金额(元)" prop="noTaxPrice" ></sa-td>-->
+					<el-table-column label="不含税金额(元)">
 						<template slot-scope="s">
 							<span>{{Number(s.row.noTaxPrice).toFixed(2)}}</span>
 						</template>
 					</el-table-column>
-				<!-- 	<sa-td name="收款方式" prop="payType" type="enum" :jv="{3: '微信支付'}"></sa-td>
+					<!-- 	<sa-td name="收款方式" prop="payType" type="enum" :jv="{3: '微信支付'}"></sa-td>
 					<sa-td name="收款种类" prop="payMode" type="enum" :jv="{1: '直接收款'}"></sa-td> -->
 					<el-table-column label="业务单号" width="140px">
 						<template slot-scope="s">
-							<span v-if="s.row.businessNo != null && s.row.businessNo != ''" >{{s.row.businessNo}}</span>
+							<span v-if="s.row.businessNo != null && s.row.businessNo != ''">{{s.row.businessNo}}</span>
 							<span v-else>{{s.row.businessCarNo}}</span>
 						</template>
 					</el-table-column>
-<!--					<sa-td name="订单编号" prop="transactionId" width="220px" ></sa-td>-->
+					<!--					<sa-td name="订单编号" prop="transactionId" width="220px" ></sa-td>-->
 					<el-table-column label="微信支付业务单号" width="220px">
 						<template slot-scope="s">
-							<el-tooltip :content="s.row.transactionId"placement="bottom"effect="light">
+							<el-tooltip :content="s.row.transactionId" placement="bottom" effect="light">
 								<el-button class="keyButton">{{ s.row.transactionId }}</el-button>
 							</el-tooltip>
 						</template>
 					</el-table-column>
-					<sa-td name="作业编号" prop="businessItemNo" width="145px" ></sa-td>
-					<sa-td name="作业公司" prop="pickCustomerName" ></sa-td>
-					<sa-td name="客户名称" prop="customerName" ></sa-td>
+					<sa-td name="作业编号" prop="businessItemNo" width="145px"></sa-td>
+					<sa-td name="作业公司" prop="pickCustomerName"></sa-td>
+					<sa-td name="客户名称" prop="customerName"></sa-td>
 					<sa-td name="发票号" prop="invoice" width="145px"></sa-td>
-					<sa-td name="主体名称" prop="entityName" ></sa-td>
-					<sa-td name="生成时间" prop="createTime" width="150px" ></sa-td>
-					<sa-td name="付款时间" prop="payTime"  width="150px" ></sa-td>
-					<sa-td name="更新时间" prop="updateTime"  width="150px" ></sa-td>
-					<sa-td name="备注" prop="remark" ></sa-td>
-					<sa-td name="开单员" prop="kaiDanPerson" width="80px" ></sa-td>
-					<sa-td name="复核员" prop="diaoDuPerson" width="80px" ></sa-td>
-					<sa-td name="统计稽查员" prop="jiChaPerson" width="80px" ></sa-td>
-
-<!--					<el-table-column label="操作" fixed="right"  width="240px">-->
-<!--						<template slot-scope="s">-->
-<!--							<el-button class="c-btn" type="success" icon="el-icon-view" @click="get(s.row)">查看</el-button>-->
-<!--							<el-button class="c-btn" type="primary" icon="el-icon-edit" @click="update(s.row)">修改</el-button>-->
-<!--							<el-button class="c-btn" type="danger" icon="el-icon-delete" @click="del(s.row)">删除</el-button>-->
-<!--						</template>-->
-<!--					</el-table-column>-->
+					<sa-td name="主体名称" prop="entityName"></sa-td>
+					<sa-td name="生成时间" prop="createTime" width="150px"></sa-td>
+					<sa-td name="付款时间" prop="payTime" width="150px"></sa-td>
+					<sa-td name="更新时间" prop="updateTime" width="150px"></sa-td>
+					<sa-td name="备注" prop="remark"></sa-td>
+					<sa-td name="开单员" prop="kaiDanPerson" width="80px"></sa-td>
+					<sa-td name="复核员" prop="diaoDuPerson" width="80px"></sa-td>
+					<sa-td name="统计稽查员" prop="jiChaPerson" width="80px"></sa-td>
 				</el-table>
 				<!-- ------------- 分页 ------------- -->
-				<sa-item type="page" :curr.sync="p.pageNo" :size.sync="p.pageSize" :total="dataCount" @change="f5()"></sa-item>
+				<sa-item type="page" :curr.sync="p.pageNo" :size.sync="p.pageSize" :total="dataCount" @change="f5()">
+				</sa-item>
 			</div>
 			<el-dialog title="提示" :visible.sync="emodel.visible" width="38%">
-<!--				<el-form size="mini">-->
-<!--					<div class="c-item">-->
-<!--						<label class="c-label">日期:</label>-->
-<!--						<el-date-picker type="date" value-format="yyyy-MM-dd" v-model="emodel.form.payDay"></el-date-picker>-->
-<!--					</div>-->
-<!--				</el-form>-->
 				<div class="c-item">
 					<label class="c-label">收费项目:</label>
 					<el-select v-model="emodel.form.feeType" placeholder="请选择" filterable>
@@ -213,16 +202,15 @@
 				<div class="c-item">
 					<label class="c-label">业务类型:</label>
 					<el-select v-model="emodel.form.itemTypeName" placeholder="请选择" filterable>
-						<el-option v-for="item in itemTypeList" :key="item.id"
-								   :label="item.name" :value="item.name">
+						<el-option v-for="item in itemTypeList" :key="item.id" :label="item.name" :value="item.name">
 						</el-option>
 					</el-select>
 				</div>
 				<div class="c-item">
 					<label class="c-label"><span style="color: red;">*</span>日期范围:</label>
 					<el-date-picker size="mini" v-model="exportTime" type="daterange" unlink-panels="false"
-									range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"
-									format="yyyy 年 MM 月 dd 日" value-format="yyyy-MM-dd">
+						range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" format="yyyy 年 MM 月 dd 日"
+						value-format="yyyy-MM-dd">
 					</el-date-picker>
 				</div>
 				<span slot="footer" class="dialog-footer">
@@ -234,39 +222,41 @@
 		<script>
 			var app = new Vue({
 				components: {
-					"sa-item": httpVueLoader('../../sa-frame/com/sa-item.vue'),  
-					"sa-td": httpVueLoader('../../sa-frame/com/sa-td.vue'),		
+					"sa-item": httpVueLoader('../../sa-frame/com/sa-item.vue'),
+					"sa-td": httpVueLoader('../../sa-frame/com/sa-td.vue'),
 				},
 				el: '.vue-box',
 				data: {
 					p: { // 查询参数  
-						id: '',		// 主键 
-						businessNo: '',		// 业务单号 
-						carNo: '',		// 车牌号
-						feeType: '',		//收费类型
-						itemTypeId: '',		// 业务类型id 
-						itemTypeName: '',		// 业务类型 
-						itemId: '',		//  
-						itemName: '',		// 业务项 
-						itemPrice: '',		// 项目金额(元) 
-						payDay: '',		// 支付日期 
-						payType: '',		// 支付方式(3=微信支付) 
-						createTime: '',		// 创建时间 
-						pageNo: 1,		// 当前页 
-						pageSize: 10,	// 页大小
-						sortType: 11,		// 排序方式
+						id: '', // 主键 
+						businessNo: '', // 业务单号 
+						transactionId:'',//微信支付号
+						pickCustomerName:'',
+						carNo: '', // 车牌号
+						feeType: '', //收费类型
+						itemTypeId: '', // 业务类型id 
+						itemTypeName: '', // 业务类型 
+						itemId: '', //  
+						itemName: '', // 业务项 
+						itemPrice: '', // 项目金额(元) 
+						payDay: '', // 支付日期 
+						payType: '', // 支付方式(3=微信支付) 
+						createTime: '', // 创建时间 
+						pageNo: 1, // 当前页 
+						pageSize: 10, // 页大小
+						sortType: 11, // 排序方式
 						type: '',
-						isInvoice: '',   //是否开票
+						isInvoice: '', //是否开票
 					},
 					dataCount: 0,
 					dataList: [], // 数据集合
 					itemTypeList: [],
-					selectTime:[],
+					selectTime: [],
 					selectTimeRange: {
 						beginTime: '', //查询开始时间
 						endTime: '', //查询结束时间
 					},
-					exportTime:[],
+					exportTime: [],
 					emodel: {
 						visible: false,
 						form: {
@@ -278,14 +268,14 @@
 						}
 					},
 					totalPrice: 0,
-					tableSum:{
+					tableSum: {
 						itemPriceSum: 0,
 						taxPriceSum: 0,
 						noTaxPriceSum: 0,
 					},
 				},
 				methods: {
-					getSumRol(param){
+					getSumRol(param) {
 
 						const columns = param.columns;
 						const sums = [];
@@ -296,7 +286,7 @@
 							}
 							//根据当前列绑定的字段名进行判断,根据字段名决定展示什么内容
 							switch (column.label) {
-									//金额;
+								//金额;
 								case "总价(元)":
 									//在这里你就可以根据需要对数据进行一些处理(保留小数位数,加上单位等)
 									sums[index] = this.tableSum.itemPriceSum;
@@ -317,89 +307,97 @@
 						});
 						return sums;
 					},
-					calcuSum(){
+					calcuSum() {
 						var itemPriceSum = 0;
 						var taxPriceSum = 0;
 						var noTaxPriceSum = 0;
 						var len = this.dataList.length;
-						for(var i=0; i<len; i++){
-							itemPriceSum = (itemPriceSum*100 + this.dataList[i].itemPrice*100)/100;
-							taxPriceSum = (taxPriceSum*100 + this.dataList[i].taxPrice*100)/100;
-							noTaxPriceSum = (noTaxPriceSum*100 + this.dataList[i].noTaxPrice*100)/100;
+						for (var i = 0; i < len; i++) {
+							itemPriceSum = (itemPriceSum * 100 + this.dataList[i].itemPrice * 100) / 100;
+							taxPriceSum = (taxPriceSum * 100 + this.dataList[i].taxPrice * 100) / 100;
+							noTaxPriceSum = (noTaxPriceSum * 100 + this.dataList[i].noTaxPrice * 100) / 100;
 						}
 						this.tableSum.itemPriceSum = itemPriceSum;
 						this.tableSum.taxPriceSum = Number(taxPriceSum).toFixed(2);
 						this.tableSum.noTaxPriceSum = Number(noTaxPriceSum).toFixed(2);
 
-            },
-            getTotalPrice() {
-                if (this.selectTime != null && this.selectTime.length != 0) {
-                    this.selectTimeRange.beginTime = this.selectTime[0];
-                    this.selectTimeRange.endTime = this.selectTime[1];
-                }
-                sa.ajax('/TbFeeDetails/getTotalMoney?beginTime=' + this.selectTimeRange.beginTime + '&endTime=' + this.selectTimeRange.endTime,
-                    sa.removeNull(this.p), function (res) {
-                        this.totalPrice = res.data.itemPriceSum;
-                        this.tableSum.itemPriceSum = res.data.itemPriceSum;
-                        this.tableSum.taxPriceSum = res.data.taxPriceSum;
-                        this.tableSum.noTaxPriceSum = res.data.noTaxPriceSum;
-                    }.bind(this));
-            },
-            kaiDanConfirm() {
-                let selection = this.$refs['data-table'].selection;
-                let ids = sa.getArrayField(selection, 'id');
-                if (selection.length == 0) {
-                    return sa.msg('请至少选择一条数据')
-                }
-                this.$confirm('确定进行开单确认操作?', '提示', {
-                    confirmButtonText: '确定',
-                    cancelButtonText: '取消',
-                }).then(() => {
-                    sa.ajax('/TbFeeDetails/kaiDanConfirm', {ids: ids.join(',')}, function (res) {
-                        this.f5();
-                    }.bind(this))
-                }).catch(() => {
+					},
+					getTotalPrice() {
+						if (this.selectTime != null && this.selectTime.length != 0) {
+							this.selectTimeRange.beginTime = this.selectTime[0];
+							this.selectTimeRange.endTime = this.selectTime[1];
+						}
+						sa.ajax('/TbFeeDetails/getTotalMoney?beginTime=' + this.selectTimeRange.beginTime + '&endTime=' +
+							this.selectTimeRange.endTime,
+							sa.removeNull(this.p),
+							function(res) {
+								this.totalPrice = res.data.itemPriceSum;
+								this.tableSum.itemPriceSum = res.data.itemPriceSum;
+								this.tableSum.taxPriceSum = res.data.taxPriceSum;
+								this.tableSum.noTaxPriceSum = res.data.noTaxPriceSum;
+							}.bind(this));
+					},
+					kaiDanConfirm() {
+						let selection = this.$refs['data-table'].selection;
+						let ids = sa.getArrayField(selection, 'id');
+						if (selection.length == 0) {
+							return sa.msg('请至少选择一条数据')
+						}
+						this.$confirm('确定进行开单确认操作?', '提示', {
+							confirmButtonText: '确定',
+							cancelButtonText: '取消',
+						}).then(() => {
+							sa.ajax('/TbFeeDetails/kaiDanConfirm', {
+								ids: ids.join(',')
+							}, function(res) {
+								this.f5();
+							}.bind(this))
+						}).catch(() => {
 
-                });
-            },
-            diaoDuConfirm() {
-                let selection = this.$refs['data-table'].selection;
-                let ids = sa.getArrayField(selection, 'id');
-                if (selection.length == 0) {
-                    return sa.msg('请至少选择一条数据')
-                }
-                this.$confirm('确定进行复核确认操作?', '提示', {
-                    confirmButtonText: '确定',
-                    cancelButtonText: '取消',
-                }).then(() => {
-                    sa.ajax('/TbFeeDetails/diaoDuConfirm', {ids: ids.join(',')}, function (res) {
-                        this.f5();
-                    }.bind(this))
-                }).catch(() => {
+						});
+					},
+					diaoDuConfirm() {
+						let selection = this.$refs['data-table'].selection;
+						let ids = sa.getArrayField(selection, 'id');
+						if (selection.length == 0) {
+							return sa.msg('请至少选择一条数据')
+						}
+						this.$confirm('确定进行复核确认操作?', '提示', {
+							confirmButtonText: '确定',
+							cancelButtonText: '取消',
+						}).then(() => {
+							sa.ajax('/TbFeeDetails/diaoDuConfirm', {
+								ids: ids.join(',')
+							}, function(res) {
+								this.f5();
+							}.bind(this))
+						}).catch(() => {
 
 						});
 					},
-					jiChaConfirm(){
+					jiChaConfirm() {
 						let selection = this.$refs['data-table'].selection;
 						let ids = sa.getArrayField(selection, 'id');
-						if(selection.length == 0) {
+						if (selection.length == 0) {
 							return sa.msg('请至少选择一条数据')
 						}
 						this.$confirm('确定进行稽查确认操作?', '提示', {
 							confirmButtonText: '确定',
 							cancelButtonText: '取消',
 						}).then(() => {
-							sa.ajax('/TbFeeDetails/jiChaConfirm', {ids: ids.join(',')}, function(res) {
+							sa.ajax('/TbFeeDetails/jiChaConfirm', {
+								ids: ids.join(',')
+							}, function(res) {
 								this.f5();
 							}.bind(this))
 						}).catch(() => {
 
 						});
 					},
-					jiChaCancel(){
+					jiChaCancel() {
 						let selection = this.$refs['data-table'].selection;
 						let ids = sa.getArrayField(selection, 'id');
-						if(selection.length == 0) {
+						if (selection.length == 0) {
 							return sa.msg('请至少选择一条数据')
 						}
 						this.$confirm('确定进行开单确认操作?', '提示', {
@@ -407,7 +405,9 @@
 							cancelButtonText: '取消',
 							type: 'warning'
 						}).then(() => {
-							sa.ajax('/TbFeeDetails/jiChaCancel', {ids: ids.join(',')}, function(res) {
+							sa.ajax('/TbFeeDetails/jiChaCancel', {
+								ids: ids.join(',')
+							}, function(res) {
 								this.f5();
 							}.bind(this))
 						}).catch(() => {
@@ -415,7 +415,7 @@
 						});
 					},
 					print: function() {
-						if ( this.selectTime != null && this.selectTime.length != 0) {
+						if (this.selectTime != null && this.selectTime.length != 0) {
 							this.selectTimeRange.beginTime = this.selectTime[0];
 							this.selectTimeRange.endTime = this.selectTime[1];
 						}
@@ -426,50 +426,52 @@
 						var itemTypeName = this.p.itemTypeName;
 
 						var str = '';
-						if(beginTime === '' && endTime === ''){
+						if (beginTime === '' && endTime === '') {
 							str += '所有时间';
-						}else {
+						} else {
 							str += beginTime + "至" + endTime
 						}
-						if(feeType === ''){
+						if (feeType === '') {
 							str += "、所有收费项目";
-						}else{
+						} else {
 							var feeTypeName = '';
-							if(feeType == 1){
+							if (feeType == 1) {
 								feeTypeName = "核酸检测";
-							}else if(feeType == 2){
+							} else if (feeType == 2) {
 								feeTypeName = "消杀作业";
-							}else if(feeType == 3){
+							} else if (feeType == 3) {
 								feeTypeName = "装卸作业";
-							}else if(feeType == 4){
+							} else if (feeType == 4) {
 								feeTypeName = "停车费";
-							}else if(feeType == 5){
+							} else if (feeType == 5) {
 								feeTypeName = "过磅费";
-							}else if(feeType == 6){
+							} else if (feeType == 6) {
 								feeTypeName = "入场管理费";
-							}else if(feeType == 7){
+							} else if (feeType == 7) {
 								feeTypeName = "充电打冷作业";
 							}
 							str += "、收费项目为" + feeTypeName;
 						}
-						if(itemTypeName === ''){
+						if (itemTypeName === '') {
 							str += "、所有业务类型";
-						}else{
+						} else {
 							str += "、业务类型为" + itemTypeName;
 						}
 
-						this.$confirm('确定打印'+str+'的数据?', '提示', {
+						this.$confirm('确定打印' + str + '的数据?', '提示', {
 							confirmButtonText: '确定',
 							cancelButtonText: '取消',
 							type: 'warning'
 						}).then(() => {
-							sa.showIframe('打印申报信息表', 'detailPrint.html?beginTime='+beginTime+"&endTime="+endTime+"&feeType="+feeType+"&itemTypeName="+itemTypeName , '1000px', '100%');
+							sa.showIframe('打印申报信息表', 'detailPrint.html?beginTime=' + beginTime +
+								"&endTime=" + endTime + "&feeType=" + feeType + "&itemTypeName=" +
+								itemTypeName, '1000px', '100%');
 						}).catch(() => {
 
 						});
 					},
 					exportFn() {
-						if ( this.selectTime != null && this.selectTime.length != 0) {
+						if (this.selectTime != null && this.selectTime.length != 0) {
 							this.selectTimeRange.beginTime = this.selectTime[0];
 							this.selectTimeRange.endTime = this.selectTime[1];
 						}
@@ -479,63 +481,66 @@
 						var feeType = this.p.feeType;
 						var itemTypeName = this.p.itemTypeName;
 						var str = '';
-						if(beginTime === '' && endTime === ''){
+						if (beginTime === '' && endTime === '') {
 							str += '所有时间';
-						}else {
+						} else {
 							str += beginTime + "至" + endTime
 						}
-						if(feeType === ''){
+						if (feeType === '') {
 							str += "、所有收费项目";
-						}else{
+						} else {
 							var feeTypeName = '';
-							if(feeType == 1){
+							if (feeType == 1) {
 								feeTypeName = "核酸检测";
-							}else if(feeType == 2){
+							} else if (feeType == 2) {
 								feeTypeName = "消杀作业";
-							}else if(feeType == 3){
+							} else if (feeType == 3) {
 								feeTypeName = "装卸作业";
-							}else if(feeType == 4){
+							} else if (feeType == 4) {
 								feeTypeName = "停车费";
-							}else if(feeType == 5){
+							} else if (feeType == 5) {
 								feeTypeName = "过磅费";
-							}else if(feeType == 6){
+							} else if (feeType == 6) {
 								feeTypeName = "入场管理费";
-							}else if(feeType == 7){
+							} else if (feeType == 7) {
 								feeTypeName = "充电打冷作业";
 							}
 							str += "、收费项目为" + feeTypeName;
 						}
-						if(itemTypeName === ''){
+						if (itemTypeName === '') {
 							str += "、所有业务类型";
-						}else{
+						} else {
 							str += "、业务类型为" + itemTypeName;
 						}
 
-						this.$confirm('确定导出'+str+'的数据?', '提示', {
+						this.$confirm('确定导出' + str + '的数据?', '提示', {
 							confirmButtonText: '确定',
 							cancelButtonText: '取消',
 							type: 'warning'
 						}).then(() => {
-							sa.ajax('/TbFeeDetails/export/details?beginTime='+this.selectTimeRange.beginTime+'&endTime='+this.selectTimeRange.endTime
-									, sa.removeNull(this.p),  function(resp) {
-								window.open(resp.data);
-							}.bind(this));
+							sa.ajax('/TbFeeDetails/export/details?beginTime=' + this.selectTimeRange.beginTime +
+								'&endTime=' + this.selectTimeRange.endTime, sa.removeNull(this.p),
+								function(resp) {
+									window.open(resp.data);
+								}.bind(this));
 						}).catch(() => {
 
 						});
 					},
 					// 刷新
 					f5: function() {
-						if ( this.selectTime != null && this.selectTime.length != 0) {
+						if (this.selectTime != null && this.selectTime.length != 0) {
 							this.selectTimeRange.beginTime = this.selectTime[0];
 							this.selectTimeRange.endTime = this.selectTime[1];
 						}
-						sa.ajax('/TbFeeDetails/getList?beginTime='+this.selectTimeRange.beginTime+'&endTime='+this.selectTimeRange.endTime,
-								sa.removeNull(this.p), function(res) {
-							this.dataList = res.data; // 数据
-							this.dataCount = res.dataCount; // 数据总数 
-							sa.f5TableHeight();		// 刷新表格高度
-						}.bind(this));
+						sa.ajax('/TbFeeDetails/getList?beginTime=' + this.selectTimeRange.beginTime + '&endTime=' +
+							this.selectTimeRange.endTime,
+							sa.removeNull(this.p),
+							function(res) {
+								this.dataList = res.data; // 数据
+								this.dataCount = res.dataCount; // 数据总数 
+								sa.f5TableHeight(); // 刷新表格高度
+							}.bind(this));
 						this.getTotalPrice();
 					},
 					// 查看
@@ -545,7 +550,7 @@
 					// 查看 - 根据选中的
 					getBySelect: function(data) {
 						var selection = this.$refs['data-table'].selection;
-						if(selection.length == 0) {
+						if (selection.length == 0) {
 							return sa.msg('请选择一条数据')
 						}
 						this.get(selection[0]);

文件差異過大導致無法顯示
+ 1380 - 1319
sp-admin/static/sa.js


+ 1 - 0
sp-server/pom.xml

@@ -180,6 +180,7 @@
 	<!-- 构建配置 -->
 	<build>
 		<!-- 配置资源目录  -->
+		<finalName>server</finalName>
 		<resources>
 			<resource>
 				<directory>src/main/java</directory>

+ 1 - 1
sp-server/src/main/java/com/pj/api/invoice/service/InvoiceApplyService.java

@@ -237,7 +237,7 @@ public class InvoiceApplyService {
                 //开票成功
                 info.setStatus(1);
                 info.setIsApply(2);
-            } else {
+            } else if ("".equals(status)){
                 info.setStatus(Integer.parseInt(status));
             }
             tbInvoiceInfoService.updateById(info);

+ 2 - 0
sp-server/src/main/java/com/pj/api/jh/service/JhService.java

@@ -176,4 +176,6 @@ public class JhService {
                 .setTotalFee(NumberUtil.mul(bo.getOrderPrice(), 100 + "").toString());
         wxService.WxNotify(notifyBO);
     }
+
+
 }

+ 25 - 10
sp-server/src/main/java/com/pj/api/open/service/OpenService.java

@@ -13,6 +13,7 @@ import com.pj.api.open.ResultJson;
 import com.pj.api.open.bo.CheckCarNumberBO;
 import com.pj.api.open.bo.InRecordBO;
 import com.pj.constants.UserTypeEnum;
+import com.pj.current.config.PartConfig;
 import com.pj.current.config.SystemObject;
 import com.pj.current.task.TaskService;
 import com.pj.project.tb_account.AutomaticPay;
@@ -87,6 +88,8 @@ public class OpenService {
     AutomaticPay automaticPay;
     @Resource
     private TbDeductionBindService tbDeductionBindService;
+    @Resource
+    private PartConfig partConfig;
 
 
     public ResultJson checkCarNumber(CheckCarNumberBO checkCarNumberBO) {
@@ -159,7 +162,7 @@ public class OpenService {
         }
         Date now = new Date();
         Date realInTime = tbBusinessCar.getRealInTime();
-        if (now.getTime() / 1000 - realInTime.getTime() / 1000 < 5) {
+        if (now.getTime() / 1000 - realInTime.getTime() / 1000 < partConfig.getMinSeconds()) {
             log.error("请求返回【无效离场记录,返回到设备端为:“未查询到入场记录”让其停止轮询】:{}", carNo);
             return ResultJson.error("无效离场记录");
         }
@@ -190,6 +193,7 @@ public class OpenService {
         String businessCarId = tbBusinessCar.getId();
         //String carNoPrefix = StrUtil.sub(carNo, 0, 1);
         String carType = tbBusinessCar.getCarType();
+        BigDecimal carMoney = new BigDecimal(0);
         List<TbBusiness> businessList = tbBusinessService.findOtherBusinessByCarId(businessCarId);
         if (businessList.isEmpty()) {//无业务车辆===>计算停车费
             //如果已经支付过,则从支付时间算起,重新计算停车费
@@ -227,6 +231,7 @@ public class OpenService {
                 freeOut(tbBusinessCar, now, channel, image);
                 return ResultJson.success();
             }
+
             if (TbItem.ItemTypeEnum.EMPTY_TYPE.getType().equals(carType)) {
                 boolean chinaCarPay = businessList.stream().anyMatch(tbBusiness -> {
                     TbGoods tbGoods = tbGoodsService.getById(tbBusiness.getGoodsId());
@@ -236,9 +241,10 @@ public class OpenService {
                     double dif = caulatePrice(tbBusinessCar, now);
                     if (dif > 0) {
                         RedisUtil.setByMINUTES(channel, carNo, 1);
-                        log.error("请求返回:请缴停车费:{},{}元", carNo, dif);
-                        return ResultJson.error("请缴停车费" + dif + "元");
-                    }else {
+                        log.error("中国车停车费:{},{}元", carNo, dif);
+                        carMoney = new BigDecimal(dif);
+                        //  return ResultJson.error("请缴停车费" + dif + "元");
+                    } else {
                         if (tbBusinessCar.getPayTime() == null) {
                             tbBusinessCar.setPayType(TbBusinessCar.PayTypeEnum.FEE_TYPE.getType()).setPay(1);
                         }
@@ -253,9 +259,10 @@ public class OpenService {
                     double dif = caulatePrice(tbBusinessCar, now);
                     if (dif > 0) {
                         RedisUtil.setByMINUTES(channel, carNo, 1);
-                        log.error("请求返回:请缴停车费:{},{}元", carNo, dif);
-                        return ResultJson.error("请缴停车费" + dif + "元");
-                    }else {
+                        log.error("越南车停车费:{},{}元", carNo, dif);
+                        carMoney = new BigDecimal(dif);
+                        //  return ResultJson.error("请缴停车费" + dif + "元");
+                    } else {
                         if (tbBusinessCar.getPayTime() == null) {
                             tbBusinessCar.setPayType(TbBusinessCar.PayTypeEnum.FEE_TYPE.getType()).setPay(1);
                         }
@@ -264,6 +271,7 @@ public class OpenService {
             }
         }
         //============业务费计算是否交完
+        BigDecimal businessMoney = new BigDecimal(0);
         for (TbBusiness tbBusiness : businessList) {
             TbGoods tbGoods = tbGoodsService.getById(tbBusiness.getGoodsId());
             int vietnamLeave = tbGoods.getVietnamCarLeave();
@@ -274,18 +282,25 @@ public class OpenService {
                 if (TbGoods.LeaveEnum.PART_MONEY.getCode() != vietnamLeave
                         && !pay) {
                     RedisUtil.setByMINUTES(channel, carNo, 1);
-                    log.error("请求返回:请缴纳业务费用:{}", carNo);
-                    return ResultJson.error("请缴纳业务费用");
+                    log.error("越南车==重车:缴纳业务费用:{}", carNo);
+                    businessMoney = businessMoney.add(tbBusiness.getItemPrice());
+                    // return ResultJson.error("请缴纳业务费用");
                 }
             } else {
                 if (TbGoods.LeaveEnum.PART_MONEY.getCode() != chinaCarLeave
                         && !pay) {
                     RedisUtil.setByMINUTES(channel, carNo, 1);
+                    businessMoney = businessMoney.add(tbBusiness.getItemPrice());
                     log.error("请求返回:请缴纳业务费用:{}", carNo);
-                    return ResultJson.error("请缴纳业务费用");
+                    // return ResultJson.error("请缴纳业务费用");
                 }
             }
         }
+        BigDecimal total = businessMoney.add(carMoney);
+        if (total.doubleValue() > 0) {
+            log.error("请求返回:请缴费用:{},{}元", carNo, total.doubleValue());
+            return ResultJson.error("请缴费用" + total.doubleValue() + "元");
+        }
         //离场直接解绑
         tbDeductionBindService.autoUnbindCar(tbBusinessCar.getCarNo());
         freeOut(tbBusinessCar, now, channel, image);

+ 7 - 3
sp-server/src/main/java/com/pj/api/pushfee/oa/OaJudgeController.java

@@ -4,6 +4,7 @@ import cn.hutool.json.JSONUtil;
 import com.pj.project.tb_business.TbBusinessService;
 import com.pj.utils.sg.AjaxJson;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.http.MediaType;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -18,9 +19,12 @@ public class OaJudgeController {
     @Resource
     private TbBusinessService tbBusinessService;
 
-    @PostMapping("approveCallback")
-    public AjaxJson approveCallback(@RequestBody CallbackBO callbackBO) {
-        log.info("oa审批回调:{}", JSONUtil.toJsonStr(callbackBO));
+    @PostMapping(value = "approveCallback",
+            consumes = MediaType.APPLICATION_JSON_VALUE,
+            produces = {"application/json; charset=UTF-8"})
+    public AjaxJson approveCallback(@RequestBody String req) {
+        log.info("oa审批回调:{}", req);
+        CallbackBO callbackBO=JSONUtil.toBean(req,CallbackBO.class);
         tbBusinessService.approveCallback(callbackBO);
         return AjaxJson.getSuccess();
     }

+ 2 - 0
sp-server/src/main/java/com/pj/current/config/MyConfig.java

@@ -30,6 +30,8 @@ public class MyConfig {
     private String domain;
     private String webDomain;
 
+    private int  loginOutMinute=10;
+
     /**
      * 是否彩色SQL日志
      */

+ 1 - 0
sp-server/src/main/java/com/pj/current/config/PartConfig.java

@@ -17,5 +17,6 @@ public class PartConfig {
     private String nightEnd;
     private boolean testEnv;
     private long freeMinutes;
+    private int minSeconds;
 
 }

+ 45 - 0
sp-server/src/main/java/com/pj/current/satoken/SaTokenConfigure.java

@@ -5,12 +5,28 @@ import cn.dev33.satoken.filter.SaServletFilter;
 import cn.dev33.satoken.interceptor.SaAnnotationInterceptor;
 import cn.dev33.satoken.router.SaHttpMethod;
 import cn.dev33.satoken.router.SaRouter;
+import cn.dev33.satoken.stp.StpUtil;
+import cn.hutool.cache.impl.TimedCache;
+import cn.hutool.core.date.DateUnit;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.json.JSONUtil;
+import cn.hutool.log.StaticLog;
+import com.pj.current.config.SystemObject;
+import com.pj.project4sp.global.BusinessException;
+import com.pj.utils.cache.RedisUtil;
+import com.pj.utils.sg.AjaxError;
 import com.pj.utils.sg.AjaxJson;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
 import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
 
+import java.time.LocalDateTime;
+import java.time.temporal.ChronoUnit;
+import java.util.ArrayList;
+import java.util.List;
+
 /**
  * Sa-Token 代码方式进行配置
  *
@@ -18,6 +34,15 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
  */
 @Configuration
 public class SaTokenConfigure implements WebMvcConfigurer {
+    private static final List<String> NO_URL = new ArrayList<String>() {{
+        add("/TbBusiness/getMsg");
+        add("/TbFeeDetails/itemTypeStatics");
+        add("/TbFeeDetails/feeTypeStatics");
+        add("/TbBusinessCar/staticsCar");
+        add("/AccAdmin/doLogin");
+        add("/AccAdmin/checkTimeout");
+        add("/AccAdmin/doExit");
+    }};
 
     /**
      * 注册 Sa-Token 的拦截器,打开注解式鉴权功能
@@ -27,6 +52,7 @@ public class SaTokenConfigure implements WebMvcConfigurer {
         registry.addInterceptor(new SaAnnotationInterceptor()).addPathPatterns("/**");
     }
 
+
     /**
      * 注册 Sa-Token全局过滤器,解决跨域问题
      */
@@ -39,10 +65,29 @@ public class SaTokenConfigure implements WebMvcConfigurer {
                 // 全局认证函数
                 .setAuth(obj -> {
                     // ...
+                    String path = SaHolder.getRequest().getRequestPath();
+                    if (StpUtil.isLogin() && !NO_URL.contains(path)) {
+                        String key = StpUtil.getLoginIdAsString();
+                        String time = RedisUtil.get(key);
+                        String now = DateUtil.now();
+                        if (StrUtil.isEmpty(time)) {
+                            time = now;
+                        }
+                        long min = DateUtil.between(DateUtil.parseDateTime(time), DateUtil.parseDateTime(now), DateUnit.MINUTE);
+                        if (min > SystemObject.config.getLoginOutMinute()) {
+                            throw new  AjaxError(405,"操作超时");
+                        }
+                        RedisUtil.set(key, now);
+                    }
                 })
 
                 // 异常处理函数
                 .setError(e -> {
+                    String msg=e.getMessage();
+                    if (StrUtil.equals(msg,"操作超时")){
+                        return AjaxJson.getError(msg,405);
+                    }
+                    System.out.println(e.getMessage());
                     return AjaxJson.getError(e.getMessage());
                 })
 

+ 6 - 0
sp-server/src/main/java/com/pj/current/satoken/StpUserUtil.java

@@ -2,6 +2,7 @@ package com.pj.current.satoken;
 
 import java.util.List;
 
+import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
 import com.pj.project4sp.admin.SpAdmin;
@@ -61,6 +62,11 @@ public class StpUserUtil {
         RedisUtil.set(key, JSONUtil.toJsonStr(jsonObject));
     }
 
+    public static String getCreateBy() {
+        SpAdmin spAdmin = getAdmin();
+        return StrUtil.isEmpty(spAdmin.getNickname()) ? spAdmin.getName() : spAdmin.getName();
+    }
+
     public static String getLoginName() {
         try {
             String key = "login_user:" + StpUtil.getLoginIdAsString();

+ 1 - 0
sp-server/src/main/java/com/pj/current/task/TokenTask.java

@@ -25,6 +25,7 @@ public class TokenTask implements Runnable {
         String resp = HttpUtil.get(tokenUrl);
         JSONObject result = JSONUtil.parseObj(resp);
         String accessToken = result.getStr("access_token");
+        log.info("获取公众号token返回:{}",JSONUtil.toJsonStr(result));
         if (StrUtil.isEmpty(accessToken)) {
             log.error("get access token fail:{}", resp);
             return;

+ 11 - 7
sp-server/src/main/java/com/pj/project/tb_business/TbBusinessController.java

@@ -189,6 +189,7 @@ public class TbBusinessController {
      */
     @RequestMapping("getOtherBusiness")
     public AjaxJson getOtherBusiness() {
+
         SoMap so = SoMap.getRequestSoMap();
         String currentCustomerId = StpUserUtil.getCustomerId();
         if (!currentCustomerId.equals(UserTypeEnum.PLATFORM_ADMIN.getCustomerId())) {
@@ -277,6 +278,7 @@ public class TbBusinessController {
 
     /**
      * 线下收费
+     *
      * @return
      */
     @RequestMapping("manualConfirm")
@@ -342,9 +344,8 @@ public class TbBusinessController {
         }
         List<TbBusinessCar> cars = JSONUtil.toList(errorBusinessBO.getCarJson(), TbBusinessCar.class);
         errorBusinessBO.setCars(cars);
-        errorBusinessBO.setSupplementBy(StpUserUtil.getAdmin().getNickname());
+        errorBusinessBO.setSupplementBy(StpUserUtil.getCreateBy());
         String currentCustomerId = StpUserUtil.getCustomerId();
-        errorBusinessBO.setSupplementBy(StpUserUtil.getAdmin().getNickname());
         tbBusinessService.selectErrorBusiness(errorBusinessBO, currentCustomerId.equals(UserTypeEnum.PLATFORM_ADMIN.getCustomerId()));
         return AjaxJson.getSuccess();
     }
@@ -361,14 +362,15 @@ public class TbBusinessController {
         List<TbItem> items = JSONUtil.toList(errorBusinessBO.getItemJson(), TbItem.class);
         List<TbBusinessCar> cars = JSONUtil.toList(errorBusinessBO.getCarJson(), TbBusinessCar.class);
         errorBusinessBO.setItems(items).setCars(cars);
-        errorBusinessBO.setSupplementBy(StpUserUtil.getAdmin().getNickname());
+        errorBusinessBO.setSupplementBy(StpUserUtil.getCreateBy());
         String currentCustomerId = StpUserUtil.getCustomerId();
-        tbBusinessService.addErrorBusiness(errorBusinessBO,currentCustomerId.equals(UserTypeEnum.PLATFORM_ADMIN.getCustomerId()));
+        tbBusinessService.addErrorBusiness(errorBusinessBO, currentCustomerId.equals(UserTypeEnum.PLATFORM_ADMIN.getCustomerId()));
         return AjaxJson.getSuccess();
     }
 
     /**
      * 编辑异常单
+     *
      * @param errorBusinessBO
      * @return
      */
@@ -378,12 +380,14 @@ public class TbBusinessController {
         List<TbItem> items = JSONUtil.toList(errorBusinessBO.getItemJson(), TbItem.class);
         List<TbBusinessCar> cars = JSONUtil.toList(errorBusinessBO.getCarJson(), TbBusinessCar.class);
         errorBusinessBO.setItems(items).setCars(cars);
-        errorBusinessBO.setSupplementBy(StpUserUtil.getAdmin().getNickname());
+        errorBusinessBO.setSupplementBy(StpUserUtil.getCreateBy());
         tbBusinessService.editErrorBusiness(errorBusinessBO);
         return AjaxJson.getSuccess();
     }
+
     /**
      * 发起OA流程
+     *
      * @param id
      * @return
      */
@@ -392,9 +396,9 @@ public class TbBusinessController {
     public AjaxJson applyOA(@RequestParam String id) {
         String currentCustomerId = StpUserUtil.getCustomerId();
         if (!currentCustomerId.equals(UserTypeEnum.PLATFORM_ADMIN.getCustomerId())) {
-           return AjaxJson.getError("您无权发起流程");
+            return AjaxJson.getError("您无权发起流程");
         }
-        tbBusinessService.applyOA(id,StpUserUtil.getAdmin().getNickname());
+        tbBusinessService.applyOA(id, StpUserUtil.getAdmin().getNickname());
         return AjaxJson.getSuccess();
     }
     // ------------------------- 前端接口 -------------------------

+ 1 - 0
sp-server/src/main/java/com/pj/project/tb_business/TbBusinessMapper.xml

@@ -37,6 +37,7 @@
             <if test=' this.has("outDayTime") '>and out_day_time = #{outDayTime}</if>
             <if test=' this.has("partMoney") '>and part_money = #{partMoney}</if>
             <if test=' this.has("supplement") '>and supplement = #{supplement}</if>
+            <if test=' this.has("oaResult") '>and oa_result = #{oaResult}</if>
             <if test=' this.has("error") '>and pay_time is null</if>
             <if test=' this.has("partTime") '>and part_time = #{partTime}</if>
             <if test=' this.has("createTime") '>and date_format(create_time,'%Y-%m-%d') = #{createTime}</if>

+ 13 - 8
sp-server/src/main/java/com/pj/project/tb_business/TbBusinessService.java

@@ -393,7 +393,7 @@ public class TbBusinessService extends ServiceImpl<TbBusinessMapper, TbBusiness>
                                 .setPickCustomerName(tbCostomer.getName()).setPickTime(now)
                                 .setConfirm(1).setConfirmTime(now);
                         List<TbFeeDetails> feeDetailsList = tbFeeDetailsService.getByBusinessItemId(item.getId() + "");//重复交费会存在多个businessItemId
-                        if(feeDetailsList!=null) {
+                        if (feeDetailsList != null) {
                             for (TbFeeDetails feeDetails : feeDetailsList) {
                                 feeDetails.setPickCustomerName(item.getPickCustomerName());
                                 tbFeeDetailsService.updateById(feeDetails);
@@ -433,7 +433,7 @@ public class TbBusinessService extends ServiceImpl<TbBusinessMapper, TbBusiness>
             });
             TbGoods tbGoods = tbGoodsService.getById(business.getGoodsId());
             //只有改业务是在确认后扣费才需要执行自动扣费
-            if (TbGoods.DeductionTypeEnum.BUSINESS_OK.getCode().equals(tbGoods.getAutoDeductionType())){
+            if (TbGoods.DeductionTypeEnum.BUSINESS_OK.getCode().equals(tbGoods.getAutoDeductionType())) {
                 automaticPay.run(business.getId(), null, 2);
             }
         });
@@ -597,9 +597,9 @@ public class TbBusinessService extends ServiceImpl<TbBusinessMapper, TbBusiness>
                     for (TbBusinessSort sort : sorts) {
                         long count = items.stream().filter(tbBusinessItem -> StrUtil.equals(sort.getTypeId(), tbBusinessItem.getItemTypeId()))
                                 .count();
-                       if (count==0){
-                           result.put("showPay", false);
-                       }
+                        if (count == 0) {
+                            result.put("showPay", false);
+                        }
                     }
                 }
             }
@@ -959,7 +959,9 @@ public class TbBusinessService extends ServiceImpl<TbBusinessMapper, TbBusiness>
                 .setOperator(otherBusinessBO.getOperator()).setOperateTime(otherBusinessBO.getOperateTime())
                 .setGoodsId(otherBusinessBO.getGoodsId()).setOwner(otherBusinessBO.getOwner())
                 .setDeclareNo(declareNo).setCardNo(otherBusinessBO.getCardNo());
-        dbBusiness.setChinaCarNo(otherBusinessBO.getChinaCarNo());
+        String chinaCar = cars.stream().filter(tbBusinessCar -> CAR_LIST.contains(StrUtil.sub(tbBusinessCar.getCarNo(), 0, 1)))
+                .map(TbBusinessCar::getCarNo).collect(Collectors.joining("、")).toUpperCase();
+        dbBusiness.setChinaCarNo(chinaCar);
         this.updateById(dbBusiness);
     }
 
@@ -1125,9 +1127,12 @@ public class TbBusinessService extends ServiceImpl<TbBusinessMapper, TbBusiness>
             if (StrUtil.isEmpty(fdId)) {
                 throw new BusinessException("流程发起失败");
             }
-            tbBusiness.setSendOa(1).setOaResult(TbBusiness.OAResultEnum.JUDGE_ING.getCode()).setSendTime(new Date()).setSendBy(sendBy)
+            tbBusiness.setSendOa(1).setOaResult(TbBusiness.OAResultEnum.JUDGE_ING.getCode())
+                    .setSendTime(new Date()).setSendBy(sendBy)
                     .setOaFdId(fdId);
             this.updateById(tbBusiness);
+        } else {
+            throw new BusinessException(oaResultBO.getMessage());
         }
     }
 
@@ -1276,7 +1281,7 @@ public class TbBusinessService extends ServiceImpl<TbBusinessMapper, TbBusiness>
         TbGoods tbGoods = tbGoodsService.getById(errorBusinessBO.getGoodsId());
         TbBusiness tbBusiness = new TbBusiness();
         String customerId = errorBusinessBO.getCustomerId();
-        tbBusiness.setCreateBy(StpUserUtil.getAdmin().getNickname())
+        tbBusiness.setCreateBy(StpUserUtil.getCreateBy())
                 .setPayStep(tbGoods.getPayStep());
         TbCostomer tbCostomer = tbCostomerService.getById(customerId);
         if (tbCostomer != null) {

+ 1 - 1
sp-server/src/main/java/com/pj/project/tb_business_car/TbBusinessCarMapper.java

@@ -45,5 +45,5 @@ public interface TbBusinessCarMapper extends BaseMapper<TbBusinessCar> {
 
     List<TbBusinessCar> searchForPayCar(@Param("carNo") String carNo);
 
-    CarStatics staticsCar(@Param("weightCar") String weightCar, @Param("emptyCar") String emptyCar);
+    CarStatics staticsCar(@Param("weightCar") String weightCar, @Param("emptyCar") String emptyCar, @Param("list")List<String> list);
 }

+ 6 - 0
sp-server/src/main/java/com/pj/project/tb_business_car/TbBusinessCarMapper.xml

@@ -189,6 +189,12 @@
                        ELSE 0 END)                                                                 as emptyCar
 
         FROM tb_business_car
+        <if test="list!=null and list.size>0">
+            where car_no not in
+            <foreach collection="list" open="(" close=")" item="carNo" separator=",">
+                #{carNo}
+            </foreach>
+        </if>
     </select>
 
 

+ 10 - 2
sp-server/src/main/java/com/pj/project/tb_business_car/TbBusinessCarService.java

@@ -16,6 +16,7 @@ import com.pj.project.tb_account.AutomaticPay;
 import com.pj.project.tb_business.TbBusiness;
 import com.pj.project.tb_business.TbBusinessService;
 import com.pj.project.tb_business_car.statics.CarStatics;
+import com.pj.project.tb_car.TbCar;
 import com.pj.project.tb_car.TbCarService;
 import com.pj.project.tb_car_no_color.TbCarNoColorService;
 import com.pj.project.tb_deduction_bind.TbDeductionBindService;
@@ -195,7 +196,7 @@ public class TbBusinessCarService extends ServiceImpl<TbBusinessCarMapper, TbBus
         TbBusinessCar db = this.getById(t.getId());
         if (db.getRealOutTime() == null && t.getRealOutTime() != null) {
             //补录放行记录,解绑扣费绑定
-           tbDeductionBindService.autoUnbindCar(db.getCarNo());
+            tbDeductionBindService.autoUnbindCar(db.getCarNo());
         }
         String oldCarNo = db.getCarNo();
         String newCarNo = t.getCarNo();
@@ -390,8 +391,15 @@ public class TbBusinessCarService extends ServiceImpl<TbBusinessCarMapper, TbBus
         this.updateById(db);
     }
 
+    /**
+     * 首页统计====>排除行政车
+     *
+     * @return
+     */
     public CarStatics staticsCar() {
-        return tbBusinessCarMapper.staticsCar(TbItem.ItemTypeEnum.WEIGHT_TYPE.getType(), TbItem.ItemTypeEnum.EMPTY_TYPE.getType());
+        List<TbCar> cars = tbCarService.list();
+        List<String> carNoList = cars.stream().map(TbCar::getCardNo).collect(Collectors.toList());
+        return tbBusinessCarMapper.staticsCar(TbItem.ItemTypeEnum.WEIGHT_TYPE.getType(), TbItem.ItemTypeEnum.EMPTY_TYPE.getType(),carNoList);
     }
 
     public List<TbBusinessCar> getPay(String day) {

+ 4 - 1
sp-server/src/main/java/com/pj/project/tb_fee_details/TbFeeDetailsMapper.xml

@@ -75,8 +75,11 @@
         <where>
             <if test=' this.has("id") '>and id = #{id}</if>
             <if test=' this.has("businessId") '>and business_id = #{businessId}</if>
-            <if test=' this.has("businessNo") '>and business_no = #{businessNo}</if>
+            <if test=' this.has("businessNo") '>and (business_no like concat('%',#{businessNo},'%')
+                                                    or business_car_no like concat('%',#{businessNo},'%'))</if>
             <if test=' this.has("carNo") '>and car_no like concat('%',#{carNo},'%')</if>
+            <if test=' this.has("transactionId") '>and transaction_id like concat('%',#{transactionId},'%')</if>
+            <if test=' this.has("pickCustomerName") '>and pick_customer_name like concat('%',#{pickCustomerName},'%')</if>
             <if test=' this.has("feeType") '>and fee_type = #{feeType}</if>
             <if test=' this.has("itemTypeId") '>and item_type_id = #{itemTypeId}</if>
             <if test=' this.has("itemTypeName") '>and item_type_name = #{itemTypeName}</if>

+ 1 - 0
sp-server/src/main/java/com/pj/project/tb_fee_details/TbFeeDetailsService.java

@@ -492,6 +492,7 @@ public class TbFeeDetailsService extends ServiceImpl<TbFeeDetailsMapper, TbFeeDe
                     .setSettle("已结算").setTaxRate(feeDetails.getTaxRate().multiply(new BigDecimal(100)))
                     .setTaxPrice(feeDetails.getTaxPrice()).setNoTaxPrice(feeDetails.getNoTaxPrice()).setPayTime(feeDetails.getPayTime())
                     .setPickCustomerName(feeDetails.getPickCustomerName())
+                    .setCustomerName(feeDetails.getCustomerName())
                     .setTransactionId(feeDetails.getTransactionId())
                     .setKaiDanPerson(feeDetails.getKaiDanPerson())
                     .setJiChaPerson(feeDetails.getJiChaPerson())

+ 25 - 0
sp-server/src/main/java/com/pj/project4sp/admin4login/SpAccAdminController.java

@@ -1,10 +1,16 @@
 package com.pj.project4sp.admin4login;
 
 import cn.dev33.satoken.stp.StpUtil;
+import cn.hutool.core.date.DateUnit;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.StrUtil;
+import com.pj.current.config.SystemObject;
 import com.pj.project4sp.admin.SpAdmin;
 import com.pj.project4sp.admin.SpAdminUtil;
 import com.pj.project4sp.role4permission.SpRolePermissionService;
 import com.pj.project4sp.spcfg.SpCfgUtil;
+import com.pj.utils.cache.RedisUtil;
+import com.pj.utils.sg.AjaxError;
 import com.pj.utils.sg.AjaxJson;
 import com.pj.utils.sg.NbUtil;
 import com.pj.utils.so.SoMap;
@@ -44,6 +50,25 @@ public class SpAccAdminController {
     }
 
 
+    @RequestMapping("checkTimeout")
+    AjaxJson checkTimeout() {
+        if (!StpUtil.isLogin()){
+            return AjaxJson.getSuccess();
+        }
+        String key=StpUtil.getLoginIdAsString();
+        String time = RedisUtil.get(key);
+        String now = DateUtil.now();
+        if (StrUtil.isEmpty(time)) {
+            time = now;
+        }
+        long min = DateUtil.between(DateUtil.parseDateTime(time), DateUtil.parseDateTime(now), DateUnit.MINUTE);
+        if (min > SystemObject.config.getLoginOutMinute()) {
+           return AjaxJson.getError("操作超时",405);
+        }
+        return AjaxJson.getSuccess();
+    }
+
+
     /**
      * 退出登录
      */

+ 7 - 3
sp-server/src/main/java/com/pj/project4sp/admin4login/SpAccAdminService.java

@@ -3,13 +3,16 @@ package com.pj.project4sp.admin4login;
 
 import cn.dev33.satoken.spring.SpringMVCUtil;
 import cn.dev33.satoken.stp.StpUtil;
+import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.StrUtil;
 import com.pj.current.config.SystemObject;
+import com.pj.current.satoken.SaTokenConfigure;
 import com.pj.current.satoken.StpUserUtil;
 import com.pj.project4sp.SP;
 import com.pj.project4sp.admin.SpAdmin;
 import com.pj.project4sp.admin.SpAdminMapper;
 import com.pj.project4sp.role4permission.SpRolePermissionService;
+import com.pj.utils.cache.RedisUtil;
 import com.pj.utils.sg.AjaxJson;
 import com.pj.utils.sg.NbUtil;
 import com.pj.utils.sg.WebNbUtil;
@@ -19,6 +22,7 @@ import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
+import java.time.LocalDateTime;
 import java.util.Date;
 
 /**
@@ -74,14 +78,14 @@ public class SpAccAdminService {
         }
         // 3、开始验证
         if (admin == null) {
-            return AjaxJson.getError("无此账号");
+            return AjaxJson.getError("账号或密码错误");
         }
         if (NbUtil.isNull(admin.getPassword2())) {
             return AjaxJson.getError("此账号尚未设置密码,无法登陆");
         }
         String md5Password = SystemObject.getPasswordMd5(admin.getId(), password);
         if (!admin.getPassword2().equals(md5Password)) {
-            return AjaxJson.getError("密码错误");
+            return AjaxJson.getError("账号或密码错误");
         }
         // 4、是否禁用
         if (admin.getStatus() == 2) {
@@ -91,7 +95,7 @@ public class SpAccAdminService {
         successLogin(admin);
         StpUtil.login(admin.getId());
         StpUserUtil.saveAdmin(admin.getId(), admin);
-
+        RedisUtil.set(StpUtil.getLoginIdAsString(), DateUtil.now());
         StpUserUtil.setLoginName(admin.getName(), admin.getPhone());
         // 组织返回参数
         SoMap map = new SoMap();

+ 4 - 2
sp-server/src/main/resources/application-dev.yml

@@ -6,9 +6,9 @@ spring:
     # 数据源配置
     datasource:
         type: com.alibaba.druid.pool.DruidDataSource
-        url: jdbc:mysql://127.0.0.1:3306/pco_system?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=GMT%2B8
+        url: jdbc:mysql://47.101.143.145:3306/pco0815?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=GMT%2B8
         username: root
-        password: 123456
+        password: 1qaz@WSX
         # 是否打开sql监控台  (生产环境请务必关闭此选项)
         druid:
             stat-view-servlet:
@@ -47,6 +47,7 @@ spring:
         # 本项目部署到的服务器域名(文件上传等等模块  要用到)
         domain: http://127.0.0.1:8099/pro
         web-domain: https://127.0.0.1:8080
+        login-out-minute: 10
 part-config:
     base-price: 30 #基础费用
     extra-price: 10 #过夜额外收费
@@ -55,6 +56,7 @@ part-config:
     free-car-length: 4.2
     tax-rate: 0.09
     test-env: true
+    min-seconds: 5
 car:
     max-length: 20
     max-weight: 990000

+ 3 - 3
sp-server/src/main/resources/logback.xml

@@ -10,7 +10,7 @@
     <appender name="FILE_DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">
         <file>${LOG_PATH}/${APP_DIR}/log_debug.log</file>
         <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
-            <fileNamePattern>${LOG_PATH}/${APP_DIR}/debug/debug-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
+            <fileNamePattern>${LOG_PATH}/${APP_DIR}/debug/debug-%d{yyyy-MM-dd HH-mm-ss}.%i.log</fileNamePattern>
             <maxFileSize>${log.maxFileSize}</maxFileSize>
             <maxHistory>${log.maxFileCnt}</maxHistory>
             <totalSizeCap>${log.totalSizeCap}</totalSizeCap>
@@ -30,7 +30,7 @@
     <appender name="FILE_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
         <file>${LOG_PATH}/${APP_DIR}/log_info.log</file>
         <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
-            <fileNamePattern>${LOG_PATH}/${APP_DIR}/info/info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
+            <fileNamePattern>${LOG_PATH}/${APP_DIR}/info/info-%d{yyyy-MM-dd HH-mm-ss}.%i.log</fileNamePattern>
             <maxFileSize>${log.maxFileSize}</maxFileSize>
             <maxHistory>${log.maxFileCnt}</maxHistory>
             <totalSizeCap>${log.totalSizeCap}</totalSizeCap>
@@ -87,7 +87,7 @@
     <appender name="SXFX_info_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
         <file>${LOG_PATH}/${APP_DIR}/SxFx_info.log</file>
         <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
-            <fileNamePattern>${LOG_PATH}/${APP_DIR}/SxFx/SxFx_info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
+            <fileNamePattern>${LOG_PATH}/${APP_DIR}/SxFx/SxFx_info-%d{yyyy-MM-dd HH-mm-ss}.%i.log</fileNamePattern>
             <maxFileSize>${log.maxFileSize}</maxFileSize>
             <maxHistory>${log.maxFileCnt}</maxHistory>
             <totalSizeCap>${log.totalSizeCap}</totalSizeCap>

二進制
sp-server/src/main/resources/static/day-fee-new.xlsx


部分文件因文件數量過多而無法顯示