Compare commits
	
		
			8 Commits
		
	
	
		
			mybatis
			...
			feature-pe
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| bc7e56c336 | |||
| f54f6bbfea | |||
| 21a50f4c61 | |||
| 075da72a73 | |||
| ae68f047f4 | |||
| 7c5da24f5a | |||
| 4d03abde27 | |||
| 08ea359cd1 | 
| @@ -202,9 +202,7 @@ CREATE OR REPLACE PACKAGE BODY TELSALE_ARCHIEVEMENT_PKG IS | |||||||
|                AND ǩ<><C7A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD> >= TO_DATE(TO_CHAR(SYSDATE, |                AND ǩ<><C7A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD> >= TO_DATE(TO_CHAR(SYSDATE, | ||||||
|                                            'yyyy') || '-01-01 00:00:00', |                                            'yyyy') || '-01-01 00:00:00', | ||||||
|                                    'yyyy-mm-dd hh24:mi:ss') |                                    'yyyy-mm-dd hh24:mi:ss') | ||||||
|                AND ǩ<><C7A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD> < TO_DATE(TO_CHAR(SYSDATE, |                AND ǩ<><C7A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <= SYSDATE | ||||||
|                                           'yyyy-mm') || '-01 00:00:00', |  | ||||||
|                                   'yyyy-mm-dd hh24:mi:ss') |  | ||||||
|              GROUP BY CF.<2E>·<EFBFBD> |              GROUP BY CF.<2E>·<EFBFBD> | ||||||
|              ORDER BY CF.<2E>·<EFBFBD>; |              ORDER BY CF.<2E>·<EFBFBD>; | ||||||
|     END; |     END; | ||||||
|   | |||||||
| @@ -67,7 +67,7 @@ module.exports = { | |||||||
|                     js: "espree", |                     js: "espree", | ||||||
|                     "<template>": "espree", |                     "<template>": "espree", | ||||||
|                 }, |                 }, | ||||||
|                 // project: "./tsconfig.json", |                 project: "./tsconfig.json", | ||||||
|                 extraFileExtensions: [".vue",], |                 extraFileExtensions: [".vue",], | ||||||
|             }, |             }, | ||||||
|             plugins: ["eslint-plugin-vue",], |             plugins: ["eslint-plugin-vue",], | ||||||
| @@ -75,7 +75,7 @@ module.exports = { | |||||||
|                 "plugin:vue/vue3-essential", |                 "plugin:vue/vue3-essential", | ||||||
|                 "plugin:vue/recommended", |                 "plugin:vue/recommended", | ||||||
|                 "eslint:recommended", |                 "eslint:recommended", | ||||||
|                 // "standard-with-typescript",  |                 "standard-with-typescript",  | ||||||
|                 "plugin:@typescript-eslint/eslint-recommended", |                 "plugin:@typescript-eslint/eslint-recommended", | ||||||
|                 "plugin:@typescript-eslint/recommended", |                 "plugin:@typescript-eslint/recommended", | ||||||
|             ], |             ], | ||||||
|   | |||||||
							
								
								
									
										138
									
								
								code/web/task_schedule/package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										138
									
								
								code/web/task_schedule/package-lock.json
									
									
									
										generated
									
									
									
								
							| @@ -8,7 +8,7 @@ | |||||||
|             "name": "task_schedule", |             "name": "task_schedule", | ||||||
|             "version": "0.0.0", |             "version": "0.0.0", | ||||||
|             "dependencies": { |             "dependencies": { | ||||||
|                 "@babel/eslint-parser": "^7.22.11", |                 "@babel/eslint-parser": "^7.22.15", | ||||||
|                 "@element-plus/icons-vue": "^2.1.0", |                 "@element-plus/icons-vue": "^2.1.0", | ||||||
|                 "@rushstack/eslint-patch": "^1.3.3", |                 "@rushstack/eslint-patch": "^1.3.3", | ||||||
|                 "@vue/eslint-config-typescript": "^11.0.3", |                 "@vue/eslint-config-typescript": "^11.0.3", | ||||||
| @@ -23,9 +23,9 @@ | |||||||
|                 "vuex": "^4.1.0" |                 "vuex": "^4.1.0" | ||||||
|             }, |             }, | ||||||
|             "devDependencies": { |             "devDependencies": { | ||||||
|                 "@babel/eslint-parser": "^7.22.11", |                 "@babel/eslint-parser": "^7.22.15", | ||||||
|                 "@typescript-eslint/eslint-plugin": "^6.5.0", |                 "@typescript-eslint/eslint-plugin": "^6.6.0", | ||||||
|                 "@vitejs/plugin-vue": "^4.3.3", |                 "@vitejs/plugin-vue": "^4.3.4", | ||||||
|                 "@vue/cli-plugin-eslint": "^5.0.8", |                 "@vue/cli-plugin-eslint": "^5.0.8", | ||||||
|                 "axios": "~1.5.0", |                 "axios": "~1.5.0", | ||||||
|                 "eslint-config-recommended": "^4.1.0", |                 "eslint-config-recommended": "^4.1.0", | ||||||
| @@ -115,9 +115,9 @@ | |||||||
|             } |             } | ||||||
|         }, |         }, | ||||||
|         "node_modules/@babel/eslint-parser": { |         "node_modules/@babel/eslint-parser": { | ||||||
|             "version": "7.22.11", |             "version": "7.22.15", | ||||||
|             "resolved": "https://registry.npmmirror.com/@babel/eslint-parser/-/eslint-parser-7.22.11.tgz", |             "resolved": "https://registry.npmmirror.com/@babel/eslint-parser/-/eslint-parser-7.22.15.tgz", | ||||||
|             "integrity": "sha512-YjOYZ3j7TjV8OhLW6NCtyg8G04uStATEUe5eiLuCZaXz2VSDQ3dsAtm2D+TuQyAqNMUK2WacGo0/uma9Pein1w==", |             "integrity": "sha512-yc8OOBIQk1EcRrpizuARSQS0TWAcOMpEJ1aafhNznaeYkeL+OhqnDObGFylB8ka8VFF/sZc+S4RzHyO+3LjQxg==", | ||||||
|             "dev": true, |             "dev": true, | ||||||
|             "dependencies": { |             "dependencies": { | ||||||
|                 "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", |                 "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", | ||||||
| @@ -1560,16 +1560,16 @@ | |||||||
|             } |             } | ||||||
|         }, |         }, | ||||||
|         "node_modules/@typescript-eslint/eslint-plugin": { |         "node_modules/@typescript-eslint/eslint-plugin": { | ||||||
|             "version": "6.5.0", |             "version": "6.6.0", | ||||||
|             "resolved": "https://registry.npmmirror.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.5.0.tgz", |             "resolved": "https://registry.npmmirror.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.6.0.tgz", | ||||||
|             "integrity": "sha512-2pktILyjvMaScU6iK3925uvGU87E+N9rh372uGZgiMYwafaw9SXq86U04XPq3UH6tzRvNgBsub6x2DacHc33lw==", |             "integrity": "sha512-CW9YDGTQnNYMIo5lMeuiIG08p4E0cXrXTbcZ2saT/ETE7dWUrNxlijsQeU04qAAKkILiLzdQz+cGFxCJjaZUmA==", | ||||||
|             "dev": true, |             "dev": true, | ||||||
|             "dependencies": { |             "dependencies": { | ||||||
|                 "@eslint-community/regexpp": "^4.5.1", |                 "@eslint-community/regexpp": "^4.5.1", | ||||||
|                 "@typescript-eslint/scope-manager": "6.5.0", |                 "@typescript-eslint/scope-manager": "6.6.0", | ||||||
|                 "@typescript-eslint/type-utils": "6.5.0", |                 "@typescript-eslint/type-utils": "6.6.0", | ||||||
|                 "@typescript-eslint/utils": "6.5.0", |                 "@typescript-eslint/utils": "6.6.0", | ||||||
|                 "@typescript-eslint/visitor-keys": "6.5.0", |                 "@typescript-eslint/visitor-keys": "6.6.0", | ||||||
|                 "debug": "^4.3.4", |                 "debug": "^4.3.4", | ||||||
|                 "graphemer": "^1.4.0", |                 "graphemer": "^1.4.0", | ||||||
|                 "ignore": "^5.2.4", |                 "ignore": "^5.2.4", | ||||||
| @@ -1591,34 +1591,34 @@ | |||||||
|             } |             } | ||||||
|         }, |         }, | ||||||
|         "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { |         "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { | ||||||
|             "version": "6.5.0", |             "version": "6.6.0", | ||||||
|             "resolved": "https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-6.5.0.tgz", |             "resolved": "https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-6.6.0.tgz", | ||||||
|             "integrity": "sha512-A8hZ7OlxURricpycp5kdPTH3XnjG85UpJS6Fn4VzeoH4T388gQJ/PGP4ole5NfKt4WDVhmLaQ/dBLNDC4Xl/Kw==", |             "integrity": "sha512-pT08u5W/GT4KjPUmEtc2kSYvrH8x89cVzkA0Sy2aaOUIw6YxOIjA8ilwLr/1fLjOedX1QAuBpG9XggWqIIfERw==", | ||||||
|             "dev": true, |             "dev": true, | ||||||
|             "dependencies": { |             "dependencies": { | ||||||
|                 "@typescript-eslint/types": "6.5.0", |                 "@typescript-eslint/types": "6.6.0", | ||||||
|                 "@typescript-eslint/visitor-keys": "6.5.0" |                 "@typescript-eslint/visitor-keys": "6.6.0" | ||||||
|             }, |             }, | ||||||
|             "engines": { |             "engines": { | ||||||
|                 "node": "^16.0.0 || >=18.0.0" |                 "node": "^16.0.0 || >=18.0.0" | ||||||
|             } |             } | ||||||
|         }, |         }, | ||||||
|         "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": { |         "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": { | ||||||
|             "version": "6.5.0", |             "version": "6.6.0", | ||||||
|             "resolved": "https://registry.npmmirror.com/@typescript-eslint/types/-/types-6.5.0.tgz", |             "resolved": "https://registry.npmmirror.com/@typescript-eslint/types/-/types-6.6.0.tgz", | ||||||
|             "integrity": "sha512-eqLLOEF5/lU8jW3Bw+8auf4lZSbbljHR2saKnYqON12G/WsJrGeeDHWuQePoEf9ro22+JkbPfWQwKEC5WwLQ3w==", |             "integrity": "sha512-CB6QpJQ6BAHlJXdwUmiaXDBmTqIE2bzGTDLADgvqtHWuhfNP3rAOK7kAgRMAET5rDRr9Utt+qAzRBdu3AhR3sg==", | ||||||
|             "dev": true, |             "dev": true, | ||||||
|             "engines": { |             "engines": { | ||||||
|                 "node": "^16.0.0 || >=18.0.0" |                 "node": "^16.0.0 || >=18.0.0" | ||||||
|             } |             } | ||||||
|         }, |         }, | ||||||
|         "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { |         "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { | ||||||
|             "version": "6.5.0", |             "version": "6.6.0", | ||||||
|             "resolved": "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.5.0.tgz", |             "resolved": "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.6.0.tgz", | ||||||
|             "integrity": "sha512-yCB/2wkbv3hPsh02ZS8dFQnij9VVQXJMN/gbQsaaY+zxALkZnxa/wagvLEFsAWMPv7d7lxQmNsIzGU1w/T/WyA==", |             "integrity": "sha512-L61uJT26cMOfFQ+lMZKoJNbAEckLe539VhTxiGHrWl5XSKQgA0RTBZJW2HFPy5T0ZvPVSD93QsrTKDkfNwJGyQ==", | ||||||
|             "dev": true, |             "dev": true, | ||||||
|             "dependencies": { |             "dependencies": { | ||||||
|                 "@typescript-eslint/types": "6.5.0", |                 "@typescript-eslint/types": "6.6.0", | ||||||
|                 "eslint-visitor-keys": "^3.4.1" |                 "eslint-visitor-keys": "^3.4.1" | ||||||
|             }, |             }, | ||||||
|             "engines": { |             "engines": { | ||||||
| @@ -1705,13 +1705,13 @@ | |||||||
|             } |             } | ||||||
|         }, |         }, | ||||||
|         "node_modules/@typescript-eslint/type-utils": { |         "node_modules/@typescript-eslint/type-utils": { | ||||||
|             "version": "6.5.0", |             "version": "6.6.0", | ||||||
|             "resolved": "https://registry.npmmirror.com/@typescript-eslint/type-utils/-/type-utils-6.5.0.tgz", |             "resolved": "https://registry.npmmirror.com/@typescript-eslint/type-utils/-/type-utils-6.6.0.tgz", | ||||||
|             "integrity": "sha512-f7OcZOkRivtujIBQ4yrJNIuwyCQO1OjocVqntl9dgSIZAdKqicj3xFDqDOzHDlGCZX990LqhLQXWRnQvsapq8A==", |             "integrity": "sha512-8m16fwAcEnQc69IpeDyokNO+D5spo0w1jepWWY2Q6y5ZKNuj5EhVQXjtVAeDDqvW6Yg7dhclbsz6rTtOvcwpHg==", | ||||||
|             "dev": true, |             "dev": true, | ||||||
|             "dependencies": { |             "dependencies": { | ||||||
|                 "@typescript-eslint/typescript-estree": "6.5.0", |                 "@typescript-eslint/typescript-estree": "6.6.0", | ||||||
|                 "@typescript-eslint/utils": "6.5.0", |                 "@typescript-eslint/utils": "6.6.0", | ||||||
|                 "debug": "^4.3.4", |                 "debug": "^4.3.4", | ||||||
|                 "ts-api-utils": "^1.0.1" |                 "ts-api-utils": "^1.0.1" | ||||||
|             }, |             }, | ||||||
| @@ -1728,22 +1728,22 @@ | |||||||
|             } |             } | ||||||
|         }, |         }, | ||||||
|         "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { |         "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { | ||||||
|             "version": "6.5.0", |             "version": "6.6.0", | ||||||
|             "resolved": "https://registry.npmmirror.com/@typescript-eslint/types/-/types-6.5.0.tgz", |             "resolved": "https://registry.npmmirror.com/@typescript-eslint/types/-/types-6.6.0.tgz", | ||||||
|             "integrity": "sha512-eqLLOEF5/lU8jW3Bw+8auf4lZSbbljHR2saKnYqON12G/WsJrGeeDHWuQePoEf9ro22+JkbPfWQwKEC5WwLQ3w==", |             "integrity": "sha512-CB6QpJQ6BAHlJXdwUmiaXDBmTqIE2bzGTDLADgvqtHWuhfNP3rAOK7kAgRMAET5rDRr9Utt+qAzRBdu3AhR3sg==", | ||||||
|             "dev": true, |             "dev": true, | ||||||
|             "engines": { |             "engines": { | ||||||
|                 "node": "^16.0.0 || >=18.0.0" |                 "node": "^16.0.0 || >=18.0.0" | ||||||
|             } |             } | ||||||
|         }, |         }, | ||||||
|         "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { |         "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { | ||||||
|             "version": "6.5.0", |             "version": "6.6.0", | ||||||
|             "resolved": "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.5.0.tgz", |             "resolved": "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.6.0.tgz", | ||||||
|             "integrity": "sha512-q0rGwSe9e5Kk/XzliB9h2LBc9tmXX25G0833r7kffbl5437FPWb2tbpIV9wAATebC/018pGa9fwPDuvGN+LxWQ==", |             "integrity": "sha512-hMcTQ6Al8MP2E6JKBAaSxSVw5bDhdmbCEhGW/V8QXkb9oNsFkA4SBuOMYVPxD3jbtQ4R/vSODBsr76R6fP3tbA==", | ||||||
|             "dev": true, |             "dev": true, | ||||||
|             "dependencies": { |             "dependencies": { | ||||||
|                 "@typescript-eslint/types": "6.5.0", |                 "@typescript-eslint/types": "6.6.0", | ||||||
|                 "@typescript-eslint/visitor-keys": "6.5.0", |                 "@typescript-eslint/visitor-keys": "6.6.0", | ||||||
|                 "debug": "^4.3.4", |                 "debug": "^4.3.4", | ||||||
|                 "globby": "^11.1.0", |                 "globby": "^11.1.0", | ||||||
|                 "is-glob": "^4.0.3", |                 "is-glob": "^4.0.3", | ||||||
| @@ -1760,12 +1760,12 @@ | |||||||
|             } |             } | ||||||
|         }, |         }, | ||||||
|         "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": { |         "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": { | ||||||
|             "version": "6.5.0", |             "version": "6.6.0", | ||||||
|             "resolved": "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.5.0.tgz", |             "resolved": "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.6.0.tgz", | ||||||
|             "integrity": "sha512-yCB/2wkbv3hPsh02ZS8dFQnij9VVQXJMN/gbQsaaY+zxALkZnxa/wagvLEFsAWMPv7d7lxQmNsIzGU1w/T/WyA==", |             "integrity": "sha512-L61uJT26cMOfFQ+lMZKoJNbAEckLe539VhTxiGHrWl5XSKQgA0RTBZJW2HFPy5T0ZvPVSD93QsrTKDkfNwJGyQ==", | ||||||
|             "dev": true, |             "dev": true, | ||||||
|             "dependencies": { |             "dependencies": { | ||||||
|                 "@typescript-eslint/types": "6.5.0", |                 "@typescript-eslint/types": "6.6.0", | ||||||
|                 "eslint-visitor-keys": "^3.4.1" |                 "eslint-visitor-keys": "^3.4.1" | ||||||
|             }, |             }, | ||||||
|             "engines": { |             "engines": { | ||||||
| @@ -1880,17 +1880,17 @@ | |||||||
|             "dev": true |             "dev": true | ||||||
|         }, |         }, | ||||||
|         "node_modules/@typescript-eslint/utils": { |         "node_modules/@typescript-eslint/utils": { | ||||||
|             "version": "6.5.0", |             "version": "6.6.0", | ||||||
|             "resolved": "https://registry.npmmirror.com/@typescript-eslint/utils/-/utils-6.5.0.tgz", |             "resolved": "https://registry.npmmirror.com/@typescript-eslint/utils/-/utils-6.6.0.tgz", | ||||||
|             "integrity": "sha512-9nqtjkNykFzeVtt9Pj6lyR9WEdd8npPhhIPM992FWVkZuS6tmxHfGVnlUcjpUP2hv8r4w35nT33mlxd+Be1ACQ==", |             "integrity": "sha512-mPHFoNa2bPIWWglWYdR0QfY9GN0CfvvXX1Sv6DlSTive3jlMTUy+an67//Gysc+0Me9pjitrq0LJp0nGtLgftw==", | ||||||
|             "dev": true, |             "dev": true, | ||||||
|             "dependencies": { |             "dependencies": { | ||||||
|                 "@eslint-community/eslint-utils": "^4.4.0", |                 "@eslint-community/eslint-utils": "^4.4.0", | ||||||
|                 "@types/json-schema": "^7.0.12", |                 "@types/json-schema": "^7.0.12", | ||||||
|                 "@types/semver": "^7.5.0", |                 "@types/semver": "^7.5.0", | ||||||
|                 "@typescript-eslint/scope-manager": "6.5.0", |                 "@typescript-eslint/scope-manager": "6.6.0", | ||||||
|                 "@typescript-eslint/types": "6.5.0", |                 "@typescript-eslint/types": "6.6.0", | ||||||
|                 "@typescript-eslint/typescript-estree": "6.5.0", |                 "@typescript-eslint/typescript-estree": "6.6.0", | ||||||
|                 "semver": "^7.5.4" |                 "semver": "^7.5.4" | ||||||
|             }, |             }, | ||||||
|             "engines": { |             "engines": { | ||||||
| @@ -1901,35 +1901,35 @@ | |||||||
|             } |             } | ||||||
|         }, |         }, | ||||||
|         "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": { |         "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": { | ||||||
|             "version": "6.5.0", |             "version": "6.6.0", | ||||||
|             "resolved": "https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-6.5.0.tgz", |             "resolved": "https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-6.6.0.tgz", | ||||||
|             "integrity": "sha512-A8hZ7OlxURricpycp5kdPTH3XnjG85UpJS6Fn4VzeoH4T388gQJ/PGP4ole5NfKt4WDVhmLaQ/dBLNDC4Xl/Kw==", |             "integrity": "sha512-pT08u5W/GT4KjPUmEtc2kSYvrH8x89cVzkA0Sy2aaOUIw6YxOIjA8ilwLr/1fLjOedX1QAuBpG9XggWqIIfERw==", | ||||||
|             "dev": true, |             "dev": true, | ||||||
|             "dependencies": { |             "dependencies": { | ||||||
|                 "@typescript-eslint/types": "6.5.0", |                 "@typescript-eslint/types": "6.6.0", | ||||||
|                 "@typescript-eslint/visitor-keys": "6.5.0" |                 "@typescript-eslint/visitor-keys": "6.6.0" | ||||||
|             }, |             }, | ||||||
|             "engines": { |             "engines": { | ||||||
|                 "node": "^16.0.0 || >=18.0.0" |                 "node": "^16.0.0 || >=18.0.0" | ||||||
|             } |             } | ||||||
|         }, |         }, | ||||||
|         "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": { |         "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": { | ||||||
|             "version": "6.5.0", |             "version": "6.6.0", | ||||||
|             "resolved": "https://registry.npmmirror.com/@typescript-eslint/types/-/types-6.5.0.tgz", |             "resolved": "https://registry.npmmirror.com/@typescript-eslint/types/-/types-6.6.0.tgz", | ||||||
|             "integrity": "sha512-eqLLOEF5/lU8jW3Bw+8auf4lZSbbljHR2saKnYqON12G/WsJrGeeDHWuQePoEf9ro22+JkbPfWQwKEC5WwLQ3w==", |             "integrity": "sha512-CB6QpJQ6BAHlJXdwUmiaXDBmTqIE2bzGTDLADgvqtHWuhfNP3rAOK7kAgRMAET5rDRr9Utt+qAzRBdu3AhR3sg==", | ||||||
|             "dev": true, |             "dev": true, | ||||||
|             "engines": { |             "engines": { | ||||||
|                 "node": "^16.0.0 || >=18.0.0" |                 "node": "^16.0.0 || >=18.0.0" | ||||||
|             } |             } | ||||||
|         }, |         }, | ||||||
|         "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": { |         "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": { | ||||||
|             "version": "6.5.0", |             "version": "6.6.0", | ||||||
|             "resolved": "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.5.0.tgz", |             "resolved": "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.6.0.tgz", | ||||||
|             "integrity": "sha512-q0rGwSe9e5Kk/XzliB9h2LBc9tmXX25G0833r7kffbl5437FPWb2tbpIV9wAATebC/018pGa9fwPDuvGN+LxWQ==", |             "integrity": "sha512-hMcTQ6Al8MP2E6JKBAaSxSVw5bDhdmbCEhGW/V8QXkb9oNsFkA4SBuOMYVPxD3jbtQ4R/vSODBsr76R6fP3tbA==", | ||||||
|             "dev": true, |             "dev": true, | ||||||
|             "dependencies": { |             "dependencies": { | ||||||
|                 "@typescript-eslint/types": "6.5.0", |                 "@typescript-eslint/types": "6.6.0", | ||||||
|                 "@typescript-eslint/visitor-keys": "6.5.0", |                 "@typescript-eslint/visitor-keys": "6.6.0", | ||||||
|                 "debug": "^4.3.4", |                 "debug": "^4.3.4", | ||||||
|                 "globby": "^11.1.0", |                 "globby": "^11.1.0", | ||||||
|                 "is-glob": "^4.0.3", |                 "is-glob": "^4.0.3", | ||||||
| @@ -1946,12 +1946,12 @@ | |||||||
|             } |             } | ||||||
|         }, |         }, | ||||||
|         "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/visitor-keys": { |         "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/visitor-keys": { | ||||||
|             "version": "6.5.0", |             "version": "6.6.0", | ||||||
|             "resolved": "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.5.0.tgz", |             "resolved": "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.6.0.tgz", | ||||||
|             "integrity": "sha512-yCB/2wkbv3hPsh02ZS8dFQnij9VVQXJMN/gbQsaaY+zxALkZnxa/wagvLEFsAWMPv7d7lxQmNsIzGU1w/T/WyA==", |             "integrity": "sha512-L61uJT26cMOfFQ+lMZKoJNbAEckLe539VhTxiGHrWl5XSKQgA0RTBZJW2HFPy5T0ZvPVSD93QsrTKDkfNwJGyQ==", | ||||||
|             "dev": true, |             "dev": true, | ||||||
|             "dependencies": { |             "dependencies": { | ||||||
|                 "@typescript-eslint/types": "6.5.0", |                 "@typescript-eslint/types": "6.6.0", | ||||||
|                 "eslint-visitor-keys": "^3.4.1" |                 "eslint-visitor-keys": "^3.4.1" | ||||||
|             }, |             }, | ||||||
|             "engines": { |             "engines": { | ||||||
| @@ -2023,9 +2023,9 @@ | |||||||
|             } |             } | ||||||
|         }, |         }, | ||||||
|         "node_modules/@vitejs/plugin-vue": { |         "node_modules/@vitejs/plugin-vue": { | ||||||
|             "version": "4.3.3", |             "version": "4.3.4", | ||||||
|             "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-4.3.3.tgz", |             "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-4.3.4.tgz", | ||||||
|             "integrity": "sha512-ssxyhIAZqB0TrpUg6R0cBpCuMk9jTIlO1GNSKKQD6S8VjnXi6JXKfUXjSsxey9IwQiaRGsO1WnW9Rkl1L6AJVw==", |             "integrity": "sha512-ciXNIHKPriERBisHFBvnTbfKa6r9SAesOYXeGDzgegcvy9Q4xdScSHAmKbNT0M3O0S9LKhIf5/G+UYG4NnnzYw==", | ||||||
|             "dev": true, |             "dev": true, | ||||||
|             "engines": { |             "engines": { | ||||||
|                 "node": "^14.18.0 || >=16.0.0" |                 "node": "^14.18.0 || >=16.0.0" | ||||||
|   | |||||||
| @@ -9,7 +9,7 @@ | |||||||
|         "preview": "vite preview" |         "preview": "vite preview" | ||||||
|     }, |     }, | ||||||
|     "dependencies": { |     "dependencies": { | ||||||
|         "@babel/eslint-parser": "^7.22.11", |         "@babel/eslint-parser": "^7.22.15", | ||||||
|         "@element-plus/icons-vue": "^2.1.0", |         "@element-plus/icons-vue": "^2.1.0", | ||||||
|         "@rushstack/eslint-patch": "^1.3.3", |         "@rushstack/eslint-patch": "^1.3.3", | ||||||
|         "@vue/eslint-config-typescript": "^11.0.3", |         "@vue/eslint-config-typescript": "^11.0.3", | ||||||
| @@ -24,9 +24,9 @@ | |||||||
|         "vuex": "^4.1.0" |         "vuex": "^4.1.0" | ||||||
|     }, |     }, | ||||||
|     "devDependencies": { |     "devDependencies": { | ||||||
|         "@babel/eslint-parser": "^7.22.11", |         "@babel/eslint-parser": "^7.22.15", | ||||||
|         "@typescript-eslint/eslint-plugin": "^6.5.0", |         "@typescript-eslint/eslint-plugin": "^6.6.0", | ||||||
|         "@vitejs/plugin-vue": "^4.3.3", |         "@vitejs/plugin-vue": "^4.3.4", | ||||||
|         "@vue/cli-plugin-eslint": "^5.0.8", |         "@vue/cli-plugin-eslint": "^5.0.8", | ||||||
|         "axios": "~1.5.0", |         "axios": "~1.5.0", | ||||||
|         "eslint-config-recommended": "^4.1.0", |         "eslint-config-recommended": "^4.1.0", | ||||||
|   | |||||||
| @@ -33,7 +33,7 @@ export default { | |||||||
|         }); |         }); | ||||||
|  |  | ||||||
|         // 设置图表 |         // 设置图表 | ||||||
|         const initCharts = () => |         const initCharts = (): void => | ||||||
|         { |         { | ||||||
|             console.log( "每月业绩", props.chartData ); |             console.log( "每月业绩", props.chartData ); | ||||||
|             const chartDom = document.getElementById( "chartWrapper" ); |             const chartDom = document.getElementById( "chartWrapper" ); | ||||||
| @@ -55,7 +55,7 @@ export default { | |||||||
|                 ], |                 ], | ||||||
|             }; |             }; | ||||||
|  |  | ||||||
|             option && myChart.setOption( option ); |             myChart.setOption( option ); | ||||||
|  |  | ||||||
|             window.onresize = function () |             window.onresize = function () | ||||||
|             { |             { | ||||||
|   | |||||||
| @@ -0,0 +1,166 @@ | |||||||
|  | <!-- | ||||||
|  |  * @Author: Kane | ||||||
|  |  * @Date: 2023-08-30 14:08:57 | ||||||
|  |  * @LastEditors: Kane | ||||||
|  |  * @FilePath: /task_schedule/src/components/CallerArchievementComponent.vue | ||||||
|  |  * @Description: | ||||||
|  |  * | ||||||
|  |  * Copyright (c) ${2022} by Kane, All Rights Reserved. | ||||||
|  | --> | ||||||
|  | <template> | ||||||
|  |     <div class="caller-archievment-wrapper"> | ||||||
|  |         <h1>{{ CallerName }}</h1> | ||||||
|  |         <table> | ||||||
|  |             <tr> | ||||||
|  |                 <th>当月保费</th><td>{{ PresentMonthPremium }} 万元</td> | ||||||
|  |             </tr> | ||||||
|  |             <tr> | ||||||
|  |                 <th>车非渗透率</th><td>{{ props.attachingRate }}%</td> | ||||||
|  |             </tr> | ||||||
|  |             <tr> | ||||||
|  |                 <th>续保率</th><td>{{ props.renewalRate }}%</td> | ||||||
|  |             </tr> | ||||||
|  |         </table> | ||||||
|  |     </div> | ||||||
|  | </template> | ||||||
|  | <script lang="ts"> | ||||||
|  | import { computed } from "vue"; | ||||||
|  | interface CallerArchievementComponentUI | ||||||
|  | { | ||||||
|  |     callerName: string, | ||||||
|  |     thisMonthPremium: number, | ||||||
|  |     attachingRate: string, | ||||||
|  |     renewalRate: string, | ||||||
|  | } | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  |     name: "CallerArchievementComponent", | ||||||
|  |     props: { | ||||||
|  |         callerName: { | ||||||
|  |             type: String, | ||||||
|  |             require: true, | ||||||
|  |             default: (): string => "", | ||||||
|  |         }, | ||||||
|  |         thisMonthPremium: { | ||||||
|  |             type: Number, | ||||||
|  |             require: true, | ||||||
|  |             default: (): number => 0, | ||||||
|  |         }, | ||||||
|  |         attachingRate: { | ||||||
|  |             type: String, | ||||||
|  |             require: true, | ||||||
|  |             default: (): string => "0.0", | ||||||
|  |         }, | ||||||
|  |         renewalRate: { | ||||||
|  |             type: String, | ||||||
|  |             require: true, | ||||||
|  |             default: (): string => "0.0", | ||||||
|  |         }, | ||||||
|  |     }, | ||||||
|  |     setup( props ) | ||||||
|  |     { | ||||||
|  |         const ui: CallerArchievementComponentUI = { | ||||||
|  |             callerName: "", | ||||||
|  |             thisMonthPremium: 0, | ||||||
|  |             attachingRate: "0.0", | ||||||
|  |             renewalRate: "0.0", | ||||||
|  |         }; | ||||||
|  |  | ||||||
|  |         const PresentMonthPremium = computed((): string => | ||||||
|  |         { | ||||||
|  |             return ( props.thisMonthPremium / 10000 ).toFixed( 2 ); | ||||||
|  |         }); | ||||||
|  |  | ||||||
|  |         const CallerName = computed((): string => | ||||||
|  |         { | ||||||
|  |             return props.callerName; | ||||||
|  |         }); | ||||||
|  |  | ||||||
|  |         return { | ||||||
|  |             CallerName, | ||||||
|  |             PresentMonthPremium, | ||||||
|  |             ui, | ||||||
|  |             props, | ||||||
|  |         }; | ||||||
|  |     }, | ||||||
|  | }; | ||||||
|  | </script> | ||||||
|  | <style scoped lang="scss"> | ||||||
|  | .caller-archievment-wrapper | ||||||
|  | { | ||||||
|  |     width: 300px; | ||||||
|  |     height: 120px; | ||||||
|  |  | ||||||
|  |     border-radius: 5px; | ||||||
|  |  | ||||||
|  |     margin-bottom: 30px; | ||||||
|  |  | ||||||
|  |     display: flex; | ||||||
|  |     flex-direction: column; | ||||||
|  |     justify-content: flex-start; | ||||||
|  |     align-items: center; | ||||||
|  |  | ||||||
|  |     background-color: #fff; | ||||||
|  |     color: #4f4f4f; | ||||||
|  |     font-size: 15px; | ||||||
|  |  | ||||||
|  |     h1 { | ||||||
|  |         background-color: #fecb96; | ||||||
|  |         width: 100%; | ||||||
|  |         text-align: center; | ||||||
|  |         border-radius: 5px 5px 0px 0px; | ||||||
|  |         margin: 0px; | ||||||
|  |         padding: 5px 0px; | ||||||
|  |  | ||||||
|  |         color: #da3703; | ||||||
|  |  | ||||||
|  |         font: { | ||||||
|  |             size: 1.2rem; | ||||||
|  |             weight: 100; | ||||||
|  |             family: "FZ-ZHUOHEI"; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     table { | ||||||
|  |         border-collapse: collapse; | ||||||
|  |         border-radius: 0px 0px 5px 5px; | ||||||
|  |         width: 100%; | ||||||
|  |  | ||||||
|  |         margin-top: 5px; | ||||||
|  |  | ||||||
|  |         background-color: #ffffff; | ||||||
|  |  | ||||||
|  |         font: { | ||||||
|  |             size: 14px; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         th,td { | ||||||
|  |             padding: 9px; | ||||||
|  |             border-bottom: 1.5px solid #ebeef5; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         th { | ||||||
|  |             width: 5.2rem; | ||||||
|  |             text-align: right; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         th.caller-name { | ||||||
|  |             text-align: center; | ||||||
|  |             background-color: yellow; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         td { | ||||||
|  |             text-align: left; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         tr:nth-child(even) { | ||||||
|  |             background-color: #f5f6f7; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         tr:last-child td,th { | ||||||
|  |             border-bottom: none; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | </style> | ||||||
| @@ -103,7 +103,7 @@ export default { | |||||||
|     // border: 1px solid red; |     // border: 1px solid red; | ||||||
|     border-radius: 5px; |     border-radius: 5px; | ||||||
|     width: 300px; |     width: 300px; | ||||||
|     height: 250px; |     height: 260px; | ||||||
| } | } | ||||||
|  |  | ||||||
| .rankinglist-index { | .rankinglist-index { | ||||||
|   | |||||||
| @@ -49,13 +49,7 @@ interface MenusalArchievementItem // 每月业绩清单的项目 | |||||||
|  */ |  */ | ||||||
| function queryDepartmentArchievement( departmentInfo: Department, render: any ): void | function queryDepartmentArchievement( departmentInfo: Department, render: any ): void | ||||||
| { | { | ||||||
|     instance.request({ |     // 默认的部门业绩对象 | ||||||
|         method: "post", |  | ||||||
|         url: API_URL.URL_DEPARTMENT_ARCHIEVEMENT, |  | ||||||
|         data: departmentInfo, |  | ||||||
|     }) |  | ||||||
|         .then(( response ) => |  | ||||||
|         { |  | ||||||
|     const archievement: DepartmentArchievement = { |     const archievement: DepartmentArchievement = { | ||||||
|         success: false, |         success: false, | ||||||
|         message: "", |         message: "", | ||||||
| @@ -68,12 +62,19 @@ function queryDepartmentArchievement( departmentInfo: Department, render: any ): | |||||||
|         backward_list: [], |         backward_list: [], | ||||||
|     }; |     }; | ||||||
|  |  | ||||||
|  |     instance.request({ | ||||||
|  |         method: "post", | ||||||
|  |         url: API_URL.URL_DEPARTMENT_ARCHIEVEMENT, | ||||||
|  |         data: departmentInfo, | ||||||
|  |     }) | ||||||
|  |         // 请求结束,将请求的结果写入业绩对象,然后调用功能渲染函数。 | ||||||
|  |         .then(( response ) => | ||||||
|  |         { | ||||||
|             const data = response.data ?? {}; |             const data = response.data ?? {}; | ||||||
|  |  | ||||||
|             archievement.success = data.success ?? false; |             archievement.success = data.success ?? false; | ||||||
|             archievement.message = data.message ?? ""; |             archievement.message = data.message ?? "服务器没有返回调用结果消息,请检查日志!"; | ||||||
|             archievement.total_archievement = data.total_archievement; |             archievement.total_archievement = data.total_archievement; | ||||||
|             // archievement.mensual_archievement_list = data.mensual_archievement_list ?? []; |  | ||||||
|             archievement.mensual_archievement_list = []; |             archievement.mensual_archievement_list = []; | ||||||
|             archievement.insurance_renewal_rate = data.insurance_renewal_rate ?? "0.0"; |             archievement.insurance_renewal_rate = data.insurance_renewal_rate ?? "0.0"; | ||||||
|             archievement.attaching_rate = data.attaching_rate ?? "0.0"; |             archievement.attaching_rate = data.attaching_rate ?? "0.0"; | ||||||
| @@ -90,12 +91,25 @@ function queryDepartmentArchievement( departmentInfo: Department, render: any ): | |||||||
|  |  | ||||||
|             console.log( "每月业绩", archievement ); |             console.log( "每月业绩", archievement ); | ||||||
|  |  | ||||||
|             // 渲染数据 |             // 调用渲染函数 | ||||||
|  |             if ( render !== undefined ) | ||||||
|  |             { | ||||||
|                 render( archievement ); |                 render( archievement ); | ||||||
|  |             } | ||||||
|         }) |         }) | ||||||
|  |         // 请求失败,将失败原因写入业绩对象,调用渲染函数 | ||||||
|         .catch(( error ) => |         .catch(( error ) => | ||||||
|         { |         { | ||||||
|             console.log( error ); |             archievement.success = false; | ||||||
|  |             archievement.message = String( error ); | ||||||
|  |  | ||||||
|  |             // 调用渲染函数 | ||||||
|  |             if ( render !== undefined ) | ||||||
|  |             { | ||||||
|  |                 render( archievement ); | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             console.log( `queryDepartmentArchievement:查询部门${departmentInfo.departmentCode}业绩失败,原因${error}` ); | ||||||
|         }); |         }); | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -103,7 +117,8 @@ function queryDepartmentArchievement( departmentInfo: Department, render: any ): | |||||||
|  * 查询坐席的业绩,并调用渲染函数. |  * 查询坐席的业绩,并调用渲染函数. | ||||||
|  * 1、请求坐席业绩的数据 |  * 1、请求坐席业绩的数据 | ||||||
|  * 2、对每月业绩清单进行检查,如果有缺少则用0代替,检查的结果是12个月的清单,让调用者自己截断; |  * 2、对每月业绩清单进行检查,如果有缺少则用0代替,检查的结果是12个月的清单,让调用者自己截断; | ||||||
|  * 3、将检查后的清单,写入到业绩对象中,只写金额 |  * 3、将检查后的清单,写入到业绩对象中,只写金额; | ||||||
|  |  * 4、即使请求失败,也将失败的message写入业绩对象,调用渲染函数; | ||||||
|  * @param callerInfo 坐席的信息参数,用于请求业绩; |  * @param callerInfo 坐席的信息参数,用于请求业绩; | ||||||
|  * @param render 渲染函数,用业绩对象CallerArchievement作为参数; |  * @param render 渲染函数,用业绩对象CallerArchievement作为参数; | ||||||
|  */ |  */ | ||||||
| @@ -114,6 +129,16 @@ function queryCallerArchievement( callerInfo: TelSaler, render: any ): void | |||||||
|         callName: callerInfo.telSalerName, |         callName: callerInfo.telSalerName, | ||||||
|     }; |     }; | ||||||
|  |  | ||||||
|  |     // 默认的业绩对象 | ||||||
|  |     const callArchievement: CallerArchievement = { | ||||||
|  |         success: false, | ||||||
|  |         message: "", | ||||||
|  |         total_archievement: 0, | ||||||
|  |         mensual_archievement_list: [], | ||||||
|  |         insurance_renewal_rate: "0.0", | ||||||
|  |         attaching_rate: "0.0", | ||||||
|  |     }; | ||||||
|  |  | ||||||
|     // 发送请求 |     // 发送请求 | ||||||
|     instance.request({ |     instance.request({ | ||||||
|         method: "post", |         method: "post", | ||||||
| @@ -125,14 +150,12 @@ function queryCallerArchievement( callerInfo: TelSaler, render: any ): void | |||||||
|         { |         { | ||||||
|             const data = response.data ?? {}; |             const data = response.data ?? {}; | ||||||
|  |  | ||||||
|             const callArchievement: CallerArchievement = { |             callArchievement.success = data.success ?? false; | ||||||
|                 success: data.success ?? false, |             callArchievement.message = data.message ?? "服务器没有返回调用结果消息,请检查日志!"; | ||||||
|                 message: data.message ?? "", |             callArchievement.total_archievement = data.total_archievement ?? 0; | ||||||
|                 total_archievement: data.total_archievement ?? 0, |             callArchievement.mensual_archievement_list = []; | ||||||
|                 mensual_archievement_list: [], |             callArchievement.insurance_renewal_rate = data.insurance_renewal_rate ?? "0.0"; | ||||||
|                 insurance_renewal_rate: data.insurance_renewal_rate ?? "0.0", |             callArchievement.attaching_rate = data.attaching_rate ?? "0.0"; | ||||||
|                 attaching_rate: data.attaching_rate ?? "0.0", |  | ||||||
|             }; |  | ||||||
|  |  | ||||||
|             // 检查业绩清单有没有缺漏,缺漏的用0补上 |             // 检查业绩清单有没有缺漏,缺漏的用0补上 | ||||||
|             const checkedList = checkMensualArchievement( data.mensual_archievement_list ); |             const checkedList = checkMensualArchievement( data.mensual_archievement_list ); | ||||||
| @@ -159,9 +182,18 @@ function queryCallerArchievement( callerInfo: TelSaler, render: any ): void | |||||||
|  |  | ||||||
|             console.log( `queryCallerArchievement查询结果${data}` ); |             console.log( `queryCallerArchievement查询结果${data}` ); | ||||||
|         }) |         }) | ||||||
|         // 请求失败 |         // 请求失败,将失败的原因保存到message属性,调用渲染函数 | ||||||
|         .catch(( error: any ) => |         .catch(( error: any ) => | ||||||
|         { |         { | ||||||
|  |             callArchievement.success = false; | ||||||
|  |             callArchievement.message = String( error ); | ||||||
|  |  | ||||||
|  |             // 调用渲染函数 | ||||||
|  |             if ( render !== undefined ) | ||||||
|  |             { | ||||||
|  |                 render( callArchievement ); | ||||||
|  |             } | ||||||
|  |  | ||||||
|             console.log( `queryCallerArchievement:查询坐席${callerInfo.telSalerCode}业绩失败,原因${error}` ); |             console.log( `queryCallerArchievement:查询坐席${callerInfo.telSalerCode}业绩失败,原因${error}` ); | ||||||
|         }); |         }); | ||||||
| } | } | ||||||
|   | |||||||
| @@ -32,6 +32,9 @@ interface RankingListResponse | |||||||
|     renewalRateRankingList: RankingListItem[]; |     renewalRateRankingList: RankingListItem[]; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // 判断用的正则表达式 | ||||||
|  | const regexMonth = "(0[1-9])|(1[0-2])"; | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * 请求坐席排行榜。 |  * 请求坐席排行榜。 | ||||||
|  * @param reqParam 请求参数 |  * @param reqParam 请求参数 | ||||||
| @@ -53,6 +56,9 @@ function requestRankingList( reqParam: RankingListRequest, rander: any ): void / | |||||||
|         renewalRateRankingList: [], |         renewalRateRankingList: [], | ||||||
|     }; |     }; | ||||||
|  |  | ||||||
|  |     // 检查请求参数 | ||||||
|  |     // TODO: 这里要加一个对month的正则表达式验证。 | ||||||
|  |  | ||||||
|     instance.request( |     instance.request( | ||||||
|         { |         { | ||||||
|             method: "post", |             method: "post", | ||||||
|   | |||||||
| @@ -48,7 +48,12 @@ | |||||||
|             </div> |             </div> | ||||||
|         </div> |         </div> | ||||||
|         <div class="right-wrapper"> |         <div class="right-wrapper"> | ||||||
|             <h1>本大爷</h1> |             <CallerArchievementComponent | ||||||
|  |                 :caller-name="callerInfo.telSalerName" | ||||||
|  |                 :this-month-premium="ui.callerPersentMonthPremium" | ||||||
|  |                 :attaching-rate="ui.callerAttachingRate" | ||||||
|  |                 :renewal-rate="ui.callerRenewalRate" | ||||||
|  |             /> | ||||||
|             <div class="carousel-item"> |             <div class="carousel-item"> | ||||||
|                 <el-carousel |                 <el-carousel | ||||||
|                     arrow="never" |                     arrow="never" | ||||||
| @@ -89,10 +94,11 @@ import { ElMessage } from "element-plus"; | |||||||
| import | import | ||||||
| { | { | ||||||
|     type DepartmentArchievement, |     type DepartmentArchievement, | ||||||
|  |     type CallerArchievement, | ||||||
|     queryDepartmentArchievement, |     queryDepartmentArchievement, | ||||||
|     queryCallerArchievement |     queryCallerArchievement | ||||||
| } from "@/utils/archievement.js"; | } from "@/utils/archievement.js"; | ||||||
| import { RankingListItem } from "@/types/cpicxim/RankingListItem.js"; | import { type RankingListItem } from "@/types/cpicxim/RankingListItem.js"; | ||||||
| import | import | ||||||
| { | { | ||||||
|     type RankingListRequest, |     type RankingListRequest, | ||||||
| @@ -105,6 +111,7 @@ import ArchievementCompleteRateComponent from "@/components/ArchievementComplete | |||||||
| import HonorListComponent from "@/components/HonorListComponent.vue"; | import HonorListComponent from "@/components/HonorListComponent.vue"; | ||||||
| import DishonorListComponent from "@/components/DishonorListComponent.vue"; | import DishonorListComponent from "@/components/DishonorListComponent.vue"; | ||||||
| import RankingListComponent from "@/components/RankingListComponent.vue"; | import RankingListComponent from "@/components/RankingListComponent.vue"; | ||||||
|  | import CallerArchievementComponent from "@/components/CallerArchievementComponent.vue"; | ||||||
| import { logout } from "@/utils/account.js"; | import { logout } from "@/utils/account.js"; | ||||||
| import { type TelSaler } from "@/types/cpicxim/TelSaler"; | import { type TelSaler } from "@/types/cpicxim/TelSaler"; | ||||||
|  |  | ||||||
| @@ -121,6 +128,9 @@ interface ui | |||||||
|     showUI: boolean; // 用来刷新页面的开关 |     showUI: boolean; // 用来刷新页面的开关 | ||||||
|     attachingRankingList: RankingListItem[]; // 坐席车非渗透率榜单 |     attachingRankingList: RankingListItem[]; // 坐席车非渗透率榜单 | ||||||
|     renewalRankingList: RankingListItem[]; |     renewalRankingList: RankingListItem[]; | ||||||
|  |     callerAttachingRate: string; | ||||||
|  |     callerRenewalRate: string; | ||||||
|  |     callerPersentMonthPremium: number; | ||||||
| } | } | ||||||
|  |  | ||||||
| export default { | export default { | ||||||
| @@ -131,10 +141,15 @@ export default { | |||||||
|         HonorListComponent, |         HonorListComponent, | ||||||
|         DishonorListComponent, |         DishonorListComponent, | ||||||
|         RankingListComponent, |         RankingListComponent, | ||||||
|  |         CallerArchievementComponent, | ||||||
|     }, |     }, | ||||||
|     setup() |     setup() | ||||||
|     { |     { | ||||||
|         const monthIndex = new Date(); |         const monthIndex = new Date(); | ||||||
|  |         const thisMonth: number = monthIndex.getMonth(); // getMonth返回值从0开始。 | ||||||
|  |         const thisMonthString = thisMonth > 10 ? String( thisMonth ) : "0" + String( thisMonth ); | ||||||
|  |         const thisYear: number = monthIndex.getFullYear(); | ||||||
|  |         const thisYearString: string = String( thisYear ); | ||||||
|         const numInChinese = [ |         const numInChinese = [ | ||||||
|             "一", |             "一", | ||||||
|             "二", |             "二", | ||||||
| @@ -163,10 +178,13 @@ export default { | |||||||
|             showUI: true, // 用来刷新页面的开关 |             showUI: true, // 用来刷新页面的开关 | ||||||
|             attachingRankingList: [], // 坐席车非渗透率榜单 |             attachingRankingList: [], // 坐席车非渗透率榜单 | ||||||
|             renewalRankingList: [], // 坐席续保率榜单 |             renewalRankingList: [], // 坐席续保率榜单 | ||||||
|  |             callerAttachingRate: "0.0", | ||||||
|  |             callerRenewalRate: "0.0", | ||||||
|  |             callerPersentMonthPremium: 0, | ||||||
|         }); |         }); | ||||||
|         let timerHandler = 0; |         let timerHandler = 0; | ||||||
|  |  | ||||||
|         const getTotalArchievement = computed(() => |         const getTotalArchievement = computed((): string => | ||||||
|         { |         { | ||||||
|             const cnyFormat = new Intl.NumberFormat( "zh-cn", { |             const cnyFormat = new Intl.NumberFormat( "zh-cn", { | ||||||
|                 style: "currency", |                 style: "currency", | ||||||
| @@ -178,13 +196,28 @@ export default { | |||||||
|             return archievement; |             return archievement; | ||||||
|         }); |         }); | ||||||
|  |  | ||||||
|         // 保存业绩数据 |         /** | ||||||
|         const applyDepartmentArchievementData = ( data: DepartmentArchievement ) => |          * 将请求函数获取的部门业绩数据,渲染到页面上。 | ||||||
|  |          * @param data DepartmentArchievementl类型的部门业绩数据对象 | ||||||
|  |          */ | ||||||
|  |         const applyDepartmentArchievementData = ( data: DepartmentArchievement ): void => | ||||||
|         { |         { | ||||||
|             console.log( "部门业绩数据", data ); |             // console.log( "部门业绩数据", data ); | ||||||
|  |  | ||||||
|             ui.chartData = data.mensual_archievement_list; |             // 检查请求是否成功 | ||||||
|             ui.totalArchievement = data.total_archievement; |             if ( !data.success ) | ||||||
|  |             { | ||||||
|  |                 // 失败就提示消息,然后退出 | ||||||
|  |                 ElMessage({ | ||||||
|  |                     message: data.message, | ||||||
|  |                     type: "error", | ||||||
|  |                 }); | ||||||
|  |  | ||||||
|  |                 return; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             // ui.chartData = data.mensual_archievement_list; | ||||||
|  |             // ui.totalArchievement = data.total_archievement; | ||||||
|             ui.attaching_rate = data.attaching_rate; |             ui.attaching_rate = data.attaching_rate; | ||||||
|             ui.insurance_renewal_rate = data.insurance_renewal_rate; |             ui.insurance_renewal_rate = data.insurance_renewal_rate; | ||||||
|             ui.leading_reward_gainers = data.leading_reward_gainers; |             ui.leading_reward_gainers = data.leading_reward_gainers; | ||||||
| @@ -201,6 +234,40 @@ export default { | |||||||
|             }, 0 ); |             }, 0 ); | ||||||
|         }; |         }; | ||||||
|  |  | ||||||
|  |         /** | ||||||
|  |          * 将请求的坐席业绩数据渲染到页面 | ||||||
|  |          * @param data  | ||||||
|  |          */ | ||||||
|  |         const applyCallerArchievementData = ( data: CallerArchievement ): void => | ||||||
|  |         { | ||||||
|  |             // 检查请求是否成功 | ||||||
|  |             if ( !data.success ) | ||||||
|  |             { | ||||||
|  |                 // 失败就提示消息,然后退出 | ||||||
|  |                 ElMessage({ | ||||||
|  |                     message: data.message, | ||||||
|  |                     type: "error", | ||||||
|  |                 }); | ||||||
|  |  | ||||||
|  |                 return; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             ui.chartData = data.mensual_archievement_list.slice( 0, thisMonth ); | ||||||
|  |             ui.totalArchievement = data.total_archievement; | ||||||
|  |             ui.callerAttachingRate = data.attaching_rate; | ||||||
|  |             ui.callerRenewalRate = data.insurance_renewal_rate; | ||||||
|  |             ui.callerPersentMonthPremium = data.mensual_archievement_list[thisMonth]; | ||||||
|  |  | ||||||
|  |             // console.log( "业绩清单", ui.chartData ); | ||||||
|  |             // console.log( "当月", data.mensual_archievement_list ); | ||||||
|  |  | ||||||
|  |             ui.showUI = false; | ||||||
|  |             setTimeout(() => | ||||||
|  |             { | ||||||
|  |                 ui.showUI = true; | ||||||
|  |             }, 0 ); | ||||||
|  |         }; | ||||||
|  |  | ||||||
|         const applyRankingListData = ( data: RankingListResponse ): void => |         const applyRankingListData = ( data: RankingListResponse ): void => | ||||||
|         { |         { | ||||||
|             ui.attachingRankingList = data.attachingRateRankingList; |             ui.attachingRankingList = data.attachingRateRankingList; | ||||||
| @@ -219,7 +286,7 @@ export default { | |||||||
|         }; |         }; | ||||||
|  |  | ||||||
|         // 退出桌面霸屏 |         // 退出桌面霸屏 | ||||||
|         const logoutDesktopArchievement = () => |         const logoutDesktopArchievement = (): void => | ||||||
|         { |         { | ||||||
|             console.log( "111" ); |             console.log( "111" ); | ||||||
|             logout(); |             logout(); | ||||||
| @@ -236,13 +303,13 @@ export default { | |||||||
|                 center: true, |                 center: true, | ||||||
|             }); |             }); | ||||||
|  |  | ||||||
|             router.push( "/login" ); |             router.push( "/login" ).then(() => {}).catch(() => {}); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         /** |         /** | ||||||
|          * 刷新页面 |          * 用于定时对页面进行刷新,其中会请求最新的业绩数据。 | ||||||
|          */ |          */ | ||||||
|         const refresh = () => |         const refresh = (): void => | ||||||
|         { |         { | ||||||
|             const deparmentInfo: Department = { |             const deparmentInfo: Department = { | ||||||
|                 departmentCode: callerInfo.departmentCode, |                 departmentCode: callerInfo.departmentCode, | ||||||
| @@ -251,11 +318,14 @@ export default { | |||||||
|  |  | ||||||
|             const rankinglistRequest: RankingListRequest = { |             const rankinglistRequest: RankingListRequest = { | ||||||
|                 departmentCode: callerInfo.departmentCode, |                 departmentCode: callerInfo.departmentCode, | ||||||
|                 year: "2023", |                 year: thisYearString, | ||||||
|                 month: "06", |                 month: thisMonthString, | ||||||
|             }; |             }; | ||||||
|  |  | ||||||
|  |             console.log( "refresh", rankinglistRequest ); | ||||||
|  |  | ||||||
|             queryDepartmentArchievement( deparmentInfo, applyDepartmentArchievementData ); |             queryDepartmentArchievement( deparmentInfo, applyDepartmentArchievementData ); | ||||||
|  |             queryCallerArchievement( callerInfo, applyCallerArchievementData ); | ||||||
|             requestRankingList( rankinglistRequest, applyRankingListData ); |             requestRankingList( rankinglistRequest, applyRankingListData ); | ||||||
|         }; |         }; | ||||||
|  |  | ||||||
| @@ -434,11 +504,19 @@ export default { | |||||||
|         width: 300px; |         width: 300px; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     >div { |     .carousel-item { | ||||||
|  |         // 为了限制走马灯组件的高度 | ||||||
|         display: block; |         display: block; | ||||||
|         height: 260px; |         height: 260px; | ||||||
|         width: 300px; |         width: 300px; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     // >div { | ||||||
|  |     //     // 为了限制走马灯组件的高度 | ||||||
|  |     //     display: block; | ||||||
|  |     //     height: 260px; | ||||||
|  |     //     width: 300px; | ||||||
|  |     // } | ||||||
| } | } | ||||||
| </style> | </style> | ||||||
| <style lang="scss"> | <style lang="scss"> | ||||||
|   | |||||||
| @@ -71,7 +71,7 @@ import { saveStaffInfo, getUserType, saveUserType, getCallerInfo, saveCallerInfo | |||||||
| import { login, loginCaller, type LoginCallerInfo, type LoginCallerResult } from "@/utils/account"; | import { login, loginCaller, type LoginCallerInfo, type LoginCallerResult } from "@/utils/account"; | ||||||
| import { ElMessage } from "element-plus"; | import { ElMessage } from "element-plus"; | ||||||
| import { StaffInfo } from "@/types/cpicxim/StaffInfo"; | import { StaffInfo } from "@/types/cpicxim/StaffInfo"; | ||||||
| import { TelSaler } from "@/types/cpicxim/TelSaler"; | import { type TelSaler } from "@/types/cpicxim/TelSaler"; | ||||||
|  |  | ||||||
| export default { | export default { | ||||||
|     name: "LoginPage", |     name: "LoginPage", | ||||||
| @@ -95,7 +95,7 @@ export default { | |||||||
|         /** |         /** | ||||||
|          * 保存p13账号 |          * 保存p13账号 | ||||||
|          */ |          */ | ||||||
|         const savedP13uid = () => |         const savedP13uid = (): void => | ||||||
|         { |         { | ||||||
|             window.localStorage.setItem( "stuff_account", ui.account ); |             window.localStorage.setItem( "stuff_account", ui.account ); | ||||||
|         }; |         }; | ||||||
| @@ -103,7 +103,7 @@ export default { | |||||||
|         /** |         /** | ||||||
|          * 登录函数,根据ui.currentMenu判断登录的是坐席还是员工。 |          * 登录函数,根据ui.currentMenu判断登录的是坐席还是员工。 | ||||||
|          */ |          */ | ||||||
|         const onLogin = () => |         const onLogin = (): void => | ||||||
|         { |         { | ||||||
|             // 保存用户类型 |             // 保存用户类型 | ||||||
|             saveUserType( ui.currentMenu ); |             saveUserType( ui.currentMenu ); | ||||||
| @@ -145,7 +145,7 @@ export default { | |||||||
|                             saveStaffInfo( staffInfo ); |                             saveStaffInfo( staffInfo ); | ||||||
|  |  | ||||||
|                             // 跳转路由 |                             // 跳转路由 | ||||||
|                             router.push( "/desktop" ); |                             router.push( "/desktop" ).then(() => {}).catch(() => {}); | ||||||
|                         } |                         } | ||||||
|                         else |                         else | ||||||
|                         { |                         { | ||||||
| @@ -182,7 +182,7 @@ export default { | |||||||
|                         // debugger; |                         // debugger; | ||||||
|  |  | ||||||
|                         // 查看標志位 |                         // 查看標志位 | ||||||
|                         if ( data.success === true ) |                         if ( data.success ) | ||||||
|                         { |                         { | ||||||
|                             // 查询成功,显示一个提示,保存工号,并跳转路由 |                             // 查询成功,显示一个提示,保存工号,并跳转路由 | ||||||
|                             ElMessage({ |                             ElMessage({ | ||||||
| @@ -201,7 +201,7 @@ export default { | |||||||
|  |  | ||||||
|                             saveCallerInfo( telsaler ); |                             saveCallerInfo( telsaler ); | ||||||
|  |  | ||||||
|                             router.push( "/desktop_archievement" ); |                             router.push( "/desktop_archievement" ).then(() => {}).catch(() => {}); | ||||||
|                         } |                         } | ||||||
|                         else |                         else | ||||||
|                         { |                         { | ||||||
| @@ -249,7 +249,7 @@ export default { | |||||||
|                     }); |                     }); | ||||||
|  |  | ||||||
|                     // 跳转路由 |                     // 跳转路由 | ||||||
|                     router.push( "/desktop_archievement" ); |                     router.push( "/desktop_archievement" ).then(() => {}).catch(() => {}); | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|             else if ( staffType === "cpicxim_staff" ) |             else if ( staffType === "cpicxim_staff" ) | ||||||
| @@ -258,7 +258,7 @@ export default { | |||||||
|             } |             } | ||||||
|         }); |         }); | ||||||
|  |  | ||||||
|         const onToggleMenu = ( type: string ) => |         const onToggleMenu = ( type: string ): void => | ||||||
|         { |         { | ||||||
|             ui.currentMenu = type; |             ui.currentMenu = type; | ||||||
|         }; |         }; | ||||||
|   | |||||||
| @@ -120,7 +120,7 @@ export default { | |||||||
|             callers: [], |             callers: [], | ||||||
|         }); |         }); | ||||||
|  |  | ||||||
|         const onCurrentPageIndexChange = ( pageIndex: number ) => |         const onCurrentPageIndexChange = ( pageIndex: number ): void => | ||||||
|         { |         { | ||||||
|             ui.table_current_page_index = pageIndex; |             ui.table_current_page_index = pageIndex; | ||||||
|         }; |         }; | ||||||
| @@ -129,7 +129,7 @@ export default { | |||||||
|          * 设置表格每页显示记录的数量 |          * 设置表格每页显示记录的数量 | ||||||
|          * @param pageSize 表格页记录数量 |          * @param pageSize 表格页记录数量 | ||||||
|          */ |          */ | ||||||
|         const onTablePageSizeChange = ( pageSize: number ) => |         const onTablePageSizeChange = ( pageSize: number ): void => | ||||||
|         { |         { | ||||||
|             ui.table_page_size = pageSize; |             ui.table_page_size = pageSize; | ||||||
|         }; |         }; | ||||||
|   | |||||||
| @@ -0,0 +1,19 @@ | |||||||
|  | /* | ||||||
|  |  * @Author: Kane | ||||||
|  |  * @Date: 2023-09-06 11:17:44 | ||||||
|  |  * @LastEditors: Kane | ||||||
|  |  * @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/mybatis/mapper/RewardsMapper.java | ||||||
|  |  * @Description:  | ||||||
|  |  *  | ||||||
|  |  * Copyright (c) ${2022} by Kane, All Rights Reserved.  | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | package com.cpic.xim.mybatis.mapper; | ||||||
|  |  | ||||||
|  | import java.util.ArrayList; | ||||||
|  | import com.cpic.xim.mybatis.pojo.RewardProject; | ||||||
|  |  | ||||||
|  | public interface RewardsMapper  | ||||||
|  | { | ||||||
|  |     public ArrayList<RewardProject> queryRewardProjects(); | ||||||
|  | } | ||||||
| @@ -22,8 +22,6 @@ public class MensualArchievementItem | |||||||
|         this.premium = premium; |         this.premium = premium; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|     public int getMonth() |     public int getMonth() | ||||||
|     { |     { | ||||||
|         return month; |         return month; | ||||||
|   | |||||||
| @@ -0,0 +1,90 @@ | |||||||
|  | /* | ||||||
|  |  * @Author: Kane | ||||||
|  |  * @Date: 2023-09-06 11:00:35 | ||||||
|  |  * @LastEditors: Kane | ||||||
|  |  * @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/mybatis/pojo/RewardProject.java | ||||||
|  |  * @Description: 奖励项目对象 | ||||||
|  |  *  | ||||||
|  |  * Copyright (c) ${2022} by Kane, All Rights Reserved.  | ||||||
|  |  */ | ||||||
|  | package com.cpic.xim.mybatis.pojo; | ||||||
|  |  | ||||||
|  | import com.fasterxml.jackson.annotation.JsonProperty; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 奖励项目对象 | ||||||
|  |  */ | ||||||
|  | public class RewardProject | ||||||
|  | { | ||||||
|  |     public RewardProject( int rewardCode, String rewardName) | ||||||
|  |     { | ||||||
|  |         this.rewardCode = rewardCode; | ||||||
|  |         this.rewardName = rewardName; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public int getRewardCode() | ||||||
|  |     { | ||||||
|  |         return rewardCode; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public void setRewardCode( int rewardCode ) | ||||||
|  |     { | ||||||
|  |         this.rewardCode = rewardCode; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public String getRewardName() | ||||||
|  |     { | ||||||
|  |         return rewardName; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public void setRewardName( String rewardName ) | ||||||
|  |     { | ||||||
|  |         this.rewardName = rewardName; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public String toString() | ||||||
|  |     { | ||||||
|  |         return "RewardProject [rewardCode=" + rewardCode + ", rewardName=" + rewardName + "]"; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public int hashCode() | ||||||
|  |     { | ||||||
|  |         final int prime = 31; | ||||||
|  |         int result = 1; | ||||||
|  |         result = prime * result + rewardCode; | ||||||
|  |         result = prime * result + ((rewardName == null) ? 0 : rewardName.hashCode()); | ||||||
|  |         return result; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public boolean equals( Object obj ) | ||||||
|  |     { | ||||||
|  |         if ( this == obj ) | ||||||
|  |             return true; | ||||||
|  |         if ( obj == null ) | ||||||
|  |             return false; | ||||||
|  |         if ( getClass() != obj.getClass() ) | ||||||
|  |             return false; | ||||||
|  |         RewardProject other = (RewardProject) obj; | ||||||
|  |         if ( rewardCode != other.rewardCode ) | ||||||
|  |             return false; | ||||||
|  |         if ( rewardName == null ) | ||||||
|  |         { | ||||||
|  |             if ( other.rewardName != null ) | ||||||
|  |                 return false; | ||||||
|  |         } else if ( !rewardName.equals( other.rewardName ) ) | ||||||
|  |             return false; | ||||||
|  |         return true; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     // 奖励项目代码 | ||||||
|  |     @JsonProperty("rewardCode") | ||||||
|  |     private int rewardCode; | ||||||
|  |  | ||||||
|  |     // 奖励项目名称 | ||||||
|  |     @JsonProperty("rewardName") | ||||||
|  |     private String rewardName; | ||||||
|  | } | ||||||
| @@ -0,0 +1,66 @@ | |||||||
|  | /* | ||||||
|  |  * @Author: Kane | ||||||
|  |  * @Date: 2023-09-06 10:41:34 | ||||||
|  |  * @LastEditors: Kane | ||||||
|  |  * @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/rewards/RewardController.java | ||||||
|  |  * @Description: 坐席奖励相关的请求 | ||||||
|  |  *  | ||||||
|  |  * Copyright (c) ${2022} by Kane, All Rights Reserved.  | ||||||
|  |  */ | ||||||
|  | package com.cpic.xim.web.controllers.rewards; | ||||||
|  |  | ||||||
|  | import java.io.IOException; | ||||||
|  | import java.util.ArrayList; | ||||||
|  | import org.apache.ibatis.session.SqlSession; | ||||||
|  | import org.slf4j.Logger; | ||||||
|  | import org.slf4j.LoggerFactory; | ||||||
|  | import org.springframework.stereotype.Controller; | ||||||
|  | import org.springframework.web.bind.annotation.PostMapping; | ||||||
|  | import org.springframework.web.bind.annotation.RequestMapping; | ||||||
|  | import org.springframework.web.bind.annotation.ResponseBody; | ||||||
|  | import com.cpic.xim.mybatis.mapper.RewardsMapper; | ||||||
|  | import com.cpic.xim.mybatis.pojo.RewardProject; | ||||||
|  | import com.cpic.xim.mybatis.utils.MybatisUtils; | ||||||
|  |  | ||||||
|  | @Controller | ||||||
|  | @RequestMapping("/rewards") | ||||||
|  | public class RewardController | ||||||
|  | { | ||||||
|  |     // 日志 | ||||||
|  |     private static Logger logger = LoggerFactory.getLogger(RewardController.class); | ||||||
|  |  | ||||||
|  |     private RewardController() {} | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 相应查询获奖项目清单的请求 | ||||||
|  |      * @return 获奖项目清单的response对象 | ||||||
|  |      */ | ||||||
|  |     @PostMapping("/query_reward_projects.do") | ||||||
|  |     @ResponseBody | ||||||
|  |     public RewardProjectsResponse queryRewardProjecrts() | ||||||
|  |     { | ||||||
|  |         RewardProjectsResponse response = new RewardProjectsResponse(); | ||||||
|  |  | ||||||
|  |         SqlSession session = null; | ||||||
|  |  | ||||||
|  |         try | ||||||
|  |         { | ||||||
|  |             session = MybatisUtils.getSqlSession(); | ||||||
|  |  | ||||||
|  |             RewardsMapper mapper = session.getMapper(RewardsMapper.class); | ||||||
|  |             ArrayList<RewardProject> rewards = mapper.queryRewardProjects(); | ||||||
|  |  | ||||||
|  |             response.setSuccess(true); | ||||||
|  |             response.setMessage("查询成功!"); | ||||||
|  |             response.setRewardList(rewards); | ||||||
|  |         } | ||||||
|  |         catch (IOException error ) | ||||||
|  |         { | ||||||
|  |             response.setSuccess(false); | ||||||
|  |             response.setMessage("查询失败!" + error.getMessage()); | ||||||
|  |             response.setRewardList(null); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         return response; | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -0,0 +1,46 @@ | |||||||
|  | /* | ||||||
|  |  * @Author: Kane | ||||||
|  |  * @Date: 2023-09-06 10:59:45 | ||||||
|  |  * @LastEditors: Kane | ||||||
|  |  * @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/rewards/RewardProjectsResponse.java | ||||||
|  |  * @Description: 奖励项目请求结果 | ||||||
|  |  *  | ||||||
|  |  * Copyright (c) ${2022} by Kane, All Rights Reserved.  | ||||||
|  |  */ | ||||||
|  | package com.cpic.xim.web.controllers.rewards; | ||||||
|  |  | ||||||
|  | import com.cpic.xim.mybatis.pojo.RewardProject; | ||||||
|  | import com.cpic.xim.web.controllers.QueryResult; | ||||||
|  | import com.fasterxml.jackson.annotation.JsonProperty; | ||||||
|  | import java.util.ArrayList; | ||||||
|  |  | ||||||
|  | public class RewardProjectsResponse extends QueryResult | ||||||
|  | { | ||||||
|  |     public RewardProjectsResponse( boolean success, String message, | ||||||
|  |             ArrayList<RewardProject> rewardList) | ||||||
|  |     { | ||||||
|  |         super( success, message ); | ||||||
|  |  | ||||||
|  |         this.rewardList = rewardList; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public RewardProjectsResponse() | ||||||
|  |     { | ||||||
|  |         super(); | ||||||
|  |  | ||||||
|  |         this.rewardList = null; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public ArrayList<RewardProject> getRewardList() | ||||||
|  |     { | ||||||
|  |         return rewardList; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public void setRewardList( ArrayList<RewardProject> rewardList ) | ||||||
|  |     { | ||||||
|  |         this.rewardList = rewardList; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @JsonProperty("rewardList") | ||||||
|  |     private ArrayList<RewardProject> rewardList; | ||||||
|  | } | ||||||
| @@ -0,0 +1,11 @@ | |||||||
|  | <?xml version="1.0" encoding="UTF-8"?> | ||||||
|  | <!DOCTYPE mapper  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd"> | ||||||
|  | <mapper namespace="com.cpic.xim.mybatis.mapper.RewardsMapper"> | ||||||
|  |     <select id="queryRewardProjects" resultMap="RewardProjectMap"> | ||||||
|  |         select reward_index, reward_name from reward_projects | ||||||
|  |     </select> | ||||||
|  |     <resultMap id="RewardProjectMap" type="com.cpic.xim.mybatis.pojo.RewardProject"> | ||||||
|  |         <id property="rewardCode" column="reward_index" /> | ||||||
|  |         <result property="rewardName" column="reward_name" javaType="String"/> | ||||||
|  |     </resultMap> | ||||||
|  | </mapper> | ||||||
| @@ -25,5 +25,6 @@ | |||||||
|         <!-- <mapper resource="mybatis/mapper/StaffMapper.xml" /> --> |         <!-- <mapper resource="mybatis/mapper/StaffMapper.xml" /> --> | ||||||
|         <mapper resource="mybatis/mapper/ArchievementMapper.xml" /> |         <mapper resource="mybatis/mapper/ArchievementMapper.xml" /> | ||||||
|         <mapper resource="mybatis/mapper/RankingListMapper.xml" /> |         <mapper resource="mybatis/mapper/RankingListMapper.xml" /> | ||||||
|  |         <mapper resource="mybatis/mapper/RewardsMapper.xml" /> | ||||||
|     </mappers> |     </mappers> | ||||||
| </configuration> | </configuration> | ||||||
| @@ -23,10 +23,11 @@ import org.junit.Test; | |||||||
| import org.slf4j.Logger; | import org.slf4j.Logger; | ||||||
| import org.slf4j.LoggerFactory; | import org.slf4j.LoggerFactory; | ||||||
| import com.cpic.xim.mybatis.mapper.ArchievementMapper; | import com.cpic.xim.mybatis.mapper.ArchievementMapper; | ||||||
|  | import com.cpic.xim.mybatis.mapper.RewardsMapper; | ||||||
| import com.cpic.xim.mybatis.pojo.MensualArchievementItem; | import com.cpic.xim.mybatis.pojo.MensualArchievementItem; | ||||||
| import com.cpic.xim.utils.archievement.DepartmentArchievement; | import com.cpic.xim.mybatis.pojo.RewardProject; | ||||||
| import com.cpic.xim.utils.ranking.CallerRankingList; |  | ||||||
| import com.cpic.xim.mybatis.utils.MybatisUtils; | import com.cpic.xim.mybatis.utils.MybatisUtils; | ||||||
|  | import com.cpic.xim.utils.ranking.CallerRankingList; | ||||||
|  |  | ||||||
| @SuppressWarnings( "all" ) | @SuppressWarnings( "all" ) | ||||||
| public class DesktopArchievementTest | public class DesktopArchievementTest | ||||||
| @@ -96,7 +97,7 @@ public class DesktopArchievementTest | |||||||
|             ArrayList<MensualArchievementItem> mensual = null; |             ArrayList<MensualArchievementItem> mensual = null; | ||||||
|             HashMap<String, Object> params = new HashMap<>(); |             HashMap<String, Object> params = new HashMap<>(); | ||||||
|  |  | ||||||
|             params.put( "a_caller_code", "5500065875" ); |             params.put( "a_caller_code", "61136" ); | ||||||
|  |  | ||||||
|             mapper.getCallerArchievement( params ); |             mapper.getCallerArchievement( params ); | ||||||
|  |  | ||||||
| @@ -114,4 +115,24 @@ public class DesktopArchievementTest | |||||||
|             assert (false); |             assert (false); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     @Test | ||||||
|  |     public void testRewardProjects() | ||||||
|  |     { | ||||||
|  |         try | ||||||
|  |         { | ||||||
|  |             SqlSession session = MybatisUtils.getSqlSession(); | ||||||
|  |             RewardsMapper mapper = session.getMapper( RewardsMapper.class ); | ||||||
|  |  | ||||||
|  |             ArrayList<RewardProject> rewards = mapper.queryRewardProjects(); | ||||||
|  |  | ||||||
|  |             System.out.println( rewards ); | ||||||
|  |             assert( rewards.isEmpty() == false ); | ||||||
|  |              | ||||||
|  |         } | ||||||
|  |         catch ( IOException error ) | ||||||
|  |         { | ||||||
|  |             assert( false ); | ||||||
|  |         } | ||||||
|  |     } | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user